diff --git a/lib/compiler/implementation/lib/web.dart b/lib/compiler/implementation/lib/web.dart
new file mode 100644
index 0000000..a75db7b
--- /dev/null
+++ b/lib/compiler/implementation/lib/web.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.
+
+#library("web");
+
+String htmlEscape(String text) {
+  throw "Unimplemented: web::htmlEscape(String).";
+}
diff --git a/lib/compiler/implementation/lib/web.dartp b/lib/compiler/implementation/lib/web.dartp
new file mode 100644
index 0000000..c3ba2ad
--- /dev/null
+++ b/lib/compiler/implementation/lib/web.dartp
@@ -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.
+
+// Patch file for dart:web
+
+/*patch*/ String htmlEscape(String text) {
+  return text.replaceAll("&", "&amp;")
+             .replaceAll("<", "&lt;")
+             .replaceAll(">", "&gt;")
+             .replaceAll('"', "&quot;")
+             .replaceAll("'", "&apos;");  // Different from original.
+}
diff --git a/lib/dom/templates/html/dartium/factoryprovider__Elements.darttemplate b/lib/dom/templates/html/dartium/factoryprovider__Elements.darttemplate
new file mode 100644
index 0000000..8fe27e5
--- /dev/null
+++ b/lib/dom/templates/html/dartium/factoryprovider__Elements.darttemplate
@@ -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.
+
+class _Elements {
+
+$!FACTORY_METHODS}
diff --git a/lib/dom/templates/html/dartium/impl_EventTarget.darttemplate b/lib/dom/templates/html/dartium/impl_EventTarget.darttemplate
new file mode 100644
index 0000000..1b4a00d
--- /dev/null
+++ b/lib/dom/templates/html/dartium/impl_EventTarget.darttemplate
@@ -0,0 +1,106 @@
+// Copyright (c) 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 _EventsImpl implements Events {
+  // TODO(podivilov): add type.
+  final _ptr;
+
+  final Map<String, EventListenerList> _listenerMap;
+
+  _EventsImpl(this._ptr) : _listenerMap = <EventListenerList>{};
+
+  EventListenerList operator [](String type) {
+    return _listenerMap.putIfAbsent(type,
+      () => new _EventListenerListImpl(_ptr, type));
+  }
+}
+
+class _EventListenerWrapper {
+  final EventListener raw;
+  final Function wrapped;
+  final bool useCapture;
+  _EventListenerWrapper(this.raw, this.wrapped, this.useCapture);
+}
+
+class _EventListenerListImpl implements EventListenerList {
+  // TODO(podivilov): add type.
+  final _ptr;
+  final String _type;
+  List<_EventListenerWrapper> _wrappers;
+
+  _EventListenerListImpl(this._ptr, this._type) :
+    // TODO(jacobr): switch to <_EventListenerWrapper>[] when the VM allow it.
+    _wrappers = new List<_EventListenerWrapper>();
+
+  EventListenerList add(EventListener listener, [bool useCapture = false]) {
+    _add(listener, useCapture);
+    return this;
+  }
+
+  EventListenerList remove(EventListener listener, [bool useCapture = false]) {
+    _remove(listener, useCapture);
+    return this;
+  }
+
+  bool dispatch(Event evt) {
+    // TODO(jacobr): what is the correct behavior here. We could alternately
+    // force the event to have the expected type.
+    assert(evt.type == _type);
+    return _ptr.$dom_dispatchEvent(evt);
+  }
+
+  void _add(EventListener listener, bool useCapture) {
+    _ptr.$dom_addEventListener(_type,
+                          _findOrAddWrapper(listener, useCapture),
+                          useCapture);
+  }
+
+  void _remove(EventListener listener, bool useCapture) {
+    Function wrapper = _removeWrapper(listener, useCapture);
+    if (wrapper !== null) {
+      _ptr.$dom_removeEventListener(_type, wrapper, useCapture);
+    }
+  }
+
+  Function _removeWrapper(EventListener listener, bool useCapture) {
+    if (_wrappers === null) {
+      return null;
+    }
+    for (int i = 0; i < _wrappers.length; i++) {
+      _EventListenerWrapper wrapper = _wrappers[i];
+      if (wrapper.raw === listener && wrapper.useCapture == useCapture) {
+        // Order doesn't matter so we swap with the last element instead of
+        // performing a more expensive remove from the middle of the list.
+        if (i + 1 != _wrappers.length) {
+          _wrappers[i] = _wrappers.removeLast();
+        } else {
+          _wrappers.removeLast();
+        }
+        return wrapper.wrapped;
+      }
+    }
+    return null;
+  }
+
+  Function _findOrAddWrapper(EventListener listener, bool useCapture) {
+    if (_wrappers === null) {
+      _wrappers = <_EventListenerWrapper>[];
+    } else {
+      for (_EventListenerWrapper wrapper in _wrappers) {
+        if (wrapper.raw === listener && wrapper.useCapture == useCapture) {
+          return wrapper.wrapped;
+        }
+      }
+    }
+    final wrapped = (e) { listener(e); };
+    _wrappers.add(new _EventListenerWrapper(listener, wrapped, useCapture));
+    return wrapped;
+  }
+}
+
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+/*
+$!MEMBERS
+*/
+}
diff --git a/lib/dom/templates/html/frog/factoryprovider__Elements.darttemplate b/lib/dom/templates/html/frog/factoryprovider__Elements.darttemplate
new file mode 100644
index 0000000..8fe27e5
--- /dev/null
+++ b/lib/dom/templates/html/frog/factoryprovider__Elements.darttemplate
@@ -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.
+
+class _Elements {
+
+$!FACTORY_METHODS}
diff --git a/lib/dom/templates/html/frog/impl_EventTarget.darttemplate b/lib/dom/templates/html/frog/impl_EventTarget.darttemplate
new file mode 100644
index 0000000..893f3d2
--- /dev/null
+++ b/lib/dom/templates/html/frog/impl_EventTarget.darttemplate
@@ -0,0 +1,61 @@
+// Copyright (c) 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 _EventsImpl implements Events {
+  /* Raw event target. */
+  // TODO(jacobr): it would be nice if we could specify this as
+  // _EventTargetImpl or EventTarget
+  final Dynamic _ptr;
+
+  _EventsImpl(this._ptr);
+
+  _EventListenerListImpl operator [](String type) {
+    return new _EventListenerListImpl(_ptr, type);
+  }
+}
+
+class _EventListenerListImpl implements EventListenerList {
+  
+  // TODO(jacobr): make this _EventTargetImpl
+  final Dynamic _ptr;
+  final String _type;
+
+  _EventListenerListImpl(this._ptr, this._type);
+
+  // TODO(jacobr): implement equals.
+
+  _EventListenerListImpl add(EventListener listener,
+      [bool useCapture = false]) {
+    _add(listener, useCapture);
+    return this;
+  }
+
+  _EventListenerListImpl remove(EventListener listener,
+      [bool useCapture = false]) {
+    _remove(listener, useCapture);
+    return this;
+  }
+
+  bool dispatch(Event evt) {
+    // TODO(jacobr): what is the correct behavior here. We could alternately
+    // force the event to have the expected type.
+    assert(evt.type == _type);
+    return _ptr.$dom_dispatchEvent(evt);
+  }
+
+  void _add(EventListener listener, bool useCapture) {
+    _ptr.$dom_addEventListener(_type, listener, useCapture);
+  }
+
+  void _remove(EventListener listener, bool useCapture) {
+    _ptr.$dom_removeEventListener(_type, listener, useCapture);
+  }
+}
+
+
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+
+  Events get on() => new _EventsImpl(this);
+$!MEMBERS
+}
diff --git a/pkg/analyzer_experimental/example/resolver_driver.dart b/pkg/analyzer_experimental/example/resolver_driver.dart
index 883816e..c3a9ef7 100644
--- a/pkg/analyzer_experimental/example/resolver_driver.dart
+++ b/pkg/analyzer_experimental/example/resolver_driver.dart
@@ -28,7 +28,7 @@
 
   AnalysisContext context = AnalysisEngine.instance.createAnalysisContext();
   context.sourceFactory = new SourceFactory.con2([new DartUriResolver(sdk), new FileUriResolver()]);
-  Source source = new FileBasedSource.con1(context.sourceFactory.contentCache, new JavaFile(args[1]));
+  Source source = new FileBasedSource.con1(context.sourceFactory, new JavaFile(args[1]));
   //
   ChangeSet changeSet = new ChangeSet();
   changeSet.added(source);
diff --git a/pkg/analyzer_experimental/lib/src/error.dart b/pkg/analyzer_experimental/lib/src/error.dart
index d3df0e1..5485a0f 100644
--- a/pkg/analyzer_experimental/lib/src/error.dart
+++ b/pkg/analyzer_experimental/lib/src/error.dart
@@ -98,8 +98,8 @@
 
   String get result => _buffer.toString();
 
-  void accept(CharBuffer contents, _) =>
-    _buffer.write(contents.subSequence(0, contents.length()));
+  void accept1(CharBuffer contents, _) =>
+    _buffer.write(contents.subSequence(0, contents.length));
 
   void accept2(String contents, _) => _buffer.write(contents);
 }
diff --git a/pkg/analyzer_experimental/lib/src/generated/error.dart b/pkg/analyzer_experimental/lib/src/generated/error.dart
index 152ea76..1f684c9 100644
--- a/pkg/analyzer_experimental/lib/src/generated/error.dart
+++ b/pkg/analyzer_experimental/lib/src/generated/error.dart
@@ -1395,7 +1395,7 @@
   /**
    * An error listener that ignores errors that are reported to it.
    */
-  static AnalysisErrorListener _NULL_LISTENER = new AnalysisErrorListener_4();
+  AnalysisErrorListener _NULL_LISTENER = new AnalysisErrorListener_4();
   /**
    * This method is invoked when an error has been found by the analysis engine.
    * @param error the error that was just found (not {@code null})
diff --git a/pkg/analyzer_experimental/lib/src/generated/java_core.dart b/pkg/analyzer_experimental/lib/src/generated/java_core.dart
index d415448..3bf99ccc 100644
--- a/pkg/analyzer_experimental/lib/src/generated/java_core.dart
+++ b/pkg/analyzer_experimental/lib/src/generated/java_core.dart
@@ -319,7 +319,7 @@
   }
 
   void setAll(int index, Iterable<E> iterable) {
-    elements.setAll(index, iterable);
+    elements.setAll(iterable);
   }
 
   void sort([int compare(E a, E b)]) {
@@ -462,13 +462,11 @@
 class JavaStringBuilder {
   StringBuffer sb = new StringBuffer();
   String toString() => sb.toString();
-  JavaStringBuilder append(x) {
+  void append(x) {
     sb.write(x);
-    return this;
   }
-  JavaStringBuilder appendChar(int c) {
+  void appendChar(int c) {
     sb.writeCharCode(c);
-    return this;
   }
   int get length => sb.length;
   void set length(int newLength) {
diff --git a/pkg/analyzer_experimental/lib/src/generated/resolver.dart b/pkg/analyzer_experimental/lib/src/generated/resolver.dart
index 714a079..fc7b84d 100644
--- a/pkg/analyzer_experimental/lib/src/generated/resolver.dart
+++ b/pkg/analyzer_experimental/lib/src/generated/resolver.dart
@@ -1994,7 +1994,7 @@
         } else if (identifier.inGetterContext()) {
           _resolver.reportError(StaticWarningCode.UNDEFINED_GETTER, identifier, [identifier.name, targetType.name]);
         } else {
-          print("two ${identifier.name}");
+          System.out.println("two ${identifier.name}");
           _resolver.reportError(StaticWarningCode.UNDEFINED_IDENTIFIER, identifier, [identifier.name]);
         }
       }
diff --git a/pkg/analyzer_experimental/lib/src/generated/source_io.dart b/pkg/analyzer_experimental/lib/src/generated/source_io.dart
index 912469a..f016564 100644
--- a/pkg/analyzer_experimental/lib/src/generated/source_io.dart
+++ b/pkg/analyzer_experimental/lib/src/generated/source_io.dart
@@ -195,7 +195,7 @@
     } on IOException catch (e) {
       AnalysisEngine.instance.logger.logError2("Canonical failed: ${pkgDir}", e);
     }
-    return new JavaFile.relative(pkgDir, relPath.replaceAll('/', JavaFile.separatorChar));
+    return new JavaFile.relative(pkgDir, relPath.replaceAll(0x2F, JavaFile.separatorChar));
   }
 }
 /**
diff --git a/pkg/analyzer_experimental/test/generated/test_support.dart b/pkg/analyzer_experimental/test/generated/test_support.dart
index 06881f9..c666db1 100644
--- a/pkg/analyzer_experimental/test/generated/test_support.dart
+++ b/pkg/analyzer_experimental/test/generated/test_support.dart
@@ -669,9 +669,6 @@
   Source resolveRelative(Uri uri) {
     throw new UnsupportedOperationException();
   }
-  UriKind get uriKind {
-    throw new UnsupportedOperationException();
-  }
 }
 
 /**
diff --git a/pkg/scheduled_test/lib/scheduled_process.dart b/pkg/scheduled_test/lib/scheduled_process.dart
index 4508f54..75891a9 100644
--- a/pkg/scheduled_test/lib/scheduled_process.dart
+++ b/pkg/scheduled_test/lib/scheduled_process.dart
@@ -151,7 +151,8 @@
                              arguments,
                              workingDirectory: workingDirectory,
                              environment: environment).then((process) {
-          process.stdin.encoding = Encoding.UTF_8;
+          // TODO(nweiz): enable this when issue 9020 is fixed.
+          // process.stdin.encoding = Encoding.UTF_8;
           return process;
         });
       });
diff --git a/runtime/bin/dbg_message.cc b/runtime/bin/dbg_message.cc
index caec295..5713657 100644
--- a/runtime/bin/dbg_message.cc
+++ b/runtime/bin/dbg_message.cc
@@ -1053,7 +1053,7 @@
 
 
 DbgMsgQueue* DbgMsgQueueList::list_ = NULL;
-dart::Mutex* DbgMsgQueueList::msg_queue_list_lock_ = new dart::Mutex();
+dart::Mutex DbgMsgQueueList::msg_queue_list_lock_;
 
 
 void DbgMsgQueueList::Initialize() {
@@ -1085,7 +1085,7 @@
                                         const char* start,
                                         const char* end,
                                         int debug_fd) {
-  MutexLocker ml(msg_queue_list_lock_);
+  MutexLocker ml(&msg_queue_list_lock_);
   DbgMsgQueue* queue = DbgMsgQueueList::GetIsolateMsgQueueLocked(isolate_id);
   if (queue != NULL) {
     queue->AddMessage(cmd_idx, start, end, debug_fd);
@@ -1096,7 +1096,7 @@
 
 
 bool DbgMsgQueueList::InterruptIsolate(Dart_IsolateId isolate_id) {
-  MutexLocker ml(msg_queue_list_lock_);
+  MutexLocker ml(&msg_queue_list_lock_);
   DbgMsgQueue* queue = DbgMsgQueueList::GetIsolateMsgQueueLocked(isolate_id);
   if (queue != NULL) {
     queue->InterruptIsolate();
@@ -1107,7 +1107,7 @@
 
 
 DbgMsgQueue* DbgMsgQueueList::AddIsolateMsgQueue(Dart_IsolateId isolate_id) {
-  MutexLocker ml(msg_queue_list_lock_);
+  MutexLocker ml(&msg_queue_list_lock_);
 
   DbgMsgQueue* queue = new DbgMsgQueue(isolate_id, list_);
   ASSERT(queue != NULL);
@@ -1117,7 +1117,7 @@
 
 
 DbgMsgQueue* DbgMsgQueueList::GetIsolateMsgQueue(Dart_IsolateId isolate_id) {
-  MutexLocker ml(msg_queue_list_lock_);
+  MutexLocker ml(&msg_queue_list_lock_);
   ASSERT(Dart_GetIsolate(isolate_id) == Dart_CurrentIsolate());
   return GetIsolateMsgQueueLocked(isolate_id);
 }
@@ -1138,7 +1138,7 @@
 
 
 void DbgMsgQueueList::RemoveIsolateMsgQueue(Dart_IsolateId isolate_id) {
-  MutexLocker ml(msg_queue_list_lock_);
+  MutexLocker ml(&msg_queue_list_lock_);
   if (list_ == NULL) {
     return;  // No items in the list.
   }
@@ -1165,7 +1165,7 @@
 
 
 void DbgMsgQueueList::ListIsolateIds(dart::TextBuffer* msg) {
-  MutexLocker ml(msg_queue_list_lock_);
+  MutexLocker ml(&msg_queue_list_lock_);
   if (list_ == NULL) {
     return;  // No items in the list.
   }
diff --git a/runtime/bin/dbg_message.h b/runtime/bin/dbg_message.h
index ca05255..85be1a5 100644
--- a/runtime/bin/dbg_message.h
+++ b/runtime/bin/dbg_message.h
@@ -255,7 +255,7 @@
   static DbgMsgQueue* GetIsolateMsgQueueLocked(Dart_IsolateId isolate_id);
 
   static DbgMsgQueue* list_;
-  static dart::Mutex* msg_queue_list_lock_;
+  static dart::Mutex msg_queue_list_lock_;
 
   DISALLOW_ALLOCATION();
   DISALLOW_IMPLICIT_CONSTRUCTORS(DbgMsgQueueList);
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index c852c42..63e214c 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -66,6 +66,8 @@
 dart/byte_array_optimized_test: Skip
 
 # Bug in optimized code generation.
+cc/ExternalStringDeoptimize: Skip
+dart/inline_stack_frame_test: Skip
 dart/isolate_mirror_local_test: Skip
 
 [ $arch == mips ]
@@ -80,11 +82,6 @@
 dart/byte_array_optimized_test: Skip
 dart/inline_stack_frame_test: Skip
 
-# Bug in optimized code generation.
-cc/ExternalStringDeoptimize: Skip
-dart/inline_stack_frame_test: Skip
-dart/isolate_mirror_local_test: Skip
-
 # TODO(ajohnsen): Fix this as part of library changes.
 [ $compiler == none ]
 cc/CustomIsolates: Skip # Bug 6890
diff --git a/runtime/vm/assembler_mips.cc b/runtime/vm/assembler_mips.cc
index 200e777..3f496db 100644
--- a/runtime/vm/assembler_mips.cc
+++ b/runtime/vm/assembler_mips.cc
@@ -204,14 +204,10 @@
 }
 
 
-void Assembler::CompareObject(Register rd1, Register rd2,
-                              Register rn, const Object& object) {
+void Assembler::CompareObject(Register rd, Register rn, const Object& object) {
   ASSERT(rn != TMP1);
-  ASSERT(rd1 != TMP1);
-  ASSERT(rd1 != rd2);
   LoadObject(TMP1, object);
-  slt(rd1, rn, TMP1);
-  slt(rd2, TMP1, rn);
+  subu(rd, rn, TMP1);
 }
 
 
diff --git a/runtime/vm/assembler_mips.h b/runtime/vm/assembler_mips.h
index c48f1bd..d496837 100644
--- a/runtime/vm/assembler_mips.h
+++ b/runtime/vm/assembler_mips.h
@@ -230,11 +230,10 @@
   }
 
   // CPU instructions in alphabetical order.
-  void addd(DRegister dd, DRegister ds, DRegister dt) {
-    // DRegisters start at the even FRegisters.
-    FRegister fd = static_cast<FRegister>(dd * 2);
-    FRegister fs = static_cast<FRegister>(ds * 2);
-    FRegister ft = static_cast<FRegister>(dt * 2);
+  void addd(FRegister fd, FRegister fs, FRegister ft) {
+    ASSERT(EvenFPURegister(fd));
+    ASSERT(EvenFPURegister(fs));
+    ASSERT(EvenFPURegister(ft));
     EmitFpuRType(COP1, FMT_D, ft, fs, fd, COP1_ADD);
   }
 
@@ -379,58 +378,58 @@
   }
 
   // FPU compare, always false.
-  void cfd(DRegister ds, DRegister dt) {
-    FRegister fs = static_cast<FRegister>(ds * 2);
-    FRegister ft = static_cast<FRegister>(dt * 2);
+  void cfd(FRegister fs, FRegister ft) {
+    ASSERT(EvenFPURegister(fs));
+    ASSERT(EvenFPURegister(ft));
     EmitFpuRType(COP1, FMT_D, ft, fs, F0, COP1_C_F);
   }
 
   // FPU compare, true if unordered, i.e. one is NaN.
-  void cund(DRegister ds, DRegister dt) {
-    FRegister fs = static_cast<FRegister>(ds * 2);
-    FRegister ft = static_cast<FRegister>(dt * 2);
+  void cund(FRegister fs, FRegister ft) {
+    ASSERT(EvenFPURegister(fs));
+    ASSERT(EvenFPURegister(ft));
     EmitFpuRType(COP1, FMT_D, ft, fs, F0, COP1_C_UN);
   }
 
   // FPU compare, true if equal.
-  void ceqd(DRegister ds, DRegister dt) {
-    FRegister fs = static_cast<FRegister>(ds * 2);
-    FRegister ft = static_cast<FRegister>(dt * 2);
+  void ceqd(FRegister fs, FRegister ft) {
+    ASSERT(EvenFPURegister(fs));
+    ASSERT(EvenFPURegister(ft));
     EmitFpuRType(COP1, FMT_D, ft, fs, F0, COP1_C_EQ);
   }
 
   // FPU compare, true if unordered or equal.
-  void cueqd(DRegister ds, DRegister dt) {
-    FRegister fs = static_cast<FRegister>(ds * 2);
-    FRegister ft = static_cast<FRegister>(dt * 2);
+  void cueqd(FRegister fs, FRegister ft) {
+    ASSERT(EvenFPURegister(fs));
+    ASSERT(EvenFPURegister(ft));
     EmitFpuRType(COP1, FMT_D, ft, fs, F0, COP1_C_UEQ);
   }
 
   // FPU compare, true if less than.
-  void coltd(DRegister ds, DRegister dt) {
-    FRegister fs = static_cast<FRegister>(ds * 2);
-    FRegister ft = static_cast<FRegister>(dt * 2);
+  void coltd(FRegister fs, FRegister ft) {
+    ASSERT(EvenFPURegister(fs));
+    ASSERT(EvenFPURegister(ft));
     EmitFpuRType(COP1, FMT_D, ft, fs, F0, COP1_C_OLT);
   }
 
   // FPU compare, true if unordered or less than.
-  void cultd(DRegister ds, DRegister dt) {
-    FRegister fs = static_cast<FRegister>(ds * 2);
-    FRegister ft = static_cast<FRegister>(dt * 2);
+  void cultd(FRegister fs, FRegister ft) {
+    ASSERT(EvenFPURegister(fs));
+    ASSERT(EvenFPURegister(ft));
     EmitFpuRType(COP1, FMT_D, ft, fs, F0, COP1_C_ULT);
   }
 
   // FPU compare, true if less or equal.
-  void coled(DRegister ds, DRegister dt) {
-    FRegister fs = static_cast<FRegister>(ds * 2);
-    FRegister ft = static_cast<FRegister>(dt * 2);
+  void coled(FRegister fs, FRegister ft) {
+    ASSERT(EvenFPURegister(fs));
+    ASSERT(EvenFPURegister(ft));
     EmitFpuRType(COP1, FMT_D, ft, fs, F0, COP1_C_OLE);
   }
 
   // FPU compare, true if unordered or less or equal.
-  void culed(DRegister ds, DRegister dt) {
-    FRegister fs = static_cast<FRegister>(ds * 2);
-    FRegister ft = static_cast<FRegister>(dt * 2);
+  void culed(FRegister fs, FRegister ft) {
+    ASSERT(EvenFPURegister(fs));
+    ASSERT(EvenFPURegister(ft));
     EmitFpuRType(COP1, FMT_D, ft, fs, F0, COP1_C_ULE);
   }
 
@@ -443,20 +442,21 @@
   }
 
   // Converts a 32-bit signed int in fs to a double in fd.
-  void cvtdw(DRegister dd, FRegister fs) {
-    FRegister fd = static_cast<FRegister>(dd * 2);
+  void cvtdw(FRegister fd, FRegister fs) {
+    ASSERT(EvenFPURegister(fd));
     EmitFpuRType(COP1, FMT_W, F0, fs, fd, COP1_CVT_D);
   }
 
   // Converts a 64-bit signed int in fs to a double in fd.
-  void cvtdl(DRegister dd, DRegister ds) {
-    FRegister fs = static_cast<FRegister>(ds * 2);
-    FRegister fd = static_cast<FRegister>(dd * 2);
+  void cvtdl(FRegister fd, FRegister fs) {
+    ASSERT(EvenFPURegister(fs));
+    ASSERT(EvenFPURegister(fd));
     EmitFpuRType(COP1, FMT_L, F0, fs, fd, COP1_CVT_D);
   }
 
-  void cvtwd(FRegister fd, DRegister ds) {
-    FRegister fs = static_cast<FRegister>(ds * 2);
+  void cvtwd(FRegister fd, FRegister fs) {
+    ASSERT(EvenFPURegister(fs));
+    ASSERT(EvenFPURegister(fd));
     EmitFpuRType(COP1, FMT_D, F0, fs, fd, COP1_CVT_W);
   }
 
@@ -464,10 +464,10 @@
     EmitRType(SPECIAL, rs, rt, R0, 0, DIV);
   }
 
-  void divd(DRegister dd, DRegister ds, DRegister dt) {
-    FRegister fd = static_cast<FRegister>(dd * 2);
-    FRegister fs = static_cast<FRegister>(ds * 2);
-    FRegister ft = static_cast<FRegister>(dt * 2);
+  void divd(FRegister fd, FRegister fs, FRegister ft) {
+    ASSERT(EvenFPURegister(fd));
+    ASSERT(EvenFPURegister(fs));
+    ASSERT(EvenFPURegister(ft));
     EmitFpuRType(COP1, FMT_D, ft, fs, fd, COP1_DIV);
   }
 
@@ -496,8 +496,8 @@
     EmitLoadStore(LBU, rt, addr);
   }
 
-  void ldc1(DRegister dt, const Address& addr) {
-    FRegister ft = static_cast<FRegister>(dt * 2);
+  void ldc1(FRegister ft, const Address& addr) {
+    ASSERT(EvenFPURegister(ft));
     EmitFpuLoadStore(LDC1, ft, addr);
   }
 
@@ -542,9 +542,9 @@
     or_(rd, rs, ZR);
   }
 
-  void movd(DRegister dd, DRegister ds) {
-    FRegister fd = static_cast<FRegister>(dd * 2);
-    FRegister fs = static_cast<FRegister>(ds * 2);
+  void movd(FRegister fd, FRegister fs) {
+    ASSERT(EvenFPURegister(fd));
+    ASSERT(EvenFPURegister(fs));
     EmitFpuRType(COP1, FMT_D, F0, fs, fd, COP1_MOV);
   }
 
@@ -567,10 +567,10 @@
          fs << kFsShift);
   }
 
-  void muld(DRegister dd, DRegister ds, DRegister dt) {
-    FRegister fd = static_cast<FRegister>(dd * 2);
-    FRegister fs = static_cast<FRegister>(ds * 2);
-    FRegister ft = static_cast<FRegister>(dt * 2);
+  void muld(FRegister fd, FRegister fs, FRegister ft) {
+    ASSERT(EvenFPURegister(fd));
+    ASSERT(EvenFPURegister(fs));
+    ASSERT(EvenFPURegister(ft));
     EmitFpuRType(COP1, FMT_D, ft, fs, fd, COP1_MUL);
   }
 
@@ -604,8 +604,8 @@
     EmitLoadStore(SB, rt, addr);
   }
 
-  void sdc1(DRegister dt, const Address& addr) {
-    FRegister ft = static_cast<FRegister>(dt * 2);
+  void sdc1(FRegister ft, const Address& addr) {
+    ASSERT(EvenFPURegister(ft));
     EmitFpuLoadStore(SDC1, ft, addr);
   }
 
@@ -625,25 +625,13 @@
     EmitRType(SPECIAL, rs, rt, rd, 0, SLT);
   }
 
-  void slti(Register rt, Register rs, const Immediate& imm) {
-    ASSERT(Utils::IsInt(kImmBits, imm.value()));
-    int16_t imm_value = static_cast<int16_t>(imm.value());
-    EmitIType(SLTI, rs, rt, imm_value);
-  }
-
-  void sltiu(Register rt, Register rs, const Immediate& imm) {
-    ASSERT(Utils::IsUint(kImmBits, imm.value()));
-    uint16_t imm_value = static_cast<uint16_t>(imm.value());
-    EmitIType(SLTIU, rs, rt, imm_value);
-  }
-
   void sltu(Register rd, Register rs, Register rt) {
     EmitRType(SPECIAL, rs, rt, rd, 0, SLTU);
   }
 
-  void sqrtd(DRegister dd, DRegister ds) {
-    FRegister fd = static_cast<FRegister>(dd * 2);
-    FRegister fs = static_cast<FRegister>(ds * 2);
+  void sqrtd(FRegister fd, FRegister fs) {
+    ASSERT(EvenFPURegister(fd));
+    ASSERT(EvenFPURegister(fs));
     EmitFpuRType(COP1, FMT_D, F0, fs, fd, COP1_SQRT);
   }
 
@@ -663,10 +651,10 @@
     EmitRType(SPECIAL, rs, rt, rd, 0, SRLV);
   }
 
-  void subd(DRegister dd, DRegister ds, DRegister dt) {
-    FRegister fd = static_cast<FRegister>(dd * 2);
-    FRegister fs = static_cast<FRegister>(ds * 2);
-    FRegister ft = static_cast<FRegister>(dt * 2);
+  void subd(FRegister fd, FRegister fs, FRegister ft) {
+    ASSERT(EvenFPURegister(fd));
+    ASSERT(EvenFPURegister(fs));
+    ASSERT(EvenFPURegister(ft));
     EmitFpuRType(COP1, FMT_D, ft, fs, fd, COP1_SUB);
   }
 
@@ -772,23 +760,23 @@
     }
   }
 
-  void LoadImmediate(DRegister rd, double value) {
-    FRegister frd = static_cast<FRegister>(rd * 2);
+  void LoadImmediate(FRegister rd, double value) {
+    ASSERT(EvenFPURegister(rd));
     const int64_t ival = bit_cast<uint64_t, double>(value);
     const int32_t low = Utils::Low32Bits(ival);
     const int32_t high = Utils::High32Bits(ival);
     if (low != 0) {
       LoadImmediate(TMP1, low);
-      mtc1(TMP1, frd);
+      mtc1(TMP1, rd);
     } else {
-      mtc1(ZR, frd);
+      mtc1(ZR, rd);
     }
 
     if (high != 0) {
       LoadImmediate(TMP1, high);
-      mtc1(TMP1, static_cast<FRegister>(frd + 1));
+      mtc1(TMP1, static_cast<FRegister>(rd + 1));
     } else {
-      mtc1(ZR, static_cast<FRegister>(frd + 1));
+      mtc1(ZR, static_cast<FRegister>(rd + 1));
     }
   }
 
@@ -865,13 +853,8 @@
   }
 
   void BranchSignedGreaterEqual(Register rd, int32_t value, Label* l) {
-    if (Utils::IsInt(kImmBits, value)) {
-      slti(CMPRES, rd, Immediate(value));
-      beq(CMPRES, ZR, l);
-    } else {
-      LoadImmediate(CMPRES, value);
-      BranchSignedGreaterEqual(rd, CMPRES, l);
-    }
+    LoadImmediate(CMPRES, value);
+    BranchSignedGreaterEqual(rd, CMPRES, l);
   }
 
   void BranchUnsignedGreaterEqual(Register rd, Register rs, Label* l) {
@@ -880,13 +863,8 @@
   }
 
   void BranchUnsignedGreaterEqual(Register rd, int32_t value, Label* l) {
-    if (Utils::IsUint(kImmBits, value)) {
-      sltiu(CMPRES, rd, Immediate(value));
-      beq(CMPRES, ZR, l);
-    } else {
-      LoadImmediate(CMPRES, value);
-      BranchUnsignedGreaterEqual(rd, CMPRES, l);
-    }
+    LoadImmediate(CMPRES, value);
+    BranchUnsignedGreaterEqual(rd, CMPRES, l);
   }
 
   void BranchSignedLess(Register rd, Register rs, Label* l) {
@@ -894,13 +872,8 @@
   }
 
   void BranchSignedLess(Register rd, int32_t value, Label* l) {
-    if (Utils::IsInt(kImmBits, value)) {
-      slti(CMPRES, rd, Immediate(value));
-      bne(CMPRES, ZR, l);
-    } else {
-      LoadImmediate(CMPRES, value);
-      BranchSignedGreater(CMPRES, rd, l);
-    }
+    LoadImmediate(CMPRES, value);
+    BranchSignedGreater(CMPRES, rd, l);
   }
 
   void BranchUnsignedLess(Register rd, Register rs, Label* l) {
@@ -908,13 +881,8 @@
   }
 
   void BranchUnsignedLess(Register rd, int32_t value, Label* l) {
-    if (Utils::IsUint(kImmBits, value)) {
-      sltiu(CMPRES, rd, Immediate(value));
-      bne(CMPRES, ZR, l);
-    } else {
-      LoadImmediate(CMPRES, value);
-      BranchUnsignedGreater(CMPRES, rd, l);
-    }
+    LoadImmediate(CMPRES, value);
+    BranchUnsignedGreater(CMPRES, rd, l);
   }
 
   void BranchSignedLessEqual(Register rd, Register rs, Label* l) {
@@ -969,11 +937,9 @@
   void LoadObject(Register rd, const Object& object);
   void PushObject(const Object& object);
 
-  // Compares rn with the object. Returns results in rd1 and rd2.
-  // rd1 is 1 if rn < object. rd2 is 1 if object < rn. Since both cannot be
-  // 1, rd1 == rd2 (== 0) iff rn == object.
-  void CompareObject(Register rd1, Register rd2,
-                     Register rn, const Object& object);
+  // Sets register rd to zero if the object is equal to register rn,
+  // sets it to non-zero otherwise.
+  void CompareObject(Register rd, Register rn, const Object& object);
 
   void LoadClassId(Register result, Register object);
   void LoadClassById(Register result, Register class_id);
@@ -1027,6 +993,10 @@
 
   GrowableArray<CodeComment*> comments_;
 
+  bool EvenFPURegister(FRegister reg) {
+    return (static_cast<int>(reg) & 1) == 0;
+  }
+
   void Emit(int32_t value) {
     // Emitting an instruction clears the delay slot state.
     in_delay_slot_ = false;
diff --git a/runtime/vm/assembler_mips_test.cc b/runtime/vm/assembler_mips_test.cc
index 445ab8e..1dc7d33 100644
--- a/runtime/vm/assembler_mips_test.cc
+++ b/runtime/vm/assembler_mips_test.cc
@@ -1186,9 +1186,9 @@
 
 
 ASSEMBLER_TEST_GENERATE(Addd, assembler) {
-  __ LoadImmediate(D0, 1.0);
-  __ LoadImmediate(D1, 2.0);
-  __ addd(D2, D0, D1);
+  __ LoadImmediate(F0, 1.0);
+  __ LoadImmediate(F2, 2.0);
+  __ addd(F4, F0, F2);
   __ mfc1(V0, F4);
   __ mfc1(V1, F5);
   __ Ret();
@@ -1204,8 +1204,8 @@
 
 
 ASSEMBLER_TEST_GENERATE(Movd, assembler) {
-  __ LoadImmediate(D0, 1.0);
-  __ movd(D1, D0);
+  __ LoadImmediate(F0, 1.0);
+  __ movd(F2, F0);
   __ mfc1(V0, F2);
   __ mfc1(V1, F3);
   __ Ret();
@@ -1224,9 +1224,9 @@
   __ AddImmediate(SP, -8 * kWordSize);
   __ LoadImmediate(T1, ~(8 - 1));
   __ and_(T0, SP, T1);  // Need 8 byte alignment.
-  __ LoadImmediate(D0, 1.0);
-  __ sdc1(D0, Address(T0));
-  __ ldc1(D1, Address(T0));
+  __ LoadImmediate(F0, 1.0);
+  __ sdc1(F0, Address(T0));
+  __ ldc1(F2, Address(T0));
   __ mfc1(V0, F2);
   __ mfc1(V1, F3);
   __ Ret();
@@ -1242,12 +1242,12 @@
 
 
 ASSEMBLER_TEST_GENERATE(Addd_NaN, assembler) {
-  __ LoadImmediate(D0, 1.0);
+  __ LoadImmediate(F0, 1.0);
   // Double non-signaling NaN is 0x7FF8000000000000.
   __ LoadImmediate(T0, 0x7FF80000);
   __ mtc1(ZR, F2);  // Load upper bits of NaN.
   __ mtc1(T0, F3);  // Load lower bits of NaN.
-  __ addd(D2, D0, D1);
+  __ addd(F4, F0, F2);
   __ mfc1(V0, F4);
   __ mfc1(V1, F5);
   __ Ret();
@@ -1263,11 +1263,11 @@
 
 
 ASSEMBLER_TEST_GENERATE(Addd_Inf, assembler) {
-  __ LoadImmediate(D0, 1.0);
+  __ LoadImmediate(F0, 1.0f);
   __ LoadImmediate(T0, 0x7FF00000);  // +inf
   __ mtc1(ZR, F2);
   __ mtc1(T0, F3);
-  __ addd(D2, D0, D1);
+  __ addd(F4, F0, F2);
   __ mfc1(V0, F4);
   __ mfc1(V1, F5);
   __ Ret();
@@ -1283,9 +1283,9 @@
 
 
 ASSEMBLER_TEST_GENERATE(Subd, assembler) {
-  __ LoadImmediate(D0, 2.5);
-  __ LoadImmediate(D1, 1.5);
-  __ subd(D2, D0, D1);
+  __ LoadImmediate(F0, 2.5);
+  __ LoadImmediate(F2, 1.5);
+  __ subd(F4, F0, F2);
   __ mfc1(V0, F4);
   __ mfc1(V1, F5);
   __ Ret();
@@ -1301,9 +1301,9 @@
 
 
 ASSEMBLER_TEST_GENERATE(Muld, assembler) {
-  __ LoadImmediate(D0, 6.0);
-  __ LoadImmediate(D1, 7.0);
-  __ muld(D2, D0, D1);
+  __ LoadImmediate(F0, 6.0);
+  __ LoadImmediate(F2, 7.0);
+  __ muld(F4, F0, F2);
   __ mfc1(V0, F4);
   __ mfc1(V1, F5);
   __ Ret();
@@ -1319,9 +1319,9 @@
 
 
 ASSEMBLER_TEST_GENERATE(Divd, assembler) {
-  __ LoadImmediate(D0, 42.0);
-  __ LoadImmediate(D1, 7.0);
-  __ divd(D2, D0, D1);
+  __ LoadImmediate(F0, 42.0);
+  __ LoadImmediate(F2, 7.0);
+  __ divd(F4, F0, F2);
   __ mfc1(V0, F4);
   __ mfc1(V1, F5);
   __ Ret();
@@ -1337,8 +1337,8 @@
 
 
 ASSEMBLER_TEST_GENERATE(Sqrtd, assembler) {
-  __ LoadImmediate(D0, 36.0);
-  __ sqrtd(D2, D0);
+  __ LoadImmediate(F0, 36.0);
+  __ sqrtd(F4, F0);
   __ mfc1(V0, F4);
   __ mfc1(V1, F5);
   __ Ret();
@@ -1356,12 +1356,12 @@
 ASSEMBLER_TEST_GENERATE(Cop1CUN, assembler) {
   Label is_true;
 
-  __ LoadImmediate(D0, 42.0);
+  __ LoadImmediate(F0, 42.0);
   __ LoadImmediate(T0, 0x7FF80000);
   __ mtc1(ZR, F2);
   __ mtc1(T0, F3);
   __ LoadImmediate(V0, 42);
-  __ cund(D0, D1);
+  __ cund(F0, F2);
   __ bc1t(&is_true);
   __ mov(V0, ZR);
   __ Bind(&is_true);
@@ -1378,10 +1378,10 @@
 ASSEMBLER_TEST_GENERATE(Cop1CUN_not_taken, assembler) {
   Label is_true;
 
-  __ LoadImmediate(D0, 42.0);
-  __ LoadImmediate(D1, 42.0);
+  __ LoadImmediate(F0, 42.0);
+  __ LoadImmediate(F2, 42.0);
   __ LoadImmediate(V0, 42);
-  __ cund(D0, D1);
+  __ cund(F0, F2);
   __ bc1t(&is_true);
   __ mov(V0, ZR);
   __ Bind(&is_true);
@@ -1398,10 +1398,10 @@
 ASSEMBLER_TEST_GENERATE(Cop1CEq, assembler) {
   Label is_true;
 
-  __ LoadImmediate(D0, 42.5);
-  __ LoadImmediate(D1, 42.5);
+  __ LoadImmediate(F0, 42.5);
+  __ LoadImmediate(F2, 42.5);
   __ LoadImmediate(V0, 42);
-  __ ceqd(D0, D1);
+  __ ceqd(F0, F2);
   __ bc1t(&is_true);
   __ mov(V0, ZR);
   __ Bind(&is_true);
@@ -1418,10 +1418,10 @@
 ASSEMBLER_TEST_GENERATE(Cop1CEq_not_taken, assembler) {
   Label is_true;
 
-  __ LoadImmediate(D0, 42.0);
-  __ LoadImmediate(D1, 42.5);
+  __ LoadImmediate(F0, 42.0);
+  __ LoadImmediate(F2, 42.5);
   __ LoadImmediate(V0, 42);
-  __ ceqd(D0, D1);
+  __ ceqd(F0, F2);
   __ bc1t(&is_true);
   __ mov(V0, ZR);
   __ Bind(&is_true);
@@ -1438,10 +1438,10 @@
 ASSEMBLER_TEST_GENERATE(Cop1CEq_false, assembler) {
   Label is_true;
 
-  __ LoadImmediate(D0, 42.0);
-  __ LoadImmediate(D1, 42.5);
+  __ LoadImmediate(F0, 42.0);
+  __ LoadImmediate(F2, 42.5);
   __ LoadImmediate(V0, 42);
-  __ ceqd(D0, D1);
+  __ ceqd(F0, F2);
   __ bc1f(&is_true);
   __ mov(V0, ZR);
   __ Bind(&is_true);
@@ -1458,10 +1458,10 @@
 ASSEMBLER_TEST_GENERATE(Cop1CEq_false_not_taken, assembler) {
   Label is_true;
 
-  __ LoadImmediate(D0, 42.5);
-  __ LoadImmediate(D1, 42.5);
+  __ LoadImmediate(F0, 42.5);
+  __ LoadImmediate(F2, 42.5);
   __ LoadImmediate(V0, 42);
-  __ ceqd(D0, D1);
+  __ ceqd(F0, F2);
   __ bc1f(&is_true);
   __ mov(V0, ZR);
   __ Bind(&is_true);
@@ -1478,10 +1478,10 @@
 ASSEMBLER_TEST_GENERATE(Cop1COLT, assembler) {
   Label is_true;
 
-  __ LoadImmediate(D0, 42.0);
-  __ LoadImmediate(D1, 42.5);
+  __ LoadImmediate(F0, 42.0);
+  __ LoadImmediate(F2, 42.5);
   __ LoadImmediate(V0, 42);
-  __ coltd(D0, D1);
+  __ coltd(F0, F2);
   __ bc1t(&is_true);
   __ mov(V0, ZR);
   __ Bind(&is_true);
@@ -1498,10 +1498,10 @@
 ASSEMBLER_TEST_GENERATE(Cop1COLT_not_taken, assembler) {
   Label is_true;
 
-  __ LoadImmediate(D0, 42.5);
-  __ LoadImmediate(D1, 42.0);
+  __ LoadImmediate(F0, 42.5);
+  __ LoadImmediate(F2, 42.0);
   __ LoadImmediate(V0, 42);
-  __ coltd(D0, D1);
+  __ coltd(F0, F2);
   __ bc1t(&is_true);
   __ mov(V0, ZR);
   __ Bind(&is_true);
@@ -1518,10 +1518,10 @@
 ASSEMBLER_TEST_GENERATE(Cop1COLE, assembler) {
   Label is_true;
 
-  __ LoadImmediate(D0, 42.0);
-  __ LoadImmediate(D1, 42.0);
+  __ LoadImmediate(F0, 42.0);
+  __ LoadImmediate(F2, 42.0);
   __ LoadImmediate(V0, 42);
-  __ coled(D0, D1);
+  __ coled(F0, F2);
   __ bc1t(&is_true);
   __ mov(V0, ZR);
   __ Bind(&is_true);
@@ -1538,10 +1538,10 @@
 ASSEMBLER_TEST_GENERATE(Cop1COLE_not_taken, assembler) {
   Label is_true;
 
-  __ LoadImmediate(D0, 42.5);
-  __ LoadImmediate(D1, 42.0);
+  __ LoadImmediate(F0, 42.5);
+  __ LoadImmediate(F2, 42.0);
   __ LoadImmediate(V0, 42);
-  __ coled(D0, D1);
+  __ coled(F0, F2);
   __ bc1t(&is_true);
   __ mov(V0, ZR);
   __ Bind(&is_true);
@@ -1558,7 +1558,7 @@
 ASSEMBLER_TEST_GENERATE(Cop1CvtDW, assembler) {
   __ LoadImmediate(T0, 42);
   __ mtc1(T0, F0);
-  __ cvtdw(D1, F0);
+  __ cvtdw(F2, F0);
   __ mfc1(V0, F2);
   __ mfc1(V1, F3);
   __ Ret();
@@ -1576,7 +1576,7 @@
 ASSEMBLER_TEST_GENERATE(Cop1CvtDW_neg, assembler) {
   __ LoadImmediate(T0, -42);
   __ mtc1(T0, F0);
-  __ cvtdw(D1, F0);
+  __ cvtdw(F2, F0);
   __ mfc1(V0, F2);
   __ mfc1(V1, F3);
   __ Ret();
@@ -1595,7 +1595,7 @@
   __ LoadImmediate(T0, 0x1);
   __ mtc1(ZR, F0);
   __ mtc1(T0, F1);  // D0 <- 0x100000000 = 4294967296
-  __ cvtdl(D1, D0);
+  __ cvtdl(F2, F0);
   __ mfc1(V0, F2);
   __ mfc1(V1, F3);
   __ Ret();
@@ -1614,7 +1614,7 @@
   __ LoadImmediate(T0, 0xffffffff);
   __ mtc1(T0, F0);
   __ mtc1(T0, F1);  // D0 <- 0xffffffffffffffff = -1
-  __ cvtdl(D1, D0);
+  __ cvtdl(F2, F0);
   __ mfc1(V0, F2);
   __ mfc1(V1, F3);
   __ Ret();
@@ -1630,8 +1630,8 @@
 
 
 ASSEMBLER_TEST_GENERATE(Cop1CvtWD, assembler) {
-  __ LoadImmediate(D0, 42.0);
-  __ cvtwd(F2, D0);
+  __ LoadImmediate(F0, 42.0);
+  __ cvtwd(F2, F0);
   __ mfc1(V0, F2);
   __ Ret();
 }
@@ -1645,8 +1645,8 @@
 
 
 ASSEMBLER_TEST_GENERATE(Cop1CvtWD_neg, assembler) {
-  __ LoadImmediate(D0, -42.0);
-  __ cvtwd(F2, D0);
+  __ LoadImmediate(F0, -42.0);
+  __ cvtwd(F2, F0);
   __ mfc1(V0, F2);
   __ Ret();
 }
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index 86ca5af..ffc41a1 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -38,8 +38,16 @@
     "Trace IC miss in optimized code");
 DEFINE_FLAG(bool, trace_patching, false, "Trace patching of code.");
 DEFINE_FLAG(bool, trace_runtime_calls, false, "Trace runtime calls");
+#if defined(TARGET_ARCH_IA32) ||                                               \
+    defined(TARGET_ARCH_X64) ||                                                \
+    defined(TARGET_ARCH_ARM)
 DEFINE_FLAG(int, optimization_counter_threshold, 3000,
     "Function's usage-counter value before it is optimized, -1 means never");
+#else
+// TODO(regis): Enable optimization on MIPS.
+DEFINE_FLAG(int, optimization_counter_threshold, -1,
+    "Function's usage-counter value before it is optimized, -1 means never");
+#endif
 DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(bool, trace_type_checks);
 DECLARE_FLAG(bool, report_usage_count);
@@ -1540,7 +1548,7 @@
   ASSERT(!deopt_info.IsNull());
 
   CopyFrame(optimized_code, *caller_frame);
-  if (FLAG_trace_deoptimization || FLAG_trace_deoptimization_verbose) {
+  if (FLAG_trace_deoptimization) {
     Function& function = Function::Handle(optimized_code.function());
     OS::PrintErr(
         "Deoptimizing (reason %"Pd" '%s') at pc %#"Px" '%s' (count %d)\n",
@@ -1706,7 +1714,7 @@
 
   // Since this is the only step where GC can occur during deoptimization,
   // use it to report the source line where deoptimization occured.
-  if (FLAG_trace_deoptimization || FLAG_trace_deoptimization_verbose) {
+  if (FLAG_trace_deoptimization) {
     DartFrameIterator iterator;
     StackFrame* top_frame = iterator.NextFrame();
     ASSERT(top_frame != NULL);
diff --git a/runtime/vm/constants_mips.h b/runtime/vm/constants_mips.h
index 64a92c3..32f608b 100644
--- a/runtime/vm/constants_mips.h
+++ b/runtime/vm/constants_mips.h
@@ -129,38 +129,12 @@
   kNoFRegister = -1,
 };
 
-// The double precision floating point registers are concatenated pairs of the
-// single precision registers, e.g. D0 is F1:F0, D1 is F3:F2, etc.. We only
-// tell the architecture generic code about the double precision registers, then
-// convert to the single precision registers when needed in the mips-specific
-// code.
-enum DRegister {
-  D0  =  0,
-  D1  =  1,
-  D2  =  2,
-  D3  =  3,
-  D4  =  4,
-  D5  =  5,
-  D6  =  6,
-  D7  =  7,
-  D8  =  8,
-  D9  =  9,
-  D10 = 10,
-  D11 = 11,
-  D12 = 12,
-  D13 = 13,
-  D14 = 14,
-  D15 = 15,
-  D16 = 16,
-  kNumberOfDRegisters = 16,
-  kNoDRegister = -1,
-};
 
 // Architecture independent aliases.
-typedef DRegister FpuRegister;
-const FpuRegister FpuTMP = D0;
-const int kNumberOfFpuRegisters = kNumberOfDRegisters;
-const FpuRegister kNoFpuRegister = kNoDRegister;
+typedef FRegister FpuRegister;
+const FpuRegister FpuTMP = F0;
+const int kNumberOfFpuRegisters = kNumberOfFRegisters;
+const FpuRegister kNoFpuRegister = kNoFRegister;
 
 
 // Register aliases.
diff --git a/runtime/vm/deopt_instructions.cc b/runtime/vm/deopt_instructions.cc
index 8b37613..9c9dd24 100644
--- a/runtime/vm/deopt_instructions.cc
+++ b/runtime/vm/deopt_instructions.cc
@@ -73,8 +73,7 @@
 // Deoptimization instruction moving value from optimized frame at
 // 'from_index' to specified slots in the unoptimized frame.
 // 'from_index' represents the slot index of the frame (0 being first argument)
-// and accounts for saved return address, frame pointer, pool pointer and pc
-// marker.
+// and accounts for saved return address, frame pointer and pc marker.
 class DeoptStackSlotInstr : public DeoptInstr {
  public:
   explicit DeoptStackSlotInstr(intptr_t from_index)
@@ -516,7 +515,7 @@
     // Increment the deoptimization counter. This effectively increments each
     // function occurring in the optimized frame.
     function.set_deoptimization_counter(function.deoptimization_counter() + 1);
-    if (FLAG_trace_deoptimization || FLAG_trace_deoptimization_verbose) {
+    if (FLAG_trace_deoptimization) {
       OS::PrintErr("Deoptimizing %s (count %d)\n",
           function.ToFullyQualifiedCString(),
           function.deoptimization_counter());
@@ -864,7 +863,7 @@
 intptr_t DeoptInfoBuilder::CalculateStackIndex(const Location& from_loc) const {
   return from_loc.stack_index() < 0 ?
             from_loc.stack_index() + num_args_ :
-            from_loc.stack_index() + num_args_ + kDartFrameFixedSize;
+            from_loc.stack_index() + num_args_ - kFirstLocalSlotFromFp + 1;
 }
 
 
diff --git a/runtime/vm/disassembler_mips.cc b/runtime/vm/disassembler_mips.cc
index f6d7051..8c672b3 100644
--- a/runtime/vm/disassembler_mips.cc
+++ b/runtime/vm/disassembler_mips.cc
@@ -685,14 +685,6 @@
       Format(instr, "sb 'rt, 'imms('rs)");
       break;
     }
-    case SLTI: {
-      Format(instr, "slti 'rt, 'rs, 'imms");
-      break;
-    }
-    case SLTIU: {
-      Format(instr, "sltu 'rt, 'rs, 'immu");
-      break;
-    }
     case SH: {
       Format(instr, "sh 'rt, 'imms('rs)");
       break;
diff --git a/runtime/vm/flow_graph_compiler.h b/runtime/vm/flow_graph_compiler.h
index 6dbcaa4..a5672d4 100644
--- a/runtime/vm/flow_graph_compiler.h
+++ b/runtime/vm/flow_graph_compiler.h
@@ -442,6 +442,10 @@
 
   bool may_reoptimize() const { return may_reoptimize_; }
 
+  static Condition FlipCondition(Condition condition);
+
+  static bool EvaluateCondition(Condition condition, intptr_t l, intptr_t r);
+
   // Array/list element address computations.
   static intptr_t DataOffsetFor(intptr_t cid);
   static intptr_t ElementSizeFor(intptr_t cid);
diff --git a/runtime/vm/flow_graph_compiler_arm.cc b/runtime/vm/flow_graph_compiler_arm.cc
index 6bd4049..686c7e0 100644
--- a/runtime/vm/flow_graph_compiler_arm.cc
+++ b/runtime/vm/flow_graph_compiler_arm.cc
@@ -1290,65 +1290,7 @@
     intptr_t deopt_id,
     intptr_t token_pos,
     LocationSummary* locs) {
-  MegamorphicCacheTable* table = Isolate::Current()->megamorphic_cache_table();
-  const String& name = String::Handle(ic_data.target_name());
-  const MegamorphicCache& cache =
-      MegamorphicCache::ZoneHandle(table->Lookup(name, arguments_descriptor));
-  Label not_smi, load_cache;
-  __ LoadFromOffset(kLoadWord, R0, SP, (argument_count - 1) * kWordSize);
-  __ tst(R0, ShifterOperand(kSmiTagMask));
-  __ b(&not_smi, NE);
-  __ mov(R0, ShifterOperand(Smi::RawValue(kSmiCid)));
-  __ b(&load_cache);
-
-  __ Bind(&not_smi);
-  __ LoadClassId(R0, R0);
-  __ SmiTag(R0);
-
-  // R0: class ID of the receiver (smi).
-  __ Bind(&load_cache);
-  __ LoadObject(R1, cache);
-  __ ldr(R2, FieldAddress(R1, MegamorphicCache::buckets_offset()));
-  __ ldr(R1, FieldAddress(R1, MegamorphicCache::mask_offset()));
-  // R2: cache buckets array.
-  // R1: mask.
-  __ mov(R3, ShifterOperand(R0));
-
-  Label loop, update, call_target_function;
-  __ b(&loop);
-
-  __ Bind(&update);
-  __ add(R3, R3, ShifterOperand(Smi::RawValue(1)));
-  __ Bind(&loop);
-  __ and_(R3, R3, ShifterOperand(R1));
-  const intptr_t base = Array::data_offset();
-  // R3 is smi tagged, but table entries are two words, so LSL 2.
-  __ add(IP, R2, ShifterOperand(R3, LSL, 2));
-  __ ldr(R4, FieldAddress(IP, base));
-
-  ASSERT(kIllegalCid == 0);
-  __ tst(R4, ShifterOperand(R4));
-  __ b(&call_target_function, EQ);
-  __ cmp(R4, ShifterOperand(R0));
-  __ b(&update, NE);
-
-  __ Bind(&call_target_function);
-  // Call the target found in the cache.  For a class id match, this is a
-  // proper target for the given name and arguments descriptor.  If the
-  // illegal class id was found, the target is a cache miss handler that can
-  // be invoked as a normal Dart function.
-  __ add(IP, R2, ShifterOperand(R3, LSL, 2));
-  __ ldr(R0, FieldAddress(IP, base + kWordSize));
-  __ ldr(R0, FieldAddress(R0, Function::code_offset()));
-  __ ldr(R0, FieldAddress(R0, Code::instructions_offset()));
-  __ LoadObject(R5, ic_data);
-  __ LoadObject(R4, arguments_descriptor);
-  __ AddImmediate(R0, Instructions::HeaderSize() - kHeapObjectTag);
-  __ blx(R0);
-  AddCurrentDescriptor(PcDescriptors::kOther, Isolate::kNoDeoptId, token_pos);
-  RecordSafepoint(locs);
-  AddDeoptIndexAtCall(Isolate::ToDeoptAfter(deopt_id), token_pos);
-  __ Drop(argument_count);
+  UNIMPLEMENTED();
 }
 
 
@@ -1514,6 +1456,20 @@
 }
 
 
+Condition FlowGraphCompiler::FlipCondition(Condition condition) {
+  UNIMPLEMENTED();
+  return condition;
+}
+
+
+bool FlowGraphCompiler::EvaluateCondition(Condition condition,
+                                          intptr_t left,
+                                          intptr_t right) {
+  UNIMPLEMENTED();
+  return false;
+}
+
+
 FieldAddress FlowGraphCompiler::ElementAddressForIntIndex(intptr_t cid,
                                                           intptr_t index_scale,
                                                           Register array,
diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
index 71bb3fa..593b42d 100644
--- a/runtime/vm/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/flow_graph_compiler_ia32.cc
@@ -1653,6 +1653,48 @@
 }
 
 
+Condition FlowGraphCompiler::FlipCondition(Condition condition) {
+  switch (condition) {
+    case EQUAL:         return EQUAL;
+    case NOT_EQUAL:     return NOT_EQUAL;
+    case LESS:          return GREATER;
+    case LESS_EQUAL:    return GREATER_EQUAL;
+    case GREATER:       return LESS;
+    case GREATER_EQUAL: return LESS_EQUAL;
+    case BELOW:         return ABOVE;
+    case BELOW_EQUAL:   return ABOVE_EQUAL;
+    case ABOVE:         return BELOW;
+    case ABOVE_EQUAL:   return BELOW_EQUAL;
+    default:
+      UNIMPLEMENTED();
+      return EQUAL;
+  }
+}
+
+
+bool FlowGraphCompiler::EvaluateCondition(Condition condition,
+                                          intptr_t left,
+                                          intptr_t right) {
+  const uintptr_t unsigned_left = static_cast<uintptr_t>(left);
+  const uintptr_t unsigned_right = static_cast<uintptr_t>(right);
+  switch (condition) {
+    case EQUAL:         return left == right;
+    case NOT_EQUAL:     return left != right;
+    case LESS:          return left < right;
+    case LESS_EQUAL:    return left <= right;
+    case GREATER:       return left > right;
+    case GREATER_EQUAL: return left >= right;
+    case BELOW:         return unsigned_left < unsigned_right;
+    case BELOW_EQUAL:   return unsigned_left <= unsigned_right;
+    case ABOVE:         return unsigned_left > unsigned_right;
+    case ABOVE_EQUAL:   return unsigned_left >= unsigned_right;
+    default:
+      UNIMPLEMENTED();
+      return false;
+  }
+}
+
+
 FieldAddress FlowGraphCompiler::ElementAddressForIntIndex(intptr_t cid,
                                                           intptr_t index_scale,
                                                           Register array,
diff --git a/runtime/vm/flow_graph_compiler_mips.cc b/runtime/vm/flow_graph_compiler_mips.cc
index 652ff03..efcd64c 100644
--- a/runtime/vm/flow_graph_compiler_mips.cc
+++ b/runtime/vm/flow_graph_compiler_mips.cc
@@ -45,96 +45,8 @@
 
 RawDeoptInfo* CompilerDeoptInfo::CreateDeoptInfo(FlowGraphCompiler* compiler,
                                                  DeoptInfoBuilder* builder) {
-  if (deopt_env_ == NULL) return DeoptInfo::null();
-
-  intptr_t stack_height = compiler->StackSize();
-  AllocateIncomingParametersRecursive(deopt_env_, &stack_height);
-
-  intptr_t slot_ix = 0;
-  Environment* current = deopt_env_;
-
-  // Emit all kMaterializeObject instructions describing objects to be
-  // materialized on the deoptimization as a prefix to the deoptimization info.
-  EmitMaterializations(deopt_env_, builder);
-
-  // The real frame starts here.
-  builder->MarkFrameStart();
-
-  // Current PP, FP, and PC.
-  builder->AddPp(current->function(), slot_ix++);
-  builder->AddCallerFp(slot_ix++);
-  builder->AddReturnAddress(current->function(), deopt_id(), slot_ix++);
-
-  // Callee's PC marker is not used anymore. Pass Function::null() to set to 0.
-  builder->AddPcMarker(Function::Handle(), slot_ix++);
-
-  // Emit all values that are needed for materialization as a part of the
-  // expression stack for the bottom-most frame. This guarantees that GC
-  // will be able to find them during materialization.
-  slot_ix = builder->EmitMaterializationArguments(slot_ix);
-
-  // For the innermost environment, set outgoing arguments and the locals.
-  for (intptr_t i = current->Length() - 1;
-       i >= current->fixed_parameter_count();
-       i--) {
-    builder->AddCopy(current->ValueAt(i), current->LocationAt(i), slot_ix++);
-  }
-
-  Environment* previous = current;
-  current = current->outer();
-  while (current != NULL) {
-    // PP, FP, and PC.
-    builder->AddPp(current->function(), slot_ix++);
-    builder->AddCallerFp(slot_ix++);
-
-    // For any outer environment the deopt id is that of the call instruction
-    // which is recorded in the outer environment.
-    builder->AddReturnAddress(current->function(),
-                              Isolate::ToDeoptAfter(current->deopt_id()),
-                              slot_ix++);
-
-    // PC marker.
-    builder->AddPcMarker(previous->function(), slot_ix++);
-
-    // The values of outgoing arguments can be changed from the inlined call so
-    // we must read them from the previous environment.
-    for (intptr_t i = previous->fixed_parameter_count() - 1; i >= 0; i--) {
-      builder->AddCopy(previous->ValueAt(i),
-                       previous->LocationAt(i),
-                       slot_ix++);
-    }
-
-    // Set the locals, note that outgoing arguments are not in the environment.
-    for (intptr_t i = current->Length() - 1;
-         i >= current->fixed_parameter_count();
-         i--) {
-      builder->AddCopy(current->ValueAt(i),
-                       current->LocationAt(i),
-                       slot_ix++);
-    }
-
-    // Iterate on the outer environment.
-    previous = current;
-    current = current->outer();
-  }
-  // The previous pointer is now the outermost environment.
-  ASSERT(previous != NULL);
-
-  // For the outermost environment, set caller PC, caller PP, and caller FP.
-  builder->AddCallerPp(slot_ix++);
-  builder->AddCallerFp(slot_ix++);
-  builder->AddCallerPc(slot_ix++);
-
-  // PC marker.
-  builder->AddPcMarker(previous->function(), slot_ix++);
-
-  // For the outermost environment, set the incoming arguments.
-  for (intptr_t i = previous->fixed_parameter_count() - 1; i >= 0; i--) {
-    builder->AddCopy(previous->ValueAt(i), previous->LocationAt(i), slot_ix++);
-  }
-
-  const DeoptInfo& deopt_info = DeoptInfo::Handle(builder->CreateDeoptInfo());
-  return deopt_info.raw();
+  UNIMPLEMENTED();  // TODO(regis): Copy ARM version.
+  return NULL;
 }
 
 
@@ -166,7 +78,8 @@
                                            Label* is_false) {
   __ TraceSimMsg("BoolToJump");
   Label fall_through;
-  __ beq(bool_register, NULLREG, &fall_through);
+  __ BranchEqual(bool_register, reinterpret_cast<intptr_t>(Object::null()),
+                 &fall_through);
   __ BranchEqual(bool_register, Bool::True(), is_true);
   __ b(is_false);
   __ Bind(&fall_through);
@@ -188,14 +101,19 @@
   const SubtypeTestCache& type_test_cache =
       SubtypeTestCache::ZoneHandle(SubtypeTestCache::New());
   __ LoadObject(A2, type_test_cache);
+  intptr_t null = reinterpret_cast<intptr_t>(Object::null());
+  uint16_t null_lo = Utils::Low16Bits(null);
+  uint16_t null_hi = Utils::High16Bits(null);
   if (test_kind == kTestTypeOneArg) {
     ASSERT(type_arguments_reg == kNoRegister);
+    __ lui(A1, Immediate(null_hi));
     __ BranchLink(&StubCode::Subtype1TestCacheLabel());
-    __ delay_slot()->mov(A1, NULLREG);
+    __ delay_slot()->ori(A1, A1, Immediate(null_lo));
   } else if (test_kind == kTestTypeTwoArgs) {
     ASSERT(type_arguments_reg == kNoRegister);
+    __ lui(A1, Immediate(null_hi));
     __ BranchLink(&StubCode::Subtype2TestCacheLabel());
-    __ delay_slot()->mov(A1, NULLREG);
+    __ delay_slot()->ori(A1, A1, Immediate(null_lo));
   } else if (test_kind == kTestTypeThreeArgs) {
     ASSERT(type_arguments_reg == A1);
     __ BranchLink(&StubCode::Subtype3TestCacheLabel());
@@ -329,7 +247,8 @@
     // Check if instance is a closure.
     __ LoadClassById(T1, kClassIdReg);
     __ lw(T1, FieldAddress(T1, Class::signature_function_offset()));
-    __ bne(T1, NULLREG, is_instance_lbl);
+    __ BranchNotEqual(T1, reinterpret_cast<int32_t>(Object::null()),
+                      is_instance_lbl);
   }
   // Custom checking for numbers (Smi, Mint, Bigint and Double).
   // Note that instance is not Smi (checked above).
@@ -396,7 +315,8 @@
     __ lw(A1, Address(SP, 0));  // Get instantiator type arguments.
     // A1: instantiator type arguments.
     // Check if type argument is dynamic.
-    __ beq(A1, NULLREG, is_instance_lbl);
+    __ BranchEqual(A1, reinterpret_cast<intptr_t>(Object::null()),
+                   is_instance_lbl);
     // Can handle only type arguments that are instances of TypeArguments.
     // (runtime checks canonicalize type arguments).
     Label fall_through;
@@ -407,7 +327,8 @@
     // R2: concrete type of type.
     // Check if type argument is dynamic.
     __ BranchEqual(T2, Type::ZoneHandle(Type::DynamicType()), is_instance_lbl);
-    __ beq(T2, NULLREG, is_instance_lbl);
+    __ BranchEqual(T2, reinterpret_cast<intptr_t>(Object::null()),
+                   is_instance_lbl);
     const Type& object_type = Type::ZoneHandle(Type::ObjectType());
     __ BranchEqual(T2, object_type, is_instance_lbl);
 
@@ -566,7 +487,7 @@
 
   // A null object is always assignable and is returned as result.
   Label is_assignable, runtime_call;
-  __ beq(A0, NULLREG, &is_assignable);
+  __ BranchEqual(A0, reinterpret_cast<int32_t>(Object::null()), &is_assignable);
   __ delay_slot()->sw(A1, Address(SP, 0 * kWordSize));
 
   if (!FLAG_eliminate_type_checks) {
@@ -805,7 +726,8 @@
     delete[] opt_param_position;
     // Check that T0 now points to the null terminator in the array descriptor.
     __ lw(T3, Address(T0));
-    __ beq(T3, NULLREG, &all_arguments_processed);
+    __ BranchEqual(T3, reinterpret_cast<int32_t>(Object::null()),
+                   &all_arguments_processed);
   } else {
     ASSERT(num_opt_pos_params > 0);
     __ lw(T2,
@@ -882,6 +804,8 @@
   // implicitly final, since garbage collecting the unmodified value is not
   // an issue anymore.
 
+  __ LoadImmediate(T0, reinterpret_cast<intptr_t>(Object::null()));
+
   // S4 : arguments descriptor array.
   __ lw(T2, FieldAddress(S4, ArgumentsDescriptor::count_offset()));
   __ sll(T2, T2, 1);  // T2 is a Smi.
@@ -894,7 +818,7 @@
   __ addiu(T2, T2, Immediate(-kWordSize));
   __ addu(T3, T1, T2);
   __ bgtz(T2, &null_args_loop);
-  __ delay_slot()->sw(NULLREG, Address(T3));
+  __ delay_slot()->sw(T0, Address(T3));
   __ Bind(&null_args_loop_exit);
 }
 
@@ -917,8 +841,12 @@
   __ lw(T0, Address(SP, 1 * kWordSize));  // Receiver.
   __ lw(T1, Address(SP, 0 * kWordSize));  // Value.
   __ StoreIntoObject(T0, FieldAddress(T0, offset), T1);
+  intptr_t null = reinterpret_cast<intptr_t>(Object::null());
+  uint16_t null_lo = Utils::Low16Bits(null);
+  uint16_t null_hi = Utils::High16Bits(null);
+  __ lui(V0, Immediate(null_hi));
   __ Ret();
-  __ delay_slot()->mov(V0, NULLREG);
+  __ delay_slot()->ori(V0, V0, Immediate(null_lo));
 }
 
 
@@ -1111,9 +1039,10 @@
     __ TraceSimMsg("Initialize spill slots");
     __ Comment("Initialize spill slots");
     const intptr_t slot_base = parsed_function().first_stack_local_index();
+    __ LoadImmediate(T0, reinterpret_cast<intptr_t>(Object::null()));
     for (intptr_t i = 0; i < num_locals; ++i) {
       // Subtract index i (locals lie at lower addresses than FP).
-      __ sw(NULLREG, Address(FP, (slot_base - i) * kWordSize));
+      __ sw(T0, Address(FP, (slot_base - i) * kWordSize));
     }
   }
 
@@ -1136,7 +1065,7 @@
   AddCurrentDescriptor(PcDescriptors::kPatchCode,
                        Isolate::kNoDeoptId,
                        0);  // No token position.
-  __ BranchPatchable(&StubCode::FixCallersTargetLabel());
+  __ Branch(&StubCode::FixCallersTargetLabel());
   AddCurrentDescriptor(PcDescriptors::kLazyDeoptJump,
                        Isolate::kNoDeoptId,
                        0);  // No token position.
@@ -1300,7 +1229,7 @@
     __ addiu(SP, SP, Immediate(2 * kWordSize));  // Discard constant.
     return;
   }
-  __ CompareObject(CMPRES, TMP1, reg, obj);
+  __ CompareObject(CMPRES, reg, obj);
 }
 
 
@@ -1323,8 +1252,7 @@
     __ lw(left, Address(SP, 1 * kWordSize));
     __ addiu(SP, SP, Immediate(2 * kWordSize));
   } else {
-    __ slt(CMPRES, left, right);
-    __ slt(TMP1, right, left);
+    __ subu(CMPRES, left, right);
   }
 }
 
@@ -1414,6 +1342,20 @@
 }
 
 
+Condition FlowGraphCompiler::FlipCondition(Condition condition) {
+  UNIMPLEMENTED();
+  return condition;
+}
+
+
+bool FlowGraphCompiler::EvaluateCondition(Condition condition,
+                                          intptr_t left,
+                                          intptr_t right) {
+  UNIMPLEMENTED();
+  return false;
+}
+
+
 FieldAddress FlowGraphCompiler::ElementAddressForIntIndex(intptr_t cid,
                                                           intptr_t index_scale,
                                                           Register array,
@@ -1540,7 +1482,7 @@
            source.IsQuadStackSlot());
     bool double_width = destination.IsDoubleStackSlot() ||
                         source.IsDoubleStackSlot();
-    DRegister reg = source.IsFpuRegister() ? source.fpu_reg()
+    FRegister reg = source.IsFpuRegister() ? source.fpu_reg()
                                            : destination.fpu_reg();
     const Address& slot_address = source.IsFpuRegister()
         ? destination.ToStackSlotAddress()
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc
index be0f589..8c9e874 100644
--- a/runtime/vm/flow_graph_compiler_x64.cc
+++ b/runtime/vm/flow_graph_compiler_x64.cc
@@ -1650,6 +1650,48 @@
 }
 
 
+Condition FlowGraphCompiler::FlipCondition(Condition condition) {
+  switch (condition) {
+    case EQUAL:         return EQUAL;
+    case NOT_EQUAL:     return NOT_EQUAL;
+    case LESS:          return GREATER;
+    case LESS_EQUAL:    return GREATER_EQUAL;
+    case GREATER:       return LESS;
+    case GREATER_EQUAL: return LESS_EQUAL;
+    case BELOW:         return ABOVE;
+    case BELOW_EQUAL:   return ABOVE_EQUAL;
+    case ABOVE:         return BELOW;
+    case ABOVE_EQUAL:   return BELOW_EQUAL;
+    default:
+      UNIMPLEMENTED();
+      return EQUAL;
+  }
+}
+
+
+bool FlowGraphCompiler::EvaluateCondition(Condition condition,
+                                          intptr_t left,
+                                          intptr_t right) {
+  const uintptr_t unsigned_left = static_cast<uintptr_t>(left);
+  const uintptr_t unsigned_right = static_cast<uintptr_t>(right);
+  switch (condition) {
+    case EQUAL:         return left == right;
+    case NOT_EQUAL:     return left != right;
+    case LESS:          return left < right;
+    case LESS_EQUAL:    return left <= right;
+    case GREATER:       return left > right;
+    case GREATER_EQUAL: return left >= right;
+    case BELOW:         return unsigned_left < unsigned_right;
+    case BELOW_EQUAL:   return unsigned_left <= unsigned_right;
+    case ABOVE:         return unsigned_left > unsigned_right;
+    case ABOVE_EQUAL:   return unsigned_left >= unsigned_right;
+    default:
+      UNIMPLEMENTED();
+      return false;
+  }
+}
+
+
 FieldAddress FlowGraphCompiler::ElementAddressForIntIndex(intptr_t cid,
                                                           intptr_t index_scale,
                                                           Register array,
diff --git a/runtime/vm/instructions_mips.h b/runtime/vm/instructions_mips.h
index 5567ae6..ed16b16 100644
--- a/runtime/vm/instructions_mips.h
+++ b/runtime/vm/instructions_mips.h
@@ -25,10 +25,6 @@
   uword TargetAddress() const;
   void SetTargetAddress(uword target_address) const;
 
-  // This constant length is only valid for inserted call patterns used for
-  // lazy deoptimization. Regular call pattern may vary in length.
-  static const int kFixedLengthInBytes = 3 * Instr::kInstrSize;
-
  private:
   uword Back(int n) const;
   int DecodeLoadObject(int end, Register* reg, Object* obj);
diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc
index 71b94d3..d07ab4d 100644
--- a/runtime/vm/intermediate_language_arm.cc
+++ b/runtime/vm/intermediate_language_arm.cc
@@ -527,7 +527,6 @@
         __ LoadObject(result, Bool::False(), NegateCondition(cond));
       }
     } else {
-      __ PushList((1 << R0) | (1 << R1));
       const int kNumberOfArguments = 2;
       const Array& kNoArgumentNames = Array::Handle();
       compiler->GenerateStaticCall(deopt_id,
@@ -615,25 +614,6 @@
 }
 
 
-static Condition FlipCondition(Condition condition) {
-  switch (condition) {
-    case EQ: return EQ;
-    case NE: return NE;
-    case LT: return GT;
-    case LE: return GE;
-    case GT: return LT;
-    case GE: return LE;
-    case CC: return HI;
-    case LS: return CS;
-    case HI: return CC;
-    case CS: return LS;
-    default:
-      UNIMPLEMENTED();
-      return EQ;
-  }
-}
-
-
 static void EmitSmiComparisonOp(FlowGraphCompiler* compiler,
                                 const LocationSummary& locs,
                                 Token::Kind kind,
@@ -646,7 +626,7 @@
 
   if (left.IsConstant()) {
     __ CompareObject(right.reg(), left.constant());
-    true_condition = FlipCondition(true_condition);
+    true_condition = FlowGraphCompiler::FlipCondition(true_condition);
   } else if (right.IsConstant()) {
     __ CompareObject(left.reg(), right.constant());
   } else {
@@ -2550,8 +2530,7 @@
   }
 
   // Load receiver into R0.
-  __ LoadFromOffset(kLoadWord, R0, SP,
-                    (instance_call()->ArgumentCount() - 1) * kWordSize);
+  __ ldr(R0, Address(SP, (instance_call()->ArgumentCount() - 1) * kWordSize));
 
   LoadValueCid(compiler, R2, R0,
                (ic_data().GetReceiverClassIdAt(0) == kSmiCid) ? NULL : deopt);
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index eab4a67..23b6241 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -629,25 +629,6 @@
 }
 
 
-static Condition FlipCondition(Condition condition) {
-  switch (condition) {
-    case EQUAL:         return EQUAL;
-    case NOT_EQUAL:     return NOT_EQUAL;
-    case LESS:          return GREATER;
-    case LESS_EQUAL:    return GREATER_EQUAL;
-    case GREATER:       return LESS;
-    case GREATER_EQUAL: return LESS_EQUAL;
-    case BELOW:         return ABOVE;
-    case BELOW_EQUAL:   return ABOVE_EQUAL;
-    case ABOVE:         return BELOW;
-    case ABOVE_EQUAL:   return BELOW_EQUAL;
-    default:
-      UNIMPLEMENTED();
-      return EQUAL;
-  }
-}
-
-
 static void EmitSmiComparisonOp(FlowGraphCompiler* compiler,
                                 const LocationSummary& locs,
                                 Token::Kind kind,
@@ -660,7 +641,7 @@
 
   if (left.IsConstant()) {
     __ CompareObject(right.reg(), left.constant());
-    true_condition = FlipCondition(true_condition);
+    true_condition = FlowGraphCompiler::FlipCondition(true_condition);
   } else if (right.IsConstant()) {
     __ CompareObject(left.reg(), right.constant());
   } else if (right.IsStackSlot()) {
@@ -768,11 +749,11 @@
   __ cmpl(left_tmp, right_tmp);
   if (branch != NULL) {
     __ j(hi_cond, compiler->GetJumpLabel(branch->true_successor()));
-    __ j(FlipCondition(hi_cond),
+    __ j(FlowGraphCompiler::FlipCondition(hi_cond),
          compiler->GetJumpLabel(branch->false_successor()));
   } else {
     __ j(hi_cond, &is_true);
-    __ j(FlipCondition(hi_cond), &is_false);
+    __ j(FlowGraphCompiler::FlipCondition(hi_cond), &is_false);
   }
 
   // If upper is equal, compare lower half.
diff --git a/runtime/vm/intermediate_language_mips.cc b/runtime/vm/intermediate_language_mips.cc
index 704a030..5107f34 100644
--- a/runtime/vm/intermediate_language_mips.cc
+++ b/runtime/vm/intermediate_language_mips.cc
@@ -92,9 +92,9 @@
     const intptr_t fp_sp_dist =
         (kFirstLocalSlotFromFp + 1 - compiler->StackSize()) * kWordSize;
     ASSERT(fp_sp_dist <= 0);
-    __ subu(TMP1, SP, FP);
+    __ subu(T2, SP, FP);
 
-    __ BranchEqual(TMP1, fp_sp_dist, &stack_ok);
+    __ BranchEqual(T2, fp_sp_dist, &stack_ok);
     __ break_(0);
 
     __ Bind(&stack_ok);
@@ -328,10 +328,7 @@
     const intptr_t kNumTemps = 1;
     LocationSummary* locs =
         new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kCall);
-    locs->set_in(0, Location::RegisterLocation(A1));
-    locs->set_in(1, Location::RegisterLocation(A0));
-    locs->set_temp(0, Location::RegisterLocation(T0));
-    locs->set_out(Location::RegisterLocation(V0));
+    UNIMPLEMENTED();  // TODO(regis): Verify register allocation.
     return locs;
   }
   const intptr_t kNumTemps = 1;
@@ -366,8 +363,9 @@
   const int kNumArgumentsChecked = 2;
 
   Label check_identity;
-  __ beq(A1, NULLREG, &check_identity);
-  __ beq(A0, NULLREG, &check_identity);
+  __ LoadImmediate(TMP1, reinterpret_cast<intptr_t>(Object::null()));
+  __ beq(A1, TMP1, &check_identity);
+  __ beq(A0, TMP1, &check_identity);
 
   ICData& equality_ic_data = ICData::ZoneHandle();
   if (compiler->is_optimizing() && FLAG_propagate_ic_data) {
@@ -498,29 +496,6 @@
 }
 
 
-// Branches on condition c assuming comparison results in CMPRES and TMP1.
-static void EmitBranchAfterCompare(
-    FlowGraphCompiler* compiler, Condition c, Label* is_true) {
-    switch (c) {
-      case EQ: __ beq(CMPRES, TMP1, is_true); break;
-      case NE: __ bne(CMPRES, TMP1, is_true); break;
-      case GT: __ bne(TMP1, ZR, is_true); break;
-      case GE: __ beq(CMPRES, ZR, is_true); break;
-      case LT: __ bne(CMPRES, ZR, is_true); break;
-      case LE: __ beq(TMP1, ZR, is_true); break;
-      default:
-        UNREACHABLE();
-        break;
-    }
-}
-
-
-static Condition FlipCondition(Condition condition) {
-  UNIMPLEMENTED();
-  return condition;
-}
-
-
 static void EmitSmiComparisonOp(FlowGraphCompiler* compiler,
                                 const LocationSummary& locs,
                                 Token::Kind kind,
@@ -533,13 +508,12 @@
   Condition true_condition = TokenKindToSmiCondition(kind);
 
   if (left.IsConstant()) {
-    __ CompareObject(CMPRES, TMP1, right.reg(), left.constant());
-    true_condition = FlipCondition(true_condition);
+    __ CompareObject(CMPRES, right.reg(), left.constant());
+    true_condition = FlowGraphCompiler::FlipCondition(true_condition);
   } else if (right.IsConstant()) {
-    __ CompareObject(CMPRES, TMP1, left.reg(), right.constant());
+    __ CompareObject(CMPRES, left.reg(), right.constant());
   } else {
-    __ slt(CMPRES, left.reg(), right.reg());
-    __ slt(TMP1, right.reg(), left.reg());
+    __ subu(CMPRES, left.reg(), right.reg());
   }
 
   if (branch != NULL) {
@@ -547,7 +521,17 @@
   } else {
     Register result = locs.out().reg();
     Label done, is_true;
-    EmitBranchAfterCompare(compiler, true_condition, &is_true);
+    switch (true_condition) {
+      case EQ: __ beq(CMPRES, ZR, &is_true); break;
+      case NE: __ bne(CMPRES, ZR, &is_true); break;
+      case GT: __ bgtz(CMPRES, &is_true); break;
+      case GE: __ bgez(CMPRES, &is_true); break;
+      case LT: __ bltz(CMPRES, &is_true); break;
+      case LE: __ blez(CMPRES, &is_true); break;
+      default:
+        UNREACHABLE();
+        break;
+    }
     __ LoadObject(result, Bool::False());
     __ b(&done);
     __ Bind(&is_true);
@@ -665,7 +649,7 @@
     EmitAssertBoolean(V0, token_pos(), deopt_id(), locs(), compiler);
   }
   Condition branch_condition = (kind() == Token::kNE) ? NE : EQ;
-  __ CompareObject(CMPRES, TMP1, V0, Bool::True());
+  __ CompareObject(CMPRES, V0, Bool::True());
   branch->EmitBranchOnCondition(compiler, branch_condition);
 }
 
@@ -801,7 +785,7 @@
     return;
   }
   EmitNativeCode(compiler);
-  __ CompareObject(CMPRES, TMP1, V0, Bool::True());
+  __ CompareObject(CMPRES, V0, Bool::True());
   branch->EmitBranchOnCondition(compiler, EQ);
 }
 
@@ -875,25 +859,13 @@
 
 
 LocationSummary* LoadClassIdInstr::MakeLocationSummary() const {
-  const intptr_t kNumInputs = 1;
-  return LocationSummary::Make(kNumInputs,
-                               Location::RequiresRegister(),
-                               LocationSummary::kNoCall);
+  UNIMPLEMENTED();
+  return NULL;
 }
 
 
 void LoadClassIdInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  Register object = locs()->in(0).reg();
-  Register result = locs()->out().reg();
-  Label load, done;
-  __ andi(CMPRES, object, Immediate(kSmiTagMask));
-  __ bne(CMPRES, ZR, &load);
-  __ LoadImmediate(result, Smi::RawValue(kSmiCid));
-  __ b(&done);
-  __ Bind(&load);
-  __ LoadClassId(result, object);
-  __ SmiTag(result);
-  __ Bind(&done);
+  UNIMPLEMENTED();
 }
 
 
@@ -1022,9 +994,9 @@
       default:
         UNREACHABLE();
     }
-    __ addu(index.reg(), array, index.reg());
-    element_address = Address(index.reg(),
+    __ AddImmediate(index.reg(),
         FlowGraphCompiler::DataOffsetFor(class_id()) - kHeapObjectTag);
+    element_address = Address(array, index.reg());
   }
 
   if ((representation() == kUnboxedDouble) ||
@@ -1034,6 +1006,9 @@
   }
 
   Register result = locs()->out().reg();
+  if ((index_scale() == 1) && index.IsRegister()) {
+    __ SmiUntag(index.reg());
+  }
   switch (class_id()) {
     case kTypedDataInt8ArrayCid:
       ASSERT(index_scale() == 1);
@@ -1086,33 +1061,8 @@
 
 Representation StoreIndexedInstr::RequiredInputRepresentation(
     intptr_t idx) const {
-  // Array can be a Dart object or a pointer to external data.
-  if (idx == 0)  return kNoRepresentation;  // Flexible input representation.
-  if (idx == 1) return kTagged;  // Index is a smi.
-  ASSERT(idx == 2);
-  switch (class_id_) {
-    case kArrayCid:
-    case kOneByteStringCid:
-    case kTypedDataInt8ArrayCid:
-    case kTypedDataUint8ArrayCid:
-    case kExternalTypedDataUint8ArrayCid:
-    case kTypedDataUint8ClampedArrayCid:
-    case kExternalTypedDataUint8ClampedArrayCid:
-    case kTypedDataInt16ArrayCid:
-    case kTypedDataUint16ArrayCid:
-      return kTagged;
-    case kTypedDataInt32ArrayCid:
-    case kTypedDataUint32ArrayCid:
-      return value()->IsSmiValue() ? kTagged : kUnboxedMint;
-    case kTypedDataFloat32ArrayCid:
-    case kTypedDataFloat64ArrayCid:
-      return kUnboxedDouble;
-    case kTypedDataFloat32x4ArrayCid:
-      return kUnboxedFloat32x4;
-    default:
-      UNIMPLEMENTED();
-      return kTagged;
-  }
+  UNIMPLEMENTED();
+  return kTagged;
 }
 
 
@@ -1138,22 +1088,14 @@
     case kTypedDataUint8ArrayCid:
     case kTypedDataUint8ClampedArrayCid:
     case kOneByteStringCid:
-      locs->set_in(2, Location::RegisterOrSmiConstant(value()));
-      break;
     case kTypedDataInt16ArrayCid:
     case kTypedDataUint16ArrayCid:
     case kTypedDataInt32ArrayCid:
     case kTypedDataUint32ArrayCid:
-      locs->set_in(2, Location::WritableRegister());
-      break;
     case kTypedDataFloat32ArrayCid:
-      // TODO(regis): Verify.
-      // Need temp register for float-to-double conversion.
-      locs->AddTemp(Location::RequiresFpuRegister());
-      // Fall through.
-    case kTypedDataFloat64ArrayCid:  // TODO(srdjan): Support Float64 constants.
+    case kTypedDataFloat64ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
-      locs->set_in(2, Location::RequiresFpuRegister());
+      UNIMPLEMENTED();
       break;
     default:
       UNREACHABLE();
@@ -1201,9 +1143,10 @@
       default:
         UNREACHABLE();
     }
-    __ addu(index.reg(), array, index.reg());
-    element_address = Address(index.reg(),
+    __ AddImmediate(index.reg(),
         FlowGraphCompiler::DataOffsetFor(class_id()) - kHeapObjectTag);
+    __ addu(TMP1, array, index.reg());
+    element_address = Address(TMP1);
   }
 
   switch (class_id()) {
@@ -1222,64 +1165,13 @@
     case kTypedDataInt8ArrayCid:
     case kTypedDataUint8ArrayCid:
     case kExternalTypedDataUint8ArrayCid:
-    case kOneByteStringCid: {
-      if (locs()->in(2).IsConstant()) {
-        const Smi& constant = Smi::Cast(locs()->in(2).constant());
-        __ LoadImmediate(TMP, static_cast<int8_t>(constant.Value()));
-        __ sb(TMP, element_address);
-      } else {
-        Register value = locs()->in(2).reg();
-        __ SmiUntag(value);
-        __ sb(value, element_address);
-      }
-      break;
-    }
     case kTypedDataUint8ClampedArrayCid:
-    case kExternalTypedDataUint8ClampedArrayCid: {
-      if (locs()->in(2).IsConstant()) {
-        const Smi& constant = Smi::Cast(locs()->in(2).constant());
-        intptr_t value = constant.Value();
-        // Clamp to 0x0 or 0xFF respectively.
-        if (value > 0xFF) {
-          value = 0xFF;
-        } else if (value < 0) {
-          value = 0;
-        }
-        __ LoadImmediate(TMP, static_cast<int8_t>(value));
-        __ sb(TMP, element_address);
-      } else {
-        Register value = locs()->in(2).reg();
-        Label store_value, bigger, smaller;
-        __ SmiUntag(value);
-        __ BranchUnsignedLess(value, 0xFF + 1, &store_value);
-        __ LoadImmediate(TMP, 0xFF);
-        __ slti(CMPRES, value, Immediate(1));
-        __ movn(TMP, ZR, CMPRES);
-        __ mov(value, TMP);
-        __ Bind(&store_value);
-        __ sb(value, element_address);
-      }
-      break;
-    }
+    case kExternalTypedDataUint8ClampedArrayCid:
+    case kOneByteStringCid:
     case kTypedDataInt16ArrayCid:
-    case kTypedDataUint16ArrayCid: {
-      Register value = locs()->in(2).reg();
-      __ SmiUntag(value);
-      __ sh(value, element_address);
-      break;
-    }
+    case kTypedDataUint16ArrayCid:
     case kTypedDataInt32ArrayCid:
-    case kTypedDataUint32ArrayCid: {
-      if (value()->IsSmiValue()) {
-        ASSERT(RequiredInputRepresentation(2) == kTagged);
-        Register value = locs()->in(2).reg();
-        __ SmiUntag(value);
-        __ sw(value, element_address);
-      } else {
-        UNIMPLEMENTED();
-      }
-      break;
-    }
+    case kTypedDataUint32ArrayCid:
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
@@ -1407,7 +1299,8 @@
 
       if (field().is_nullable() && (field_cid != kNullCid)) {
         __ beq(CMPRES, ZR, &ok);
-        __ subu(CMPRES, value_reg, NULLREG);
+        __ LoadImmediate(TMP1, reinterpret_cast<intptr_t>(Object::null()));
+        __ subu(CMPRES, value_reg, TMP1);
       }
 
       if (ok_is_fall_through) {
@@ -1614,7 +1507,9 @@
     Label type_arguments_instantiated;
     const intptr_t len = type_arguments().Length();
     if (type_arguments().IsRawInstantiatedRaw(len)) {
-      __ beq(instantiator_reg, NULLREG, &type_arguments_instantiated);
+      __ BranchEqual(instantiator_reg,
+                     reinterpret_cast<intptr_t>(Object::null()),
+                     &type_arguments_instantiated);
     }
     // Instantiate non-null type arguments.
     // A runtime call to instantiate the type arguments is required.
@@ -1669,7 +1564,9 @@
   // the type arguments.
   Label type_arguments_instantiated;
   ASSERT(type_arguments().IsRawInstantiatedRaw(type_arguments().Length()));
-  __ beq(instantiator_reg, NULLREG, &type_arguments_instantiated);
+  __ BranchEqual(instantiator_reg,
+                 reinterpret_cast<intptr_t>(Object::null()),
+                 &type_arguments_instantiated);
   // Instantiate non-null type arguments.
   // In the non-factory case, we rely on the allocation stub to
   // instantiate the type arguments.
@@ -1709,7 +1606,8 @@
   // the type arguments and do not pass the instantiator.
   ASSERT(type_arguments().IsRawInstantiatedRaw(type_arguments().Length()));
   Label instantiator_not_null;
-  __ bne(instantiator_reg, NULLREG, &instantiator_not_null);
+  __ BranchNotEqual(instantiator_reg,
+      reinterpret_cast<intptr_t>(Object::null()), &instantiator_not_null);
   // Null was used in VisitExtractConstructorTypeArguments as the
   // instantiated type arguments, no proper instantiator needed.
   __ LoadImmediate(instantiator_reg,
@@ -1783,10 +1681,10 @@
         Address(FP, stacktrace_var().index() * kWordSize));
 
   Label next;
-  __ mov(TMP, RA);  // Save return adress.
+  __ mov(T0, RA);  // Save return adress.
   // Restore the pool pointer.
   __ bal(&next);  // Branch and link to next instruction to get PC in RA.
-  __ delay_slot()->mov(CMPRES, RA);  // Save PC of the following mov.
+  __ delay_slot()->mov(T1, RA);  // Save PC of the following mov.
 
   // Calculate offset of pool pointer from the PC.
   const intptr_t object_pool_pc_dist =
@@ -1794,8 +1692,8 @@
      compiler->assembler()->CodeSize();
 
   __ Bind(&next);
-  __ mov(RA, TMP);  // Restore return address.
-  __ lw(PP, Address(CMPRES, -object_pool_pc_dist));
+  __ mov(RA, T0);  // Restore return address.
+  __ lw(PP, Address(T1, -object_pool_pc_dist));
 }
 
 
@@ -1858,7 +1756,7 @@
     UNIMPLEMENTED();
     return NULL;
   } else {
-    const intptr_t kNumTemps = op_kind() == Token::kADD ? 1 : 0;
+    const intptr_t kNumTemps = 0;
     LocationSummary* summary =
         new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
     summary->set_in(0, Location::RequiresRegister());
@@ -2510,7 +2408,8 @@
   if (null_check()) {
     Label* deopt = compiler->AddDeoptStub(deopt_id(),
                                           kDeoptCheckClass);
-    __ beq(locs()->in(0).reg(), NULLREG, deopt);
+    __ BranchEqual(locs()->in(0).reg(),
+                  reinterpret_cast<intptr_t>(Object::null()), deopt);
     return;
   }
 
@@ -2763,13 +2662,33 @@
   if (compiler->CanFallThroughTo(false_successor())) {
     // If the next block is the false successor we will fall through to it.
     Label* label = compiler->GetJumpLabel(true_successor());
-    EmitBranchAfterCompare(compiler, true_condition, label);
+    switch (true_condition) {
+      case EQ: __ beq(CMPRES, ZR, label); break;
+      case NE: __ bne(CMPRES, ZR, label); break;
+      case GT: __ bgtz(CMPRES, label); break;
+      case GE: __ bgez(CMPRES, label); break;
+      case LT: __ bltz(CMPRES, label); break;
+      case LE: __ blez(CMPRES, label); break;
+      default:
+        UNREACHABLE();
+        break;
+    }
   } else {
     // If the next block is the true successor we negate comparison and fall
     // through to it.
     Condition false_condition = NegateCondition(true_condition);
     Label* label = compiler->GetJumpLabel(false_successor());
-    EmitBranchAfterCompare(compiler, false_condition, label);
+    switch (false_condition) {
+      case EQ: __ beq(CMPRES, ZR, label); break;
+      case NE: __ bne(CMPRES, ZR, label); break;
+      case GT: __ bgtz(CMPRES, label); break;
+      case GE: __ bgez(CMPRES, label); break;
+      case LT: __ bltz(CMPRES, label); break;
+      case LE: __ blez(CMPRES, label); break;
+      default:
+        UNREACHABLE();
+        break;
+    }
     // Fall through or jump to the true successor.
     if (!compiler->CanFallThroughTo(true_successor())) {
       __ b(compiler->GetJumpLabel(true_successor()));
@@ -2939,11 +2858,11 @@
   Register dest_reg = locs()->in(1).reg();
 
   if (value()->NeedsStoreBuffer()) {
-    __ StoreIntoObject(dest_reg,
-        FieldAddress(dest_reg, offset_in_bytes()), value_reg);
+    __ StoreIntoObject(dest_reg, FieldAddress(dest_reg, offset_in_bytes()),
+                       value_reg);
   } else {
-    __ StoreIntoObjectNoBarrier(dest_reg,
-        FieldAddress(dest_reg, offset_in_bytes()), value_reg);
+    __ StoreIntoObjectNoBarrier(
+        dest_reg, FieldAddress(dest_reg, offset_in_bytes()), value_reg);
   }
 }
 
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index 86e07dc..6cb751f 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -785,25 +785,6 @@
 }
 
 
-static Condition FlipCondition(Condition condition) {
-  switch (condition) {
-    case EQUAL:         return EQUAL;
-    case NOT_EQUAL:     return NOT_EQUAL;
-    case LESS:          return GREATER;
-    case LESS_EQUAL:    return GREATER_EQUAL;
-    case GREATER:       return LESS;
-    case GREATER_EQUAL: return LESS_EQUAL;
-    case BELOW:         return ABOVE;
-    case BELOW_EQUAL:   return ABOVE_EQUAL;
-    case ABOVE:         return BELOW;
-    case ABOVE_EQUAL:   return BELOW_EQUAL;
-    default:
-      UNIMPLEMENTED();
-      return EQUAL;
-  }
-}
-
-
 static void EmitSmiComparisonOp(FlowGraphCompiler* compiler,
                                 const LocationSummary& locs,
                                 Token::Kind kind,
@@ -816,7 +797,7 @@
 
   if (left.IsConstant()) {
     __ CompareObject(right.reg(), left.constant());
-    true_condition = FlipCondition(true_condition);
+    true_condition = FlowGraphCompiler::FlipCondition(true_condition);
   } else if (right.IsConstant()) {
     __ CompareObject(left.reg(), right.constant());
   } else if (right.IsStackSlot()) {
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 7b34a1a..f455a0a 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -2299,53 +2299,74 @@
 
 
 bool Class::IsTopLevel() const {
-  return Name() == Symbols::TopLevel().raw();
+  return String::Handle(Name()).Equals("::");
 }
 
 
 RawFunction* Class::LookupDynamicFunction(const String& name) const {
-  return LookupFunction(name, kInstance);
+  Function& function = Function::Handle(LookupFunction(name));
+  if (function.IsNull() || !function.IsDynamicFunction()) {
+    return Function::null();
+  }
+  return function.raw();
 }
 
 
 RawFunction* Class::LookupDynamicFunctionAllowPrivate(
     const String& name) const {
-  return LookupFunctionAllowPrivate(name, kInstance);
+  Function& function = Function::Handle(LookupFunctionAllowPrivate(name));
+  if (function.IsNull() || !function.IsDynamicFunction()) {
+    return Function::null();
+  }
+  return function.raw();
 }
 
 
 RawFunction* Class::LookupStaticFunction(const String& name) const {
-  return LookupFunction(name, kStatic);
+  Function& function = Function::Handle(LookupFunction(name));
+  if (function.IsNull() || !function.IsStaticFunction()) {
+    return Function::null();
+  }
+  return function.raw();
 }
 
 
 RawFunction* Class::LookupStaticFunctionAllowPrivate(const String& name) const {
-  return LookupFunctionAllowPrivate(name, kStatic);
+  Function& function = Function::Handle(LookupFunctionAllowPrivate(name));
+  if (function.IsNull() || !function.IsStaticFunction()) {
+    return Function::null();
+  }
+  return function.raw();
 }
 
 
 RawFunction* Class::LookupConstructor(const String& name) const {
-  return LookupFunction(name, kConstructor);
+  Function& function = Function::Handle(LookupFunction(name));
+  if (function.IsNull() || !function.IsConstructor()) {
+    return Function::null();
+  }
+  ASSERT(!function.is_static());
+  return function.raw();
 }
 
 
 RawFunction* Class::LookupConstructorAllowPrivate(const String& name) const {
-  return LookupFunctionAllowPrivate(name, kConstructor);
+  Function& function = Function::Handle(LookupFunctionAllowPrivate(name));
+  if (function.IsNull() || !function.IsConstructor()) {
+    return Function::null();
+  }
+  ASSERT(!function.is_static());
+  return function.raw();
 }
 
 
 RawFunction* Class::LookupFactory(const String& name) const {
-  return LookupFunction(name, kFactory);
-}
-
-
-RawFunction* Class::LookupFunction(const String& name) const {
-  return LookupFunction(name, kAny);
-}
-
-
-RawFunction* Class::LookupFunctionAllowPrivate(const String& name) const {
-  return LookupFunctionAllowPrivate(name, kAny);
+  Function& function = Function::Handle(LookupFunction(name));
+  if (function.IsNull() || !function.IsFactory()) {
+    return Function::null();
+  }
+  ASSERT(function.is_static());
+  return function.raw();
 }
 
 
@@ -2374,33 +2395,7 @@
 }
 
 
-RawFunction* Class::CheckFunctionType(const Function& func, intptr_t type) {
-  if (type == kInstance) {
-    if (func.IsDynamicFunction()) {
-      return func.raw();
-    }
-  } else if (type == kStatic) {
-    if (func.IsStaticFunction()) {
-      return func.raw();
-    }
-  } else if (type == kConstructor) {
-    if (func.IsConstructor()) {
-      ASSERT(!func.is_static());
-      return func.raw();
-    }
-  } else if (type == kFactory) {
-    if (func.IsFactory()) {
-      ASSERT(func.is_static());
-      return func.raw();
-    }
-  } else if (type == kAny) {
-    return func.raw();
-  }
-  return Function::null();
-}
-
-
-RawFunction* Class::LookupFunction(const String& name, intptr_t type) const {
+RawFunction* Class::LookupFunction(const String& name) const {
   Isolate* isolate = Isolate::Current();
   if (EnsureIsFinalized(isolate) != Error::null()) {
     return Function::null();
@@ -2410,7 +2405,7 @@
     // This can occur, e.g., for Null classes.
     return Function::null();
   }
-  Function& function = Function::Handle(isolate);
+  Function& function = Function::Handle(isolate, Function::null());
   const intptr_t len = funcs.Length();
   if (name.IsSymbol()) {
     // Quick Symbol compare.
@@ -2418,16 +2413,16 @@
     for (intptr_t i = 0; i < len; i++) {
       function ^= funcs.At(i);
       if (function.name() == name.raw()) {
-        return CheckFunctionType(function, type);
+        return function.raw();
       }
     }
   } else {
-    String& function_name = String::Handle(isolate);
+    String& function_name = String::Handle(isolate, String::null());
     for (intptr_t i = 0; i < len; i++) {
       function ^= funcs.At(i);
       function_name ^= function.name();
       if (function_name.Equals(name)) {
-        return CheckFunctionType(function, type);
+        return function.raw();
       }
     }
   }
@@ -2436,8 +2431,7 @@
 }
 
 
-RawFunction* Class::LookupFunctionAllowPrivate(const String& name,
-                                               intptr_t type) const {
+RawFunction* Class::LookupFunctionAllowPrivate(const String& name) const {
   Isolate* isolate = Isolate::Current();
   if (EnsureIsFinalized(isolate) != Error::null()) {
     return Function::null();
@@ -2447,14 +2441,14 @@
     // This can occur, e.g., for Null classes.
     return Function::null();
   }
-  Function& function = Function::Handle(isolate);
-  String& function_name = String::Handle(isolate);
+  Function& function = Function::Handle(isolate, Function::null());
+  String& function_name = String::Handle(isolate, String::null());
   intptr_t len = funcs.Length();
   for (intptr_t i = 0; i < len; i++) {
     function ^= funcs.At(i);
     function_name ^= function.name();
     if (String::EqualsIgnoringPrivateKey(function_name, name)) {
-      return CheckFunctionType(function, type);
+        return function.raw();
     }
   }
   // No function found.
@@ -2523,21 +2517,44 @@
 
 
 RawField* Class::LookupInstanceField(const String& name) const {
-  return LookupField(name, kInstance);
+  Isolate* isolate = Isolate::Current();
+  if (EnsureIsFinalized(isolate) != Error::null()) {
+    return Field::null();
+  }
+  ASSERT(is_finalized());
+  const Field& field = Field::Handle(isolate, LookupField(name));
+  if (!field.IsNull()) {
+    if (field.is_static()) {
+      // Name matches but it is not of the correct kind, return NULL.
+      return Field::null();
+    }
+    return field.raw();
+  }
+  // No field found.
+  return Field::null();
 }
 
 
 RawField* Class::LookupStaticField(const String& name) const {
-  return LookupField(name, kStatic);
+  Isolate* isolate = Isolate::Current();
+  if (EnsureIsFinalized(isolate) != Error::null()) {
+    return Field::null();
+  }
+  ASSERT(is_finalized());
+  const Field& field = Field::Handle(isolate, LookupField(name));
+  if (!field.IsNull()) {
+    if (!field.is_static()) {
+      // Name matches but it is not of the correct kind, return NULL.
+      return Field::null();
+    }
+    return field.raw();
+  }
+  // No field found.
+  return Field::null();
 }
 
 
 RawField* Class::LookupField(const String& name) const {
-  return LookupField(name, kAny);
-}
-
-
-RawField* Class::LookupField(const String& name, intptr_t type) const {
   Isolate* isolate = Isolate::Current();
   if (EnsureIsFinalized(isolate) != Error::null()) {
     return Field::null();
@@ -2550,18 +2567,7 @@
     field ^= flds.At(i);
     field_name ^= field.name();
     if (String::EqualsIgnoringPrivateKey(field_name, name)) {
-      if (type == kInstance) {
-        if (!field.is_static()) {
-          return field.raw();
-        }
-      } else if (type == kStatic) {
-        if (field.is_static()) {
-          return field.raw();
-        }
-      } else if (type == kAny) {
-        return field.raw();
-      }
-      return Field::null();
+      return field.raw();
     }
   }
   // No field found.
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index b38d3ac..480ce5b 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -917,13 +917,6 @@
 
  private:
   enum {
-    kAny = 0,
-    kStatic,
-    kInstance,
-    kConstructor,
-    kFactory,
-  };
-  enum {
     kConstBit = 0,
     kImplementedBit = 1,
     kAbstractBit = 2,
@@ -960,12 +953,6 @@
   // Assigns empty array to all raw class array fields.
   void InitEmptyFields();
 
-  static RawFunction* CheckFunctionType(const Function& func, intptr_t type);
-  RawFunction* LookupFunction(const String& name, intptr_t type) const;
-  RawFunction* LookupFunctionAllowPrivate(const String& name,
-                                          intptr_t type) const;
-  RawField* LookupField(const String& name, intptr_t type) const;
-
   RawFunction* LookupAccessorFunction(const char* prefix,
                                       intptr_t prefix_length,
                                       const String& name) const;
diff --git a/runtime/vm/simulator_arm.cc b/runtime/vm/simulator_arm.cc
index 17d8ae6..4e161c6 100644
--- a/runtime/vm/simulator_arm.cc
+++ b/runtime/vm/simulator_arm.cc
@@ -114,13 +114,11 @@
   bool GetFValue(char* desc, float* value);
   bool GetDValue(char* desc, double* value);
 
-  static intptr_t GetApproximateTokenIndex(const Code& code, uword pc);
-
-  static void PrintDartFrame(uword pc, uword fp, uword sp,
-                             const Function& function,
-                             intptr_t token_pos,
-                             bool is_optimized,
-                             bool is_inlined);
+  void PrintDartFrame(uword pc, uword fp, uword sp,
+                      const Function& function,
+                      intptr_t token_pos,
+                      bool is_optimized,
+                      bool is_inlined);
   void PrintBacktrace();
 
   // Set or delete a breakpoint. Returns true if successful.
@@ -264,23 +262,6 @@
 }
 
 
-intptr_t SimulatorDebugger::GetApproximateTokenIndex(const Code& code,
-                                                     uword pc) {
-  intptr_t token_pos = -1;
-  const PcDescriptors& descriptors =
-      PcDescriptors::Handle(code.pc_descriptors());
-  for (intptr_t i = 0; i < descriptors.Length(); i++) {
-    if (descriptors.PC(i) == pc) {
-      token_pos = descriptors.TokenPos(i);
-      break;
-    } else if ((token_pos <= 0) && (descriptors.PC(i) > pc)) {
-      token_pos = descriptors.TokenPos(i);
-    }
-  }
-  return token_pos;
-}
-
-
 void SimulatorDebugger::PrintDartFrame(uword pc, uword fp, uword sp,
                                        const Function& function,
                                        intptr_t token_pos,
@@ -332,8 +313,7 @@
           if (!it.Done()) {
             PrintDartFrame(unoptimized_pc, frame->fp(), frame->sp(),
                            inlined_function,
-                           GetApproximateTokenIndex(unoptimized_code,
-                                                    unoptimized_pc),
+                           unoptimized_code.GetTokenIndexOfPC(unoptimized_pc),
                            true, true);
           }
         }
@@ -341,7 +321,7 @@
       }
       PrintDartFrame(frame->pc(), frame->fp(), frame->sp(),
                      function,
-                     GetApproximateTokenIndex(code, frame->pc()),
+                     code.GetTokenIndexOfPC(frame->pc()),
                      code.is_optimized(), false);
     } else {
       OS::Print("pc=0x%"Px" fp=0x%"Px" sp=0x%"Px" %s frame\n",
diff --git a/runtime/vm/simulator_mips.cc b/runtime/vm/simulator_mips.cc
index 0da94b0..393e261 100644
--- a/runtime/vm/simulator_mips.cc
+++ b/runtime/vm/simulator_mips.cc
@@ -1762,20 +1762,6 @@
       }
       break;
     }
-    case SLTI: {
-      // Format(instr, "slti 'rt, 'rs, 'imms");
-      int32_t rs_val = get_register(instr->RsField());
-      int32_t imm_val = instr->SImmField();
-      set_register(instr->RtField(), rs_val < imm_val ? 1 : 0);
-      break;
-    }
-    case SLTIU: {
-      // Format(instr, "slti 'rt, 'rs, 'immu");
-      uint32_t rs_val = get_register(instr->RsField());
-      uint32_t imm_val = instr->UImmField();
-      set_register(instr->RtField(), rs_val < imm_val ? 1 : 0);
-      break;
-    }
     case SDC1: {
       // Format(instr, "sdc1 'ft, 'imms('rs)");
       int32_t base_val = get_register(instr->RsField());
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc
index 1491ec3..0b8a041 100644
--- a/runtime/vm/stub_code_arm.cc
+++ b/runtime/vm/stub_code_arm.cc
@@ -437,9 +437,13 @@
   // Push arguments descriptor array.
   __ LoadImmediate(IP, reinterpret_cast<intptr_t>(Object::null()));
   __ PushList((1 << R4) | (1 << R5) | (1 << R6) | (1 << IP));
+
+  // R2: Smi-tagged arguments array length.
+  PushArgumentsArray(assembler);
+
   __ CallRuntime(kMegamorphicCacheMissHandlerRuntimeEntry);
   // Remove arguments.
-  __ Drop(3);
+  __ Drop(4);
   __ Pop(R0);  // Get result into R0.
 
   // Restore IC data and arguments descriptor.
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
index 1acfc81..0657984 100644
--- a/runtime/vm/stub_code_ia32.cc
+++ b/runtime/vm/stub_code_ia32.cc
@@ -448,7 +448,7 @@
   __ pushl(raw_null);  // Space for the result of the runtime call.
   __ pushl(EAX);  // Pass receiver.
   __ pushl(ECX);  // Pass IC data.
-  __ pushl(EDX);  // Pass arguments descriptor.
+  __ pushl(EDX);  // Pass rguments descriptor.
   __ CallRuntime(kMegamorphicCacheMissHandlerRuntimeEntry);
   // Discard arguments.
   __ popl(EAX);
diff --git a/runtime/vm/stub_code_mips.cc b/runtime/vm/stub_code_mips.cc
index 39d3357..5881403 100644
--- a/runtime/vm/stub_code_mips.cc
+++ b/runtime/vm/stub_code_mips.cc
@@ -111,22 +111,8 @@
 }
 
 
-// Print the stop message.
-DEFINE_LEAF_RUNTIME_ENTRY(void, PrintStopMessage, const char* message) {
-  OS::Print("Stop message: %s\n", message);
-}
-END_LEAF_RUNTIME_ENTRY
-
-
-// Input parameters:
-//   A0 : stop message (const char*).
-// Must preserve all registers.
 void StubCode::GeneratePrintStopMessageStub(Assembler* assembler) {
-  __ EnterCallRuntimeFrame(0);
-  // Call the runtime leaf function. A0 already contains the parameter.
-  __ CallRuntime(kPrintStopMessageRuntimeEntry);
-  __ LeaveCallRuntimeFrame();
-  __ Ret();
+  __ Unimplemented("PrintStopMessage stub");
 }
 
 
@@ -253,7 +239,6 @@
 void StubCode::GenerateFixCallersTargetStub(Assembler* assembler) {
   // Create a stub frame as we are pushing some objects on the stack before
   // calling into the runtime.
-  __ TraceSimMsg("FixCallersTarget");
   __ EnterStubFrame();
   // Setup space on stack for return value and preserve arguments descriptor.
   __ addiu(SP, SP, Immediate(-2 * kWordSize));
@@ -339,6 +324,17 @@
   PushArgumentsArray(assembler);
   __ TraceSimMsg("InstanceFunctionLookupStub return");
 
+  // Stack:
+  // TOS + 0: argument array.
+  // TOS + 1: arguments descriptor array.
+  // TOS + 2: IC data object.
+  // TOS + 3: Receiver.
+  // TOS + 4: place for result from the call.
+  // TOS + 5: saved FP of previous frame.
+  // TOS + 6: dart code return address
+  // TOS + 7: pc marker (0 for stub).
+  // TOS + 8: last argument of caller.
+  // ....
   __ CallRuntime(kInstanceFunctionLookupRuntimeEntry);
 
   __ lw(V0, Address(SP, 4 * kWordSize));  // Get result into V0.
@@ -355,8 +351,6 @@
 DECLARE_LEAF_RUNTIME_ENTRY(void, DeoptimizeFillFrame, uword last_fp);
 
 
-
-
 // Used by eager and lazy deoptimization. Preserve result in V0 if necessary.
 // This stub translates optimized frame into unoptimized frame. The optimized
 // frame can contain values in registers and on stack, the unoptimized
@@ -370,53 +364,42 @@
 // GC can occur only after frame is fully rewritten.
 // Stack after EnterFrame(...) below:
 //   +------------------+
-//   | Saved PP         | <- TOS
+//   | Saved FP         | <- TOS
 //   +------------------+
-//   | Saved FP         | <- FP of stub
+//   | return-address   |  (deoptimization point)
 //   +------------------+
-//   | Saved LR         |  (deoptimization point)
-//   +------------------+
-//   | PC marker        |
-//   +------------------+
-//   | ...              | <- SP of optimized frame
+//   | optimized frame  |
+//   |  ...             |
 //
 // Parts of the code cannot GC, part of the code can GC.
 static void GenerateDeoptimizationSequence(Assembler* assembler,
                                            bool preserve_result) {
-  __ TraceSimMsg("GenerateDeoptimizationSequence");
   const intptr_t kPushedRegistersSize =
       kNumberOfCpuRegisters * kWordSize +
-      4 * kWordSize +  // PP, FP, RA, PC marker.
+      2 * kWordSize +  // FP and RA.
       kNumberOfFRegisters * kWordSize;
 
-  // DeoptimizeCopyFrame expects a Dart frame, i.e. EnterDartFrame(0), but there
-  // is no need to set the correct PC marker or load PP, since they get patched.
   __ addiu(SP, SP, Immediate(-kPushedRegistersSize * kWordSize));
-  __ sw(ZR, Address(SP, kPushedRegistersSize - 1 * kWordSize));
-  __ sw(RA, Address(SP, kPushedRegistersSize - 2 * kWordSize));
-  __ sw(FP, Address(SP, kPushedRegistersSize - 3 * kWordSize));
-  __ sw(PP, Address(SP, kPushedRegistersSize - 4 * kWordSize));
-  __ addiu(FP, SP, Immediate(kPushedRegistersSize - 3 * kWordSize));
+  __ sw(RA, Address(SP, kPushedRegistersSize - 1 * kWordSize));
+  __ sw(FP, Address(SP, kPushedRegistersSize - 2 * kWordSize));
+  __ addiu(FP, SP, Immediate(kPushedRegistersSize - 2 * kWordSize));
+
 
   // The code in this frame may not cause GC. kDeoptimizeCopyFrameRuntimeEntry
   // and kDeoptimizeFillFrameRuntimeEntry are leaf runtime calls.
-  const intptr_t saved_result_slot_from_fp =
-      kFirstLocalSlotFromFp + 1 - (kNumberOfCpuRegisters - V0);
+  const intptr_t saved_v0_offset_from_fp = -(kNumberOfCpuRegisters - V0);
   // Result in V0 is preserved as part of pushing all registers below.
 
-  // TODO(regis): Should we align the stack before pushing the fpu registers?
-  // If we do, saved_result_slot_from_fp is not constant anymore.
-
   // Push registers in their enumeration order: lowest register number at
   // lowest address.
   for (int i = 0; i < kNumberOfCpuRegisters; i++) {
-    const int slot = 4 + kNumberOfCpuRegisters - i;
+    const int slot = 2 + kNumberOfCpuRegisters - i;
     Register reg = static_cast<Register>(i);
     __ sw(reg, Address(SP, kPushedRegistersSize - slot * kWordSize));
   }
   for (int i = 0; i < kNumberOfFRegisters; i++) {
     // These go below the CPU registers.
-    const int slot = 4 + kNumberOfCpuRegisters + kNumberOfFRegisters - i;
+    const int slot = 2 + kNumberOfCpuRegisters + kNumberOfFRegisters - i;
     FRegister reg = static_cast<FRegister>(i);
     __ swc1(reg, Address(SP, kPushedRegistersSize - slot * kWordSize));
   }
@@ -428,40 +411,38 @@
 
   if (preserve_result) {
     // Restore result into T1 temporarily.
-    __ lw(T1, Address(FP, saved_result_slot_from_fp * kWordSize));
+    __ lw(T1, Address(FP, saved_v0_offset_from_fp * kWordSize));
   }
 
-  __ addiu(SP, FP, Immediate(-kWordSize));
-  __ lw(RA, Address(SP, 2 * kWordSize));
-  __ lw(FP, Address(SP, 1 * kWordSize));
-  __ lw(PP, Address(SP, 0 * kWordSize));
+  __ mov(SP, FP);
+  __ lw(FP, Address(SP, 0 * kWordSize));
+  __ lw(RA, Address(SP, 1 * kWordSize));
+  __ addiu(SP, SP, Immediate(2 * kWordSize));
+
   __ subu(SP, FP, V0);
 
-  // DeoptimizeFillFrame expects a Dart frame, i.e. EnterDartFrame(0), but there
-  // is no need to set the correct PC marker or load PP, since they get patched.
-  __ addiu(SP, SP, Immediate(-4 * kWordSize));
-  __ sw(ZR, Address(SP, 3 * kWordSize));
-  __ sw(RA, Address(SP, 2 * kWordSize));
-  __ sw(FP, Address(SP, 1 * kWordSize));
-  __ sw(PP, Address(SP, 0 * kWordSize));
-  __ addiu(FP, SP, Immediate(kWordSize));
+  __ addiu(SP, SP, Immediate(-2 * kWordSize));
+  __ sw(RA, Address(SP, 1 * kWordSize));
+  __ sw(FP, Address(SP, 0 * kWordSize));
+  __ mov(FP, SP);
 
-  __ mov(A0, FP);  // Get last FP address.
+  __ mov(A0, SP);  // Get last FP address.
   if (preserve_result) {
-    __ Push(T1);  // Preserve result as first local.
+    __ Push(T1);  // Preserve result.
   }
   __ ReserveAlignedFrameSpace(0);
   __ CallRuntime(kDeoptimizeFillFrameRuntimeEntry);  // Pass last FP in A0.
+  // Result (V0) is our FP.
   if (preserve_result) {
     // Restore result into T1.
-    __ lw(T1, Address(FP, kFirstLocalSlotFromFp * kWordSize));
+    __ lw(T1, Address(FP, -1 * kWordSize));
   }
   // Code above cannot cause GC.
-  __ addiu(SP, FP, Immediate(-kWordSize));
-  __ lw(RA, Address(SP, 2 * kWordSize));
-  __ lw(FP, Address(SP, 1 * kWordSize));
-  __ lw(PP, Address(SP, 0 * kWordSize));
-  __ addiu(SP, SP, Immediate(4 * kWordSize));
+  __ mov(SP, FP);
+  __ lw(FP, Address(SP, 0 * kWordSize));
+  __ lw(RA, Address(SP, 1 * kWordSize));
+  __ addiu(SP, SP, Immediate(2 * kWordSize));
+  __ mov(FP, V0);
 
   // Frame is fully rewritten at this point and it is safe to perform a GC.
   // Materialize any objects that were deferred by FillFrame because they
@@ -475,22 +456,20 @@
   // Result tells stub how many bytes to remove from the expression stack
   // of the bottom-most frame. They were used as materialization arguments.
   __ Pop(T1);
+  __ SmiUntag(T1);
   if (preserve_result) {
     __ Pop(V0);  // Restore result.
   }
   __ LeaveStubFrame();
-  // Remove materialization arguments.
-  __ SmiUntag(T1);
-  __ addu(SP, SP, T1);
-  __ Ret();
+
+  // Return.
+  __ jr(RA);
+  __ delay_slot()->addu(SP, SP, T1);  // Remove materialization arguments.
 }
 
 
 void StubCode::GenerateDeoptimizeLazyStub(Assembler* assembler) {
-  // Correct return address to point just after the call that is being
-  // deoptimized.
-  __ AddImmediate(RA, -CallPattern::kFixedLengthInBytes);
-  GenerateDeoptimizationSequence(assembler, true);  // Preserve V0.
+  __ Unimplemented("DeoptimizeLazy stub");
 }
 
 
@@ -501,7 +480,6 @@
 
 void StubCode::GenerateMegamorphicMissStub(Assembler* assembler) {
   __ Unimplemented("MegamorphicMiss stub");
-  return;
 }
 
 
@@ -888,7 +866,6 @@
 // Output:
 //   V0: new allocated RawContext object.
 void StubCode::GenerateAllocateContextStub(Assembler* assembler) {
-  __ TraceSimMsg("AllocateContext");
   if (FLAG_inline_alloc) {
     const Class& context_class = Class::ZoneHandle(Object::context_class());
     Label slow_case;
@@ -1780,7 +1757,6 @@
 void StubCode::GenerateBreakpointDynamicStub(Assembler* assembler) {
   // Create a stub frame as we are pushing some objects on the stack before
   // calling into the runtime.
-  __ TraceSimMsg("BreakpointDynamicStub");
   __ EnterStubFrame();
   __ addiu(SP, SP, Immediate(-2 * kWordSize));
   __ sw(S5, Address(SP, 1 * kWordSize));
@@ -2161,8 +2137,6 @@
   __ Bind(&reference_compare);
   __ subu(ret, left, right);
   __ Bind(&done);
-  // A branch or test after this comparison will check CMPRES == TMP1.
-  __ mov(TMP1, ZR);
   __ lw(T0, Address(SP, 0 * kWordSize));
   __ lw(T1, Address(SP, 1 * kWordSize));
   __ Ret();
diff --git a/sdk/lib/_internal/pub/lib/src/command.dart b/sdk/lib/_internal/pub/lib/src/command.dart
index abc2468..d1f8516 100644
--- a/sdk/lib/_internal/pub/lib/src/command.dart
+++ b/sdk/lib/_internal/pub/lib/src/command.dart
@@ -134,11 +134,11 @@
       return commandFuture;
     }).whenComplete(() => cache.deleteTempDir()).catchError((e) {
       if (e is PubspecNotFoundException && e.name == null) {
-        e = new ApplicationException('Could not find a file named '
-            '"pubspec.yaml" in the directory ${path.current}.');
+        e = 'Could not find a file named "pubspec.yaml" in the directory '
+          '${path.current}.';
       } else if (e is PubspecHasNoNameException && e.name == null) {
-        e = new ApplicationException('pubspec.yaml is missing the required '
-            '"name" field (e.g. "name: ${path.basename(path.current)}").');
+        e = 'pubspec.yaml is missing the required "name" field (e.g. "name: '
+          '${path.basename(path.current)}").';
       }
 
       handleError(e);
diff --git a/sdk/lib/_internal/pub/lib/src/command_lish.dart b/sdk/lib/_internal/pub/lib/src/command_lish.dart
index bb40f91..9fc723c 100644
--- a/sdk/lib/_internal/pub/lib/src/command_lish.dart
+++ b/sdk/lib/_internal/pub/lib/src/command_lish.dart
@@ -87,7 +87,7 @@
         // TODO(nweiz): the response may have XML-formatted information about
         // the error. Try to parse that out once we have an easily-accessible
         // XML parser.
-        throw new ApplicationException('Failed to upload the package.');
+        throw new Exception('Failed to upload the package.');
       } else if (urisEqual(Uri.parse(url.origin), Uri.parse(server.origin))) {
         handleJsonError(error.response);
       } else {
diff --git a/sdk/lib/_internal/pub/lib/src/package.dart b/sdk/lib/_internal/pub/lib/src/package.dart
index 22d3bee..a2a1b12 100644
--- a/sdk/lib/_internal/pub/lib/src/package.dart
+++ b/sdk/lib/_internal/pub/lib/src/package.dart
@@ -11,7 +11,6 @@
 import 'io.dart';
 import 'pubspec.dart';
 import 'source_registry.dart';
-import 'utils.dart';
 import 'version.dart';
 
 final _README_REGEXP = new RegExp(r"^README($|\.)", caseSensitive: false);
@@ -191,30 +190,29 @@
   }
 }
 
-class PubspecNotFoundException extends ApplicationException {
+class PubspecNotFoundException implements Exception {
   final String name;
 
-  PubspecNotFoundException(String name)
-      : name = name,
-        super('Package "$name" doesn\'t have a pubspec.yaml file.');
+  PubspecNotFoundException(this.name);
+
+  String toString() => 'Package "$name" doesn\'t have a pubspec.yaml file.';
 }
 
-class PubspecHasNoNameException extends ApplicationException {
+class PubspecHasNoNameException implements Exception {
   final String name;
 
-  PubspecHasNoNameException(String name)
-      : name = name,
-        super('Package "$name"\'s pubspec.yaml file is missing the '
-              'required "name" field (e.g. "name: $name").');
+  PubspecHasNoNameException(this.name);
+
+  String toString() => 'Package "$name"\'s pubspec.yaml file is missing the '
+    'required "name" field (e.g. "name: $name").';
 }
 
-class PubspecNameMismatchException extends ApplicationException {
+class PubspecNameMismatchException implements Exception {
   final String expectedName;
   final String actualName;
 
-  PubspecNameMismatchException(String expectedName, String actualName)
-      : expectedName = expectedName,
-        actualName = actualName,
-        super('The name you specified for your dependency, "$expectedName", '
-              'doesn\'t match the name "$actualName" in its pubspec.');
+  PubspecNameMismatchException(this.expectedName, this.actualName);
+
+  String toString() => 'The name you specified for your dependency, '
+    '"$expectedName", doesn\'t match the name "$actualName" in its pubspec.';
 }
diff --git a/sdk/lib/_internal/pub/lib/src/solver/version_solver.dart b/sdk/lib/_internal/pub/lib/src/solver/version_solver.dart
index e2b7b5b..7b6713b 100644
--- a/sdk/lib/_internal/pub/lib/src/solver/version_solver.dart
+++ b/sdk/lib/_internal/pub/lib/src/solver/version_solver.dart
@@ -176,6 +176,29 @@
   SolveFailure(this.package, Iterable<Dependency> dependencies)
       : dependencies = dependencies != null ? dependencies : <Dependency>[];
 
+  /// Writes [dependencies] to [buffer] as a bullet list. If [describe] is
+  /// passed, it will be called for each dependency and the result will be
+  /// written next to the dependency.
+  void writeDependencies(StringBuffer buffer,
+      [String describe(PackageDep dep)]) {
+    var map = {};
+    for (var dep in dependencies) {
+      map[dep.depender] = dep.dep;
+    }
+
+    var names = map.keys.toList();
+    names.sort();
+
+    for (var name in names) {
+      buffer.writeln("- '$name' ");
+      if (describe != null) {
+        buffer.writeln(describe(map[name]));
+      } else {
+        buffer.writeln("depends on version ${map[name].constraint}");
+      }
+    }
+  }
+
   String toString() {
     if (dependencies.isEmpty) return _message;
 
@@ -190,8 +213,9 @@
     var names = map.keys.toList();
     names.sort();
 
-    buffer.writeAll(names.map(
-        (name) => "- '$name' ${_describeDependency(map[name])}"), '\n');
+    for (var name in names) {
+      buffer.writeln("- '$name' ${_describeDependency(map[name])}");
+    }
 
     return buffer.toString();
   }
diff --git a/sdk/lib/_internal/pub/lib/src/utils.dart b/sdk/lib/_internal/pub/lib/src/utils.dart
index 76defb0..0311c9d 100644
--- a/sdk/lib/_internal/pub/lib/src/utils.dart
+++ b/sdk/lib/_internal/pub/lib/src/utils.dart
@@ -472,8 +472,8 @@
     // TODO(nweiz): Serialize using the YAML library once it supports
     // serialization.
 
-    // Use indentation for (non-empty) maps.
-    if (data is Map && !data.isEmpty) {
+    // Use indentation for maps.
+    if (data is Map) {
       if (isMapValue) {
         buffer.writeln();
         indent += '  ';
diff --git a/sdk/lib/_internal/pub/test/deploy/copies_dart_js_next_to_entrypoints_test.dart b/sdk/lib/_internal/pub/test/deploy/copies_dart_js_next_to_entrypoints_test.dart
index 7eecff3..d95b3d9 100644
--- a/sdk/lib/_internal/pub/test/deploy/copies_dart_js_next_to_entrypoints_test.dart
+++ b/sdk/lib/_internal/pub/test/deploy/copies_dart_js_next_to_entrypoints_test.dart
@@ -45,7 +45,8 @@
       ])
     ]).create();
 
-    pubInstall();
+    schedulePub(args: ["install"],
+        output: new RegExp(r"Dependencies installed!$"));
 
     schedulePub(args: ["deploy"],
         output: '''
diff --git a/sdk/lib/_internal/pub/test/dev_dependency_test.dart b/sdk/lib/_internal/pub/test/dev_dependency_test.dart
index 88df801..1e37807 100644
--- a/sdk/lib/_internal/pub/test/dev_dependency_test.dart
+++ b/sdk/lib/_internal/pub/test/dev_dependency_test.dart
@@ -30,7 +30,8 @@
       })
     ]).create();
 
-    pubInstall();
+    schedulePub(args: ["install"],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir("foo", [
@@ -64,7 +65,8 @@
       })
     ]).create();
 
-    pubInstall();
+    schedulePub(args: ["install"],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir("foo", [
@@ -102,7 +104,8 @@
       })
     ]).create();
 
-    pubInstall();
+    schedulePub(args: ["install"],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir("foo", [
diff --git a/sdk/lib/_internal/pub/test/hosted/fail_gracefully_on_missing_package_test.dart b/sdk/lib/_internal/pub/test/hosted/fail_gracefully_on_missing_package_test.dart
index 5d79470..675e52e 100644
--- a/sdk/lib/_internal/pub/test/hosted/fail_gracefully_on_missing_package_test.dart
+++ b/sdk/lib/_internal/pub/test/hosted/fail_gracefully_on_missing_package_test.dart
@@ -18,8 +18,8 @@
 
       d.appDir([dependencyMap("foo", "1.2.3")]).create();
 
-      pubCommand(command, error: new RegExp(
-          r'Could not find package "foo" at http://localhost:\d+\.$'));
+      pubCommand(command, error:
+          new RegExp('Could not find package "foo" at http://localhost:'));
     });
   });
 }
diff --git a/sdk/lib/_internal/pub/test/hosted/fail_gracefully_on_url_resolve_test.dart b/sdk/lib/_internal/pub/test/hosted/fail_gracefully_on_url_resolve_test.dart
index f6f4628..49742d3 100644
--- a/sdk/lib/_internal/pub/test/hosted/fail_gracefully_on_url_resolve_test.dart
+++ b/sdk/lib/_internal/pub/test/hosted/fail_gracefully_on_url_resolve_test.dart
@@ -28,7 +28,8 @@
         })
       ]).create();
 
-      pubCommand(command, error: 'Could not resolve URL "http://pub.invalid".');
+      pubCommand(command, error:
+        new RegExp('Could not resolve URL "http://pub.invalid".'));
     });
   });
 }
diff --git a/sdk/lib/_internal/pub/test/hosted/offline_test.dart b/sdk/lib/_internal/pub/test/hosted/offline_test.dart
index 3019a6b..eaca7f2 100644
--- a/sdk/lib/_internal/pub/test/hosted/offline_test.dart
+++ b/sdk/lib/_internal/pub/test/hosted/offline_test.dart
@@ -50,7 +50,7 @@
       ]).create();
 
       pubCommand(command, args: ['--offline'],
-          error: 'Could not find package "foo" in cache.');
+          error: new RegExp('Could not find package "foo" in cache'));
     });
 
     integration('fails gracefully no cached versions match', () {
@@ -65,9 +65,8 @@
         dependencyMap("foo", ">2.0.0")
       ]).create();
 
-      pubCommand(command, args: ['--offline'], error:
-          "Package 'foo' has no versions that match >2.0.0 derived from:\n"
-          "- 'myapp' depends on version >2.0.0");
+      pubCommand(command, args: ['--offline'],
+          error: new RegExp("Package 'foo' has no versions that match >2.0.0"));
     });
   });
 }
diff --git a/sdk/lib/_internal/pub/test/install/broken_symlink_test.dart b/sdk/lib/_internal/pub/test/install/broken_symlink_test.dart
index 2d9e551..7b627b2 100644
--- a/sdk/lib/_internal/pub/test/install/broken_symlink_test.dart
+++ b/sdk/lib/_internal/pub/test/install/broken_symlink_test.dart
@@ -23,7 +23,8 @@
     // Create a broken "packages" symlink in "bin".
     scheduleSymlink("nonexistent", path.join(appPath, "packages"));
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(appPath, [
       d.dir("bin", [
@@ -46,7 +47,8 @@
     // Create a broken "packages" symlink in "bin".
     scheduleSymlink("nonexistent", path.join(appPath, "bin", "packages"));
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(appPath, [
       d.dir("bin", [
diff --git a/sdk/lib/_internal/pub/test/install/git/check_out_and_update_test.dart b/sdk/lib/_internal/pub/test/install/git/check_out_and_update_test.dart
index b606972..3af7fb7 100644
--- a/sdk/lib/_internal/pub/test/install/git/check_out_and_update_test.dart
+++ b/sdk/lib/_internal/pub/test/install/git/check_out_and_update_test.dart
@@ -21,7 +21,8 @@
 
     d.appDir([{"git": "../foo.git"}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(cachePath, [
       d.dir('git', [
@@ -41,7 +42,8 @@
       d.libPubspec('foo', '1.0.0')
     ]).commit();
 
-    pubUpdate();
+    schedulePub(args: ['update'],
+        output: new RegExp(r"Dependencies updated!$"));
 
     // When we download a new version of the git package, we should re-use the
     // git/cache directory but create a new git/ directory.
diff --git a/sdk/lib/_internal/pub/test/install/git/check_out_branch_test.dart b/sdk/lib/_internal/pub/test/install/git/check_out_branch_test.dart
index 3e5aef0..2df0198 100644
--- a/sdk/lib/_internal/pub/test/install/git/check_out_branch_test.dart
+++ b/sdk/lib/_internal/pub/test/install/git/check_out_branch_test.dart
@@ -28,7 +28,8 @@
 
     d.appDir([{"git": {"url": "../foo.git", "ref": "old"}}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
diff --git a/sdk/lib/_internal/pub/test/install/git/check_out_revision_test.dart b/sdk/lib/_internal/pub/test/install/git/check_out_revision_test.dart
index cd1587a..b763dd4 100644
--- a/sdk/lib/_internal/pub/test/install/git/check_out_revision_test.dart
+++ b/sdk/lib/_internal/pub/test/install/git/check_out_revision_test.dart
@@ -28,7 +28,8 @@
 
     d.appDir([{"git": {"url": "../foo.git", "ref": commit}}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
diff --git a/sdk/lib/_internal/pub/test/install/git/check_out_test.dart b/sdk/lib/_internal/pub/test/install/git/check_out_test.dart
index 9c36368..c2a4f68 100644
--- a/sdk/lib/_internal/pub/test/install/git/check_out_test.dart
+++ b/sdk/lib/_internal/pub/test/install/git/check_out_test.dart
@@ -21,7 +21,8 @@
 
     d.appDir([{"git": "../foo.git"}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(cachePath, [
       d.dir('git', [
diff --git a/sdk/lib/_internal/pub/test/install/git/check_out_transitive_test.dart b/sdk/lib/_internal/pub/test/install/git/check_out_transitive_test.dart
index d07b3e2..d68763c 100644
--- a/sdk/lib/_internal/pub/test/install/git/check_out_transitive_test.dart
+++ b/sdk/lib/_internal/pub/test/install/git/check_out_transitive_test.dart
@@ -26,7 +26,8 @@
 
     d.appDir([{"git": "../foo.git"}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp("Dependencies installed!\$"));
 
     d.dir(cachePath, [
       d.dir('git', [
diff --git a/sdk/lib/_internal/pub/test/install/git/check_out_twice_test.dart b/sdk/lib/_internal/pub/test/install/git/check_out_twice_test.dart
index 2aef954..87d9a94 100644
--- a/sdk/lib/_internal/pub/test/install/git/check_out_twice_test.dart
+++ b/sdk/lib/_internal/pub/test/install/git/check_out_twice_test.dart
@@ -21,7 +21,8 @@
 
     d.appDir([{"git": "../foo.git"}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(cachePath, [
       d.dir('git', [
@@ -38,6 +39,7 @@
 
     // Verify that nothing breaks if we install a Git revision that's already
     // in the cache.
-    pubUpdate();
+    schedulePub(args: ['update'],
+        output: new RegExp(r"Dependencies updated!$"));
   });
 }
diff --git a/sdk/lib/_internal/pub/test/install/git/check_out_with_trailing_slash_test.dart b/sdk/lib/_internal/pub/test/install/git/check_out_with_trailing_slash_test.dart
index 5162b2f..e414483 100644
--- a/sdk/lib/_internal/pub/test/install/git/check_out_with_trailing_slash_test.dart
+++ b/sdk/lib/_internal/pub/test/install/git/check_out_with_trailing_slash_test.dart
@@ -24,7 +24,8 @@
 
       d.appDir([{"git": "../foo.git/"}]).create();
 
-      pubInstall();
+      schedulePub(args: ['install'],
+          output: new RegExp(r"Dependencies installed!$"));
 
       d.dir(cachePath, [
         d.dir('git', [
diff --git a/sdk/lib/_internal/pub/test/install/git/dependency_name_match_pubspec_test.dart b/sdk/lib/_internal/pub/test/install/git/dependency_name_match_pubspec_test.dart
index c6f89ee..c1e5572 100644
--- a/sdk/lib/_internal/pub/test/install/git/dependency_name_match_pubspec_test.dart
+++ b/sdk/lib/_internal/pub/test/install/git/dependency_name_match_pubspec_test.dart
@@ -29,8 +29,12 @@
       })
     ]).create();
 
-    pubInstall(error:
-        'The name you specified for your dependency, "weirdname", doesn\'t '
-        'match the name "foo" in its pubspec.');
+    // TODO(nweiz): clean up this RegExp when either issue 4706 or 4707 is
+    // fixed.
+    schedulePub(args: ['install'],
+        error: new RegExp(r'^The name you specified for your dependency, '
+            '"weirdname", doesn\'t match the name "foo" in its '
+            r'pubspec\.'),
+        exitCode: 1);
   });
 }
diff --git a/sdk/lib/_internal/pub/test/install/git/different_repo_name_test.dart b/sdk/lib/_internal/pub/test/install/git/different_repo_name_test.dart
index 0203f9b..3e5378c 100644
--- a/sdk/lib/_internal/pub/test/install/git/different_repo_name_test.dart
+++ b/sdk/lib/_internal/pub/test/install/git/different_repo_name_test.dart
@@ -29,7 +29,8 @@
       })
     ]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir('weirdname', [
diff --git a/sdk/lib/_internal/pub/test/install/git/lock_version_test.dart b/sdk/lib/_internal/pub/test/install/git/lock_version_test.dart
index 8eb7087..ed4994b 100644
--- a/sdk/lib/_internal/pub/test/install/git/lock_version_test.dart
+++ b/sdk/lib/_internal/pub/test/install/git/lock_version_test.dart
@@ -26,7 +26,8 @@
     d.appDir([{"git": "../foo.git"}]).create();
 
     // This install should lock the foo.git dependency to the current revision.
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
@@ -43,7 +44,8 @@
     ]).commit();
 
     // This install shouldn't update the foo.git dependency due to the lockfile.
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
diff --git a/sdk/lib/_internal/pub/test/install/git/require_pubspec_name_test.dart b/sdk/lib/_internal/pub/test/install/git/require_pubspec_name_test.dart
index eafd067..aad6a52 100644
--- a/sdk/lib/_internal/pub/test/install/git/require_pubspec_name_test.dart
+++ b/sdk/lib/_internal/pub/test/install/git/require_pubspec_name_test.dart
@@ -24,8 +24,9 @@
 
     // TODO(nweiz): clean up this RegExp when either issue 4706 or 4707 is
     // fixed.
-    pubInstall(error:
-        'Package "foo"\'s pubspec.yaml file is '
-        'missing the required "name" field (e.g. "name: foo").');
+    schedulePub(args: ['install'],
+        error: new RegExp(r'^Package "foo"' "'" 's pubspec.yaml file is '
+            r'missing the required "name" field \(e\.g\. "name: foo"\)\.'),
+        exitCode: 1);
   });
 }
diff --git a/sdk/lib/_internal/pub/test/install/git/require_pubspec_test.dart b/sdk/lib/_internal/pub/test/install/git/require_pubspec_test.dart
index ba2b5c6..ad1a22d 100644
--- a/sdk/lib/_internal/pub/test/install/git/require_pubspec_test.dart
+++ b/sdk/lib/_internal/pub/test/install/git/require_pubspec_test.dart
@@ -22,6 +22,9 @@
 
     // TODO(nweiz): clean up this RegExp when either issue 4706 or 4707 is
     // fixed.
-    pubInstall(error: 'Package "foo" doesn\'t have a pubspec.yaml file.');
+    schedulePub(args: ['install'],
+        error: new RegExp('^Package "foo" doesn\'t have a '
+            'pubspec.yaml file.'),
+        exitCode: 1);
   });
 }
diff --git a/sdk/lib/_internal/pub/test/install/git/stay_locked_if_compatible_test.dart b/sdk/lib/_internal/pub/test/install/git/stay_locked_if_compatible_test.dart
index f59b93b..8bc5025 100644
--- a/sdk/lib/_internal/pub/test/install/git/stay_locked_if_compatible_test.dart
+++ b/sdk/lib/_internal/pub/test/install/git/stay_locked_if_compatible_test.dart
@@ -22,7 +22,8 @@
 
     d.appDir([{"git": "../foo.git"}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
@@ -37,7 +38,8 @@
 
     d.appDir([{"git": "../foo.git", "version": ">=1.0.0"}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
diff --git a/sdk/lib/_internal/pub/test/install/git/unlock_if_incompatible_test.dart b/sdk/lib/_internal/pub/test/install/git/unlock_if_incompatible_test.dart
index 644650b..1b23fba 100644
--- a/sdk/lib/_internal/pub/test/install/git/unlock_if_incompatible_test.dart
+++ b/sdk/lib/_internal/pub/test/install/git/unlock_if_incompatible_test.dart
@@ -22,7 +22,8 @@
 
     d.appDir([{"git": "../foo.git"}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
@@ -37,7 +38,8 @@
 
     d.appDir([{"git": "../foo.git", "version": ">=1.0.0"}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
diff --git a/sdk/lib/_internal/pub/test/install/hosted/cached_pubspec_test.dart b/sdk/lib/_internal/pub/test/install/hosted/cached_pubspec_test.dart
index 5949d4b..153431a 100644
--- a/sdk/lib/_internal/pub/test/install/hosted/cached_pubspec_test.dart
+++ b/sdk/lib/_internal/pub/test/install/hosted/cached_pubspec_test.dart
@@ -20,7 +20,8 @@
     d.appDir([dependencyMap("foo", "1.2.3")]).create();
 
     // Run install once so it gets cached.
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp("Dependencies installed!\$"));
 
     // Clear the cache. We don't care about anything that was served during
     // the initial install.
@@ -30,7 +31,8 @@
     d.packagesDir({"foo": "1.2.3"}).validate();
 
     // Run the solver again now that it's cached.
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp("Dependencies installed!\$"));
 
     // The update should not have requested the pubspec since it's installed
     // locally already.
diff --git a/sdk/lib/_internal/pub/test/install/hosted/do_not_update_on_removed_constraints_test.dart b/sdk/lib/_internal/pub/test/install/hosted/do_not_update_on_removed_constraints_test.dart
index 9184b83..539d263 100644
--- a/sdk/lib/_internal/pub/test/install/hosted/do_not_update_on_removed_constraints_test.dart
+++ b/sdk/lib/_internal/pub/test/install/hosted/do_not_update_on_removed_constraints_test.dart
@@ -22,7 +22,8 @@
 
     d.appDir([dependencyMap("foo"), dependencyMap("bar")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.packagesDir({
       "foo": "1.0.0",
@@ -32,7 +33,8 @@
 
     d.appDir([dependencyMap("foo")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.packagesDir({
       "foo": "1.0.0",
diff --git a/sdk/lib/_internal/pub/test/install/hosted/install_test.dart b/sdk/lib/_internal/pub/test/install/hosted/install_test.dart
index 375860a..5db5553 100644
--- a/sdk/lib/_internal/pub/test/install/hosted/install_test.dart
+++ b/sdk/lib/_internal/pub/test/install/hosted/install_test.dart
@@ -16,7 +16,8 @@
 
     d.appDir([dependencyMap("foo", "1.2.3")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp("Dependencies installed!\$"));
 
     d.cacheDir({"foo": "1.2.3"}).validate();
     d.packagesDir({"foo": "1.2.3"}).validate();
@@ -27,7 +28,9 @@
 
     d.appDir([dependencyMap("bad name!", "1.2.3")]).create();
 
-    pubInstall(error: new RegExp(
-        r'Could not find package "bad name!" at http://localhost:\d+\.$'));
+    schedulePub(args: ['install'],
+        error: new RegExp('Could not find package "bad name!" at '
+                          'http://localhost:'),
+        exitCode: 1);
   });
 }
diff --git a/sdk/lib/_internal/pub/test/install/hosted/install_transitive_test.dart b/sdk/lib/_internal/pub/test/install/hosted/install_transitive_test.dart
index e474897..7da990f5 100644
--- a/sdk/lib/_internal/pub/test/install/hosted/install_transitive_test.dart
+++ b/sdk/lib/_internal/pub/test/install/hosted/install_transitive_test.dart
@@ -21,7 +21,8 @@
 
     d.appDir([dependencyMap("foo", "1.2.3")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp("Dependencies installed!\$"));
 
     d.cacheDir({"foo": "1.2.3", "bar": "2.0.4"}).validate();
     d.packagesDir({"foo": "1.2.3", "bar": "2.0.4"}).validate();
diff --git a/sdk/lib/_internal/pub/test/install/hosted/repair_cache_test.dart b/sdk/lib/_internal/pub/test/install/hosted/repair_cache_test.dart
index 94874ad..a343cc4 100644
--- a/sdk/lib/_internal/pub/test/install/hosted/repair_cache_test.dart
+++ b/sdk/lib/_internal/pub/test/install/hosted/repair_cache_test.dart
@@ -30,7 +30,8 @@
 
     d.appDir([dependencyMap("foo", "1.2.3")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp("Dependencies installed!\$"));
 
     d.cacheDir({"foo": "1.2.3"}).validate();
     d.packagesDir({"foo": "1.2.3"}).validate();
@@ -53,7 +54,8 @@
 
     d.appDir([dependencyMap("foo", "1.2.3")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp("Dependencies installed!\$"));
 
     d.cacheDir({"foo": "1.2.3"}).validate();
     d.packagesDir({"foo": "1.2.3"}).validate();
diff --git a/sdk/lib/_internal/pub/test/install/hosted/resolve_constraints_test.dart b/sdk/lib/_internal/pub/test/install/hosted/resolve_constraints_test.dart
index 522f21a..0da297a 100644
--- a/sdk/lib/_internal/pub/test/install/hosted/resolve_constraints_test.dart
+++ b/sdk/lib/_internal/pub/test/install/hosted/resolve_constraints_test.dart
@@ -22,7 +22,8 @@
 
     d.appDir([dependencyMap("foo"), dependencyMap("bar")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp("Dependencies installed!\$"));
 
     d.cacheDir({
       "foo": "1.2.3",
diff --git a/sdk/lib/_internal/pub/test/install/hosted/stay_locked_if_compatible_test.dart b/sdk/lib/_internal/pub/test/install/hosted/stay_locked_if_compatible_test.dart
index dfe1b50..7c08ab5 100644
--- a/sdk/lib/_internal/pub/test/install/hosted/stay_locked_if_compatible_test.dart
+++ b/sdk/lib/_internal/pub/test/install/hosted/stay_locked_if_compatible_test.dart
@@ -17,7 +17,8 @@
 
     d.appDir([dependencyMap("foo")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.packagesDir({"foo": "1.0.0"}).validate();
 
@@ -25,7 +26,8 @@
 
     d.appDir([dependencyMap("foo", ">=1.0.0")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.packagesDir({"foo": "1.0.0"}).validate();
   });
diff --git a/sdk/lib/_internal/pub/test/install/hosted/stay_locked_if_new_is_satisfied_test.dart b/sdk/lib/_internal/pub/test/install/hosted/stay_locked_if_new_is_satisfied_test.dart
index 1f57d92..fd2f244 100644
--- a/sdk/lib/_internal/pub/test/install/hosted/stay_locked_if_new_is_satisfied_test.dart
+++ b/sdk/lib/_internal/pub/test/install/hosted/stay_locked_if_new_is_satisfied_test.dart
@@ -21,7 +21,8 @@
 
     d.appDir([dependencyMap("foo")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.packagesDir({
       "foo": "1.0.0",
@@ -38,7 +39,8 @@
 
     d.appDir([dependencyMap("foo"), dependencyMap("newdep")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.packagesDir({
       "foo": "1.0.0",
diff --git a/sdk/lib/_internal/pub/test/install/hosted/stay_locked_test.dart b/sdk/lib/_internal/pub/test/install/hosted/stay_locked_test.dart
index 4cbafe3..188012e 100644
--- a/sdk/lib/_internal/pub/test/install/hosted/stay_locked_test.dart
+++ b/sdk/lib/_internal/pub/test/install/hosted/stay_locked_test.dart
@@ -22,7 +22,8 @@
     d.appDir([dependencyMap("foo")]).create();
 
     // This install should lock the foo dependency to version 1.0.0.
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.packagesDir({"foo": "1.0.0"}).validate();
 
@@ -33,7 +34,8 @@
     servePackages([packageMap("foo", "1.0.1")]);
 
     // This install shouldn't update the foo dependency due to the lockfile.
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.packagesDir({"foo": "1.0.0"}).validate();
   });
diff --git a/sdk/lib/_internal/pub/test/install/hosted/unlock_if_incompatible_test.dart b/sdk/lib/_internal/pub/test/install/hosted/unlock_if_incompatible_test.dart
index 348a400..082a36c 100644
--- a/sdk/lib/_internal/pub/test/install/hosted/unlock_if_incompatible_test.dart
+++ b/sdk/lib/_internal/pub/test/install/hosted/unlock_if_incompatible_test.dart
@@ -17,13 +17,17 @@
 
     d.appDir([dependencyMap("foo")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.packagesDir({"foo": "1.0.0"}).validate();
+
     servePackages([packageMap("foo", "1.0.1")]);
+
     d.appDir([dependencyMap("foo", ">1.0.0")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.packagesDir({"foo": "1.0.1"}).validate();
   });
diff --git a/sdk/lib/_internal/pub/test/install/hosted/unlock_if_new_is_unsatisfied_test.dart b/sdk/lib/_internal/pub/test/install/hosted/unlock_if_new_is_unsatisfied_test.dart
index a80bc58..44ecb89 100644
--- a/sdk/lib/_internal/pub/test/install/hosted/unlock_if_new_is_unsatisfied_test.dart
+++ b/sdk/lib/_internal/pub/test/install/hosted/unlock_if_new_is_unsatisfied_test.dart
@@ -22,7 +22,8 @@
 
     d.appDir([dependencyMap("foo")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.packagesDir({
       "foo": "1.0.0",
@@ -41,7 +42,8 @@
 
     d.appDir([dependencyMap("foo"), dependencyMap("newdep")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.packagesDir({
       "foo": "2.0.0",
diff --git a/sdk/lib/_internal/pub/test/install/path/absolute_path_test.dart b/sdk/lib/_internal/pub/test/install/path/absolute_path_test.dart
index 42b2636..9d12d16 100644
--- a/sdk/lib/_internal/pub/test/install/path/absolute_path_test.dart
+++ b/sdk/lib/_internal/pub/test/install/path/absolute_path_test.dart
@@ -26,7 +26,8 @@
       })
     ]).create();
 
-    pubInstall();
+    schedulePub(args: ["install"],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir("foo", [
diff --git a/sdk/lib/_internal/pub/test/install/path/absolute_symlink_test.dart b/sdk/lib/_internal/pub/test/install/path/absolute_symlink_test.dart
index 83724c3..4e4b196 100644
--- a/sdk/lib/_internal/pub/test/install/path/absolute_symlink_test.dart
+++ b/sdk/lib/_internal/pub/test/install/path/absolute_symlink_test.dart
@@ -26,7 +26,8 @@
       })
     ]).create();
 
-    pubInstall();
+    schedulePub(args: ["install"],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir("moved").create();
 
diff --git a/sdk/lib/_internal/pub/test/install/path/no_pubspec_test.dart b/sdk/lib/_internal/pub/test/install/path/no_pubspec_test.dart
index 61789ad..4553861 100644
--- a/sdk/lib/_internal/pub/test/install/path/no_pubspec_test.dart
+++ b/sdk/lib/_internal/pub/test/install/path/no_pubspec_test.dart
@@ -26,6 +26,8 @@
       })
     ]).create();
 
-    pubInstall(error: 'Package "foo" doesn\'t have a pubspec.yaml file.');
+    schedulePub(args: ['install'],
+        error: new RegExp('Package "foo" doesn\'t have a pubspec.yaml file.'),
+        exitCode: 1);
   });
 }
\ No newline at end of file
diff --git a/sdk/lib/_internal/pub/test/install/path/nonexistent_dir_test.dart b/sdk/lib/_internal/pub/test/install/path/nonexistent_dir_test.dart
index 3564817..053c922 100644
--- a/sdk/lib/_internal/pub/test/install/path/nonexistent_dir_test.dart
+++ b/sdk/lib/_internal/pub/test/install/path/nonexistent_dir_test.dart
@@ -24,6 +24,15 @@
       })
     ]).create();
 
-    pubInstall(error: "Could not find package 'foo' at '$badPath'.");
+    // TODO(rnystrom): The "\" in a Windows path gets treated like a regex
+    // character, so hack escape. A better fix is to use a literal string
+    // instead of a RegExp to validate, but that requires us to move the
+    // stack traces out of the stderr when we invoke pub. See also: #4706.
+    var escapePath = badPath.replaceAll(r"\", r"\\");
+
+    schedulePub(args: ['install'],
+        error:
+            new RegExp("Could not find package 'foo' at '$escapePath'."),
+        exitCode: 1);
   });
 }
\ No newline at end of file
diff --git a/sdk/lib/_internal/pub/test/install/path/path_is_file_test.dart b/sdk/lib/_internal/pub/test/install/path/path_is_file_test.dart
index dbbc0df..7779467 100644
--- a/sdk/lib/_internal/pub/test/install/path/path_is_file_test.dart
+++ b/sdk/lib/_internal/pub/test/install/path/path_is_file_test.dart
@@ -10,7 +10,7 @@
 
 main() {
   initConfig();
-  integration('path dependency when path is a file', () {
+  integration('path dependency when path is a d.file', () {
     d.dir('foo', [
       d.libDir('foo'),
       d.libPubspec('foo', '0.0.1')
@@ -28,7 +28,15 @@
       })
     ]).create();
 
-    pubInstall(error: "Path dependency for package 'foo' must refer to a "
-                      "directory, not a file. Was '$dummyPath'.");
+    // TODO(rnystrom): The "\" in a Windows path gets treated like a regex
+    // character, so hack escape. A better fix is to use a literal string
+    // instead of a RegExp to validate, but that requires us to move the
+    // stack traces out of the stderr when we invoke pub. See also: #4706.
+    var escapePath = dummyPath.replaceAll(r"\", r"\\");
+
+    schedulePub(args: ['install'],
+        error: new RegExp("Path dependency for package 'foo' must refer to a "
+                          "directory, not a file. Was '$escapePath'."),
+        exitCode: 1);
   });
 }
\ No newline at end of file
diff --git a/sdk/lib/_internal/pub/test/install/path/relative_path_test.dart b/sdk/lib/_internal/pub/test/install/path/relative_path_test.dart
index 5abaf09..b9c9c31 100644
--- a/sdk/lib/_internal/pub/test/install/path/relative_path_test.dart
+++ b/sdk/lib/_internal/pub/test/install/path/relative_path_test.dart
@@ -25,7 +25,8 @@
       })
     ]).create();
 
-    pubInstall();
+    schedulePub(args: ["install"],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir("foo", [
@@ -57,7 +58,8 @@
       })
     ]).create();
 
-    pubInstall();
+    schedulePub(args: ["install"],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir("foo", [
diff --git a/sdk/lib/_internal/pub/test/install/path/relative_symlink_test.dart b/sdk/lib/_internal/pub/test/install/path/relative_symlink_test.dart
index 97bd902..859f12c 100644
--- a/sdk/lib/_internal/pub/test/install/path/relative_symlink_test.dart
+++ b/sdk/lib/_internal/pub/test/install/path/relative_symlink_test.dart
@@ -34,7 +34,8 @@
       })
     ]).create();
 
-    pubInstall();
+    schedulePub(args: ["install"],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir("moved").create();
 
diff --git a/sdk/lib/_internal/pub/test/install/path/shared_dependency_symlink_test.dart b/sdk/lib/_internal/pub/test/install/path/shared_dependency_symlink_test.dart
index bfb26dc..d3b75da 100644
--- a/sdk/lib/_internal/pub/test/install/path/shared_dependency_symlink_test.dart
+++ b/sdk/lib/_internal/pub/test/install/path/shared_dependency_symlink_test.dart
@@ -44,7 +44,8 @@
     d.dir("link").create();
     scheduleSymlink("shared", path.join("link", "shared"));
 
-    pubInstall();
+    schedulePub(args: ["install"],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir("foo", [d.file("foo.dart", 'main() => "foo";')]),
diff --git a/sdk/lib/_internal/pub/test/install/path/shared_dependency_test.dart b/sdk/lib/_internal/pub/test/install/path/shared_dependency_test.dart
index ee8a7c3..65e7992 100644
--- a/sdk/lib/_internal/pub/test/install/path/shared_dependency_test.dart
+++ b/sdk/lib/_internal/pub/test/install/path/shared_dependency_test.dart
@@ -39,7 +39,8 @@
       })
     ]).create();
 
-    pubInstall();
+    schedulePub(args: ["install"],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir("foo", [d.file("foo.dart", 'main() => "foo";')]),
@@ -78,7 +79,8 @@
       })
     ]).create();
 
-    pubInstall();
+    schedulePub(args: ["install"],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir("foo", [d.file("foo.dart", 'main() => "foo";')]),
@@ -117,7 +119,8 @@
       })
     ]).create();
 
-    pubInstall();
+    schedulePub(args: ["install"],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir("foo", [d.file("foo.dart", 'main() => "foo";')]),
diff --git a/sdk/lib/_internal/pub/test/install/relative_symlink_test.dart b/sdk/lib/_internal/pub/test/install/relative_symlink_test.dart
index deb2254..aeb0a2a 100644
--- a/sdk/lib/_internal/pub/test/install/relative_symlink_test.dart
+++ b/sdk/lib/_internal/pub/test/install/relative_symlink_test.dart
@@ -25,7 +25,8 @@
       d.libDir('foo')
     ]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     scheduleRename(appPath, "moved");
 
@@ -45,7 +46,8 @@
       d.dir("bin")
     ]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     scheduleRename(appPath, "moved");
 
diff --git a/sdk/lib/_internal/pub/test/install/switch_source_test.dart b/sdk/lib/_internal/pub/test/install/switch_source_test.dart
index 428292e..db8864e 100644
--- a/sdk/lib/_internal/pub/test/install/switch_source_test.dart
+++ b/sdk/lib/_internal/pub/test/install/switch_source_test.dart
@@ -19,13 +19,17 @@
 
     d.appDir([{"path": "../foo"}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp("Dependencies installed!\$"));
 
     d.packagesDir({"foo": "0.0.1"}).validate();
+
     servePackages([packageMap("foo", "1.2.3")]);
+
     d.appDir([dependencyMap("foo", "any")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp("Dependencies installed!\$"));
 
     d.packagesDir({"foo": "1.2.3"}).validate();
   });
diff --git a/sdk/lib/_internal/pub/test/pub_install_and_update_test.dart b/sdk/lib/_internal/pub/test/pub_install_and_update_test.dart
index d645071..1cbd5a3 100644
--- a/sdk/lib/_internal/pub/test/pub_install_and_update_test.dart
+++ b/sdk/lib/_internal/pub/test/pub_install_and_update_test.dart
@@ -20,8 +20,7 @@
         d.dir(appPath, []).create();
 
         pubCommand(command,
-            error: new RegExp(r'^Could not find a file named "pubspec.yaml" '
-                r'in the directory .*\.$'));
+            error: new RegExp(r'^Could not find a file named "pubspec.yaml"'));
       });
 
       integration('a pubspec with a "name" key', () {
@@ -29,9 +28,9 @@
           d.pubspec({"dependencies": {"foo": null}})
         ]).create();
 
-        pubCommand(command, error:
-            'pubspec.yaml is missing the required "name" field '
-            '(e.g. "name: myapp").');
+        pubCommand(command, error: new RegExp(
+            r'^pubspec.yaml is missing the required "name" field '
+            r'\(e\.g\. "name: myapp"\)\.'));
       });
     });
 
@@ -113,7 +112,7 @@
       ]).create();
 
       pubCommand(command,
-          error: new RegExp("^Incompatible dependencies on 'baz':\n"));
+          error: new RegExp(r"^Incompatible dependencies on 'baz':"));
     });
   });
 }
diff --git a/sdk/lib/_internal/pub/test/test_pub.dart b/sdk/lib/_internal/pub/test/test_pub.dart
index c9ee7d2..50f6343 100644
--- a/sdk/lib/_internal/pub/test/test_pub.dart
+++ b/sdk/lib/_internal/pub/test/test_pub.dart
@@ -238,13 +238,15 @@
 /// Enum identifying a pub command that can be run with a well-defined success
 /// output.
 class RunCommand {
-  static final install = new RunCommand('install', 'installed');
-  static final update = new RunCommand('update', 'updated');
+  static final install = new RunCommand('install',
+      new RegExp("Dependencies installed!\$"));
+
+  static final update = new RunCommand('update',
+      new RegExp("Dependencies updated!\$"));
 
   final String name;
   final RegExp success;
-  RunCommand(this.name, String verb)
-      : success = new RegExp("Dependencies $verb!\$");
+  RunCommand(this.name, this.success);
 }
 
 /// Many tests validate behavior that is the same between pub install and
diff --git a/sdk/lib/_internal/pub/test/unknown_source_test.dart b/sdk/lib/_internal/pub/test/unknown_source_test.dart
index 511b795..6b0cde0 100644
--- a/sdk/lib/_internal/pub/test/unknown_source_test.dart
+++ b/sdk/lib/_internal/pub/test/unknown_source_test.dart
@@ -17,8 +17,8 @@
     integration('fails gracefully on a dependency from an unknown source', () {
       d.appDir([{"bad": "foo"}]).create();
 
-      pubCommand(command, error:
-          "Package 'myapp' depends on 'foo' from unknown source 'bad'.");
+      pubCommand(command, error: new RegExp(
+          "Package 'myapp' depends on 'foo' from unknown source 'bad'.\$"));
     });
 
     integration('fails gracefully on transitive dependency from an unknown '
@@ -30,8 +30,8 @@
 
       d.appDir([{"path": "../foo"}]).create();
 
-      pubCommand(command, error:
-          "Package 'foo' depends on 'bar' from unknown source 'bad'.");
+      pubCommand(command, error: new RegExp(
+          "Package 'foo' depends on 'bar' from unknown source 'bad'.\$"));
     });
 
     integration('ignores unknown source in lockfile', () {
diff --git a/sdk/lib/_internal/pub/test/update/git/do_not_update_if_unneeded_test.dart b/sdk/lib/_internal/pub/test/update/git/do_not_update_if_unneeded_test.dart
index d48899a..512b619 100644
--- a/sdk/lib/_internal/pub/test/update/git/do_not_update_if_unneeded_test.dart
+++ b/sdk/lib/_internal/pub/test/update/git/do_not_update_if_unneeded_test.dart
@@ -27,7 +27,8 @@
 
     d.appDir([{"git": "../foo.git"}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
@@ -48,7 +49,8 @@
       d.libPubspec('foo-dep', '1.0.0')
     ]).commit();
 
-    pubUpdate(args: ['foo']);
+    schedulePub(args: ['update', 'foo'],
+        output: new RegExp(r"Dependencies updated!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
diff --git a/sdk/lib/_internal/pub/test/update/git/update_locked_test.dart b/sdk/lib/_internal/pub/test/update/git/update_locked_test.dart
index c17f641..3ed68c5 100644
--- a/sdk/lib/_internal/pub/test/update/git/update_locked_test.dart
+++ b/sdk/lib/_internal/pub/test/update/git/update_locked_test.dart
@@ -26,7 +26,8 @@
 
     d.appDir([{"git": "../foo.git"}, {"git": "../bar.git"}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
@@ -47,7 +48,8 @@
       d.libPubspec('bar', '1.0.0')
     ]).commit();
 
-    pubUpdate();
+    schedulePub(args: ['update'],
+        output: new RegExp(r"Dependencies updated!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
diff --git a/sdk/lib/_internal/pub/test/update/git/update_one_locked_test.dart b/sdk/lib/_internal/pub/test/update/git/update_one_locked_test.dart
index 35370e7..976553e 100644
--- a/sdk/lib/_internal/pub/test/update/git/update_one_locked_test.dart
+++ b/sdk/lib/_internal/pub/test/update/git/update_one_locked_test.dart
@@ -26,7 +26,8 @@
 
     d.appDir([{"git": "../foo.git"}, {"git": "../bar.git"}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
@@ -47,7 +48,8 @@
       d.libPubspec('bar', '1.0.0')
     ]).commit();
 
-    pubUpdate(args: ['foo']);
+    schedulePub(args: ['update', 'foo'],
+        output: new RegExp(r"Dependencies updated!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
diff --git a/sdk/lib/_internal/pub/test/update/git/update_to_incompatible_pubspec_test.dart b/sdk/lib/_internal/pub/test/update/git/update_to_incompatible_pubspec_test.dart
index 348d6db..09123f4 100644
--- a/sdk/lib/_internal/pub/test/update/git/update_to_incompatible_pubspec_test.dart
+++ b/sdk/lib/_internal/pub/test/update/git/update_to_incompatible_pubspec_test.dart
@@ -21,7 +21,8 @@
 
     d.appDir([{"git": "../foo.git"}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
@@ -34,8 +35,10 @@
       d.libPubspec('zoo', '1.0.0')
     ]).commit();
 
-    pubUpdate(error: 'The name you specified for your dependency, '
-                     '"foo", doesn\'t match the name "zoo" in its pubspec.');
+    schedulePub(args: ['update'],
+        error: new RegExp(r'The name you specified for your dependency, '
+            r'"foo", doesn' "'" r't match the name "zoo" in its pubspec.'),
+        exitCode: 1);
 
     d.dir(packagesPath, [
       d.dir('foo', [
diff --git a/sdk/lib/_internal/pub/test/update/git/update_to_nonexistent_pubspec_test.dart b/sdk/lib/_internal/pub/test/update/git/update_to_nonexistent_pubspec_test.dart
index f746ee6..9e2e995 100644
--- a/sdk/lib/_internal/pub/test/update/git/update_to_nonexistent_pubspec_test.dart
+++ b/sdk/lib/_internal/pub/test/update/git/update_to_nonexistent_pubspec_test.dart
@@ -22,7 +22,8 @@
 
     d.appDir([{"git": "../foo.git"}]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.dir(packagesPath, [
       d.dir('foo', [
@@ -33,7 +34,10 @@
     repo.runGit(['rm', 'pubspec.yaml']);
     repo.runGit(['commit', '-m', 'delete']);
 
-    pubUpdate(error: 'Package "foo" doesn\'t have a pubspec.yaml file.');
+    schedulePub(args: ['update'],
+        error: new RegExp(r'Package "foo" doesn' "'" r't have a '
+            r'pubspec.yaml file.'),
+        exitCode: 1);
 
     d.dir(packagesPath, [
       d.dir('foo', [
diff --git a/sdk/lib/_internal/pub/test/update/hosted/unlock_dependers_test.dart b/sdk/lib/_internal/pub/test/update/hosted/unlock_dependers_test.dart
index b007e00..f1b8e4d 100644
--- a/sdk/lib/_internal/pub/test/update/hosted/unlock_dependers_test.dart
+++ b/sdk/lib/_internal/pub/test/update/hosted/unlock_dependers_test.dart
@@ -20,7 +20,8 @@
 
     d.appDir([dependencyMap("foo"), dependencyMap("bar")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.packagesDir({
       "foo": "1.0.0",
@@ -32,7 +33,8 @@
       packageMap("bar", "2.0.0")
     ]);
 
-    pubUpdate(args: ['bar']);
+    schedulePub(args: ['update', 'bar'],
+        output: new RegExp(r"Dependencies updated!$"));
 
     d.packagesDir({
       "foo": "2.0.0",
diff --git a/sdk/lib/_internal/pub/test/update/hosted/unlock_if_necessary_test.dart b/sdk/lib/_internal/pub/test/update/hosted/unlock_if_necessary_test.dart
index 3f24c78..3115942 100644
--- a/sdk/lib/_internal/pub/test/update/hosted/unlock_if_necessary_test.dart
+++ b/sdk/lib/_internal/pub/test/update/hosted/unlock_if_necessary_test.dart
@@ -20,7 +20,8 @@
 
     d.appDir([dependencyMap("foo")]).create();
 
-    pubInstall();
+    schedulePub(args: ['install'],
+        output: new RegExp(r"Dependencies installed!$"));
 
     d.packagesDir({
       "foo": "1.0.0",
@@ -32,7 +33,8 @@
       packageMap("foo-dep", "2.0.0")
     ]);
 
-    pubUpdate(args: ['foo']);
+    schedulePub(args: ['update', 'foo'],
+        output: new RegExp(r"Dependencies updated!$"));
 
     d.packagesDir({
       "foo": "2.0.0",
diff --git a/sdk/lib/_internal/pub/test/update/hosted/update_removed_constraints_test.dart b/sdk/lib/_internal/pub/test/update/hosted/update_removed_constraints_test.dart
index 3ff3efc..dc20323 100644
--- a/sdk/lib/_internal/pub/test/update/hosted/update_removed_constraints_test.dart
+++ b/sdk/lib/_internal/pub/test/update/hosted/update_removed_constraints_test.dart
@@ -21,7 +21,8 @@
 
     d.appDir([dependencyMap("foo"), dependencyMap("bar")]).create();
 
-    pubUpdate();
+    schedulePub(args: ['update'],
+        output: new RegExp(r"Dependencies updated!$"));
 
     d.packagesDir({
       "foo": "1.0.0",
@@ -31,7 +32,8 @@
 
     d.appDir([dependencyMap("foo")]).create();
 
-    pubUpdate();
+    schedulePub(args: ['update'],
+        output: new RegExp(r"Dependencies updated!$"));
 
     d.packagesDir({
       "foo": "1.0.0",
diff --git a/sdk/lib/_internal/pub/test/utils_test.dart b/sdk/lib/_internal/pub/test/utils_test.dart
index a137d2d..c1c29a8 100644
--- a/sdk/lib/_internal/pub/test/utils_test.dart
+++ b/sdk/lib/_internal/pub/test/utils_test.dart
@@ -80,12 +80,5 @@
 null: null
 true: bool"""));
     });
-
-    test('handles empty maps', () {
-      expect(yamlToString({}), equals("{}"));
-      expect(yamlToString({'a': {}, 'b': {}}), equals("""
-a: {}
-b: {}"""));
-    });
   });
 }
diff --git a/tests/language/field1_negative_test.dart b/tests/language/field1_negative_test.dart
index a860b3d..e10f754 100644
--- a/tests/language/field1_negative_test.dart
+++ b/tests/language/field1_negative_test.dart
@@ -4,6 +4,7 @@
 // Dart test to catch error reporting bugs in class fields declarations.
 // Should be an error because we have setter/getter functions and fields
 // in the class.
+// VMOptions=--compile_all
 
 class C {
   var a;
@@ -26,7 +27,6 @@
 
 class Field1NegativeTest {
   static testMain() {
-    var c = new C();
   }
 }
 
diff --git a/tests/language/field2_negative_test.dart b/tests/language/field2_negative_test.dart
index 26cb3c8..f37d307 100644
--- a/tests/language/field2_negative_test.dart
+++ b/tests/language/field2_negative_test.dart
@@ -4,6 +4,7 @@
 // Dart test to catch error reporting bugs in class fields declarations.
 // Should be an error because we have setter/getter functions and fields
 // in the class.
+// VMOptions=--compile_all
 
 class C {
   get a {
@@ -26,7 +27,6 @@
 
 class Field2NegativeTest {
   static testMain() {
-    var c = new C();
   }
 }
 
diff --git a/tests/language/field4_negative_test.dart b/tests/language/field4_negative_test.dart
index 2f00c26..426fc0f 100644
--- a/tests/language/field4_negative_test.dart
+++ b/tests/language/field4_negative_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 // Dart test to catch error reporting bugs in class fields declarations.
 // Should be an error because we have a field overriding a function name.
+// VMOptions=--compile_all
 
 class A {
   int a() {
@@ -13,7 +14,6 @@
 
 class Field4NegativeTest {
   static testMain() {
-    var a = new A();
   }
 }
 
diff --git a/tests/language/field5_negative_test.dart b/tests/language/field5_negative_test.dart
index 3ba641b..9e6da06 100644
--- a/tests/language/field5_negative_test.dart
+++ b/tests/language/field5_negative_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 // Dart test to catch error reporting bugs in class fields declarations.
 // Should be an error because we have a function overriding a field name.
+// VMOptions=--compile_all
 
 class A {
   var a;
@@ -13,7 +14,6 @@
 
 class Field5NegativeTest {
   static testMain() {
-    var a = new A();
   }
 }
 
diff --git a/tests/language/field6_negative_test.dart b/tests/language/field6_negative_test.dart
index c9a9931..d841bbd 100644
--- a/tests/language/field6_negative_test.dart
+++ b/tests/language/field6_negative_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 // Dart test to catch error reporting bugs in class fields declarations.
 // Should be an error because we have a getter overriding a function name.
+// VMOptions=--compile_all
 
 class A {
   int a() {
@@ -15,7 +16,6 @@
 
 class Field6NegativeTest {
   static testMain() {
-    var a = new A();
   }
 }
 
diff --git a/tests/language/field6a_negative_test.dart b/tests/language/field6a_negative_test.dart
index d2e540a..8d8ac44 100644
--- a/tests/language/field6a_negative_test.dart
+++ b/tests/language/field6a_negative_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 // Dart test to catch error reporting bugs in class fields declarations.
 // Should be an error because we have a function overriding a getter.
+// VMOptions=--compile_all
 
 class A {
   int get a {
@@ -15,7 +16,6 @@
 
 class Field6aNegativeTest {
   static testMain() {
-    var a = new A();
   }
 }
 
diff --git a/tests/language/interface_static_method_negative_test.dart b/tests/language/interface_static_method_negative_test.dart
index 5e8a83c..ef1925e 100644
--- a/tests/language/interface_static_method_negative_test.dart
+++ b/tests/language/interface_static_method_negative_test.dart
@@ -1,6 +1,7 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+// VMOptions=--compile_all
 
 abstract class A {
   static void foo();
@@ -9,7 +10,6 @@
 class InterfaceStaticMethodNegativeTest {
 
   static testMain() {
-    var a = new A();
   }
 }
 
diff --git a/tests/language/language.status b/tests/language/language.status
index 720297f..b61389a 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -312,6 +312,14 @@
 final_variable_assignment_test/03: Fail
 final_variable_assignment_test/04: Fail
 gc_test: Skip # Issue 1487
+field5_negative_test: Fail # Issue 10839
+field4_negative_test: Fail # Issue 10839
+field6_negative_test: Fail # Issue 10839
+non_const_super_negative_test: Fail # Issue 10839
+field2_negative_test: Fail # Issue 10839
+interface_static_method_negative_test: Fail # Issue 10839
+field1_negative_test: Fail # Issue 10839
+field6a_negative_test: Fail # Issue 10839
 
 
 [ $runtime == dartium ]
@@ -430,6 +438,8 @@
 const_var_test: Pass, Fail # Map literals take 2 type arguments.
 map_literal3_test: Fail # Map literals take 2 type arguments.
 class_cycle_negative_test: Fail, OK # Bad test: assumes eager loading.
+field1_negative_test: Fail, OK # Bad test: assumes eager loading.
+field6_negative_test: Fail, OK # Bad test: assumes eager loading.
 interface_cycle_negative_test: Fail, OK # Bad test: assumes eager loading.
 # Common problems with dart2js.  In illegal family, invalid
 # declarations are simply not parsed.  In pseudo kw dart2js
@@ -446,7 +456,13 @@
 duplicate_implements_test/02: Fail
 duplicate_implements_test/03: Fail
 duplicate_implements_test/04: Fail
+field2_negative_test: Fail
+field4_negative_test: Fail
+field5_negative_test: Fail
+field6a_negative_test: Fail
 interface_factory_constructor_negative_test: Fail
+interface_static_method_negative_test: Fail
+non_const_super_negative_test: Fail
 method_override2_test/00: Fail
 method_override2_test/02: Fail
 method_override2_test/03: Fail
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 0f8ea61..541b3c9 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -227,6 +227,8 @@
 
 class_cycle_negative_test: Fail, OK # Bad test: assumes eager loading.
 external_test/16: Fail, OK # Bad test: assumes eager loading.
+field1_negative_test: Fail, OK # Bad test: assumes eager loading.
+field6_negative_test: Fail, OK # Bad test: assumes eager loading.
 interface_cycle_negative_test: Fail, OK # Bad test: assumes eager loading.
 syntax_test/47: Fail, OK # Bad test: assumes eager loading.
 
@@ -251,15 +253,21 @@
 duplicate_implements_test/02: Fail # Negative language test.
 duplicate_implements_test/03: Fail # Negative language test.
 duplicate_implements_test/04: Fail # Negative language test.
+field2_negative_test: Fail # Negative language test.
 field3_negative_test: Fail # Negative language test.
+field4_negative_test: Fail # Negative language test.
+field5_negative_test: Fail # Negative language test.
+field6a_negative_test: Fail # Negative language test.
 final_for_in_variable_test/01: Fail # Negative language test
 instantiate_type_variable_negative_test: Pass  # For the wrong reason.
 interface_factory3_negative_test: Fail # Negative language test.
 interface_factory_constructor_negative_test: Fail # Negative language test.
+interface_static_method_negative_test: Fail # Negative language test.
 list_literal1_negative_test: Fail # Negative language test.
 list_literal2_negative_test: Fail # Negative language test.
 map_literal1_negative_test: Fail # Negative language test.
 map_literal2_negative_test: Fail # Negative language test.
+non_const_super_negative_test: Fail # Negative language test.
 number_identifier_negative_test: Fail # Negative language test.
 operator1_negative_test: Fail # Negative language test.
 prefix23_negative_test: Fail # Negative language test.
diff --git a/tests/language/non_const_super_negative_test.dart b/tests/language/non_const_super_negative_test.dart
index 32742e2..17f3d5a 100644
--- a/tests/language/non_const_super_negative_test.dart
+++ b/tests/language/non_const_super_negative_test.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.
 // Check fails because const class extends from non const class.
+// VMOptions=--compile_all
 
 class Base {
   Base() {}
@@ -14,7 +15,6 @@
 
 class NonConstSuperNegativeTest {
   static testMain() {
-    var a = new Sub();
   }
 }
 
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 7247230..10e39ba 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -4,6 +4,9 @@
 
 package/invalid_uri_test: Fail, OK # Fails intentionally
 
+[ $runtime == vm && $system == macos ]
+debugger/basic_debugger_test: Pass, Crash # Issue 10488.
+
 [ $runtime == vm && $system == windows ]
 debugger/*: Skip # Issue: 10791
 
diff --git a/tools/VERSION b/tools/VERSION
index 453bc99..2be690f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
 MAJOR 0
-MINOR 1
-BUILD 2
-PATCH 0
+MINOR 5
+BUILD 11
+PATCH 1
diff --git a/utils/pub/pub.Makefile b/utils/pub/pub.Makefile
new file mode 100644
index 0000000..c1d628d
--- /dev/null
+++ b/utils/pub/pub.Makefile
@@ -0,0 +1,6 @@
+# This file is generated by gyp; do not edit.
+
+export builddir_name ?= dart/utils/pub/out
+.PHONY: all
+all:
+	$(MAKE) -C ../.. pub
diff --git a/utils/pub/pub.target.mk b/utils/pub/pub.target.mk
new file mode 100644
index 0000000..6ddab0c
--- /dev/null
+++ b/utils/pub/pub.target.mk
@@ -0,0 +1,38 @@
+# This file is generated by gyp; do not edit.
+
+TOOLSET := target
+TARGET := pub
+### Rules for action "generate_pub_snapshot":
+quiet_cmd_dart_utils_pub_pub_gyp_pub_target_generate_pub_snapshot = ACTION dart_utils_pub_pub_gyp_pub_target_generate_pub_snapshot $@
+cmd_dart_utils_pub_pub_gyp_pub_target_generate_pub_snapshot = LD_LIBRARY_PATH=$(builddir)/lib.host:$(builddir)/lib.target:$$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd utils/pub; mkdir -p $(obj)/gen; "$(builddir)/dart" "--package-root=$(builddir)/packages/" "--generate-script-snapshot=$(obj)/gen/pub.dart.snapshot" ../../sdk/lib/_internal/pub/bin/pub.dart
+
+$(obj)/gen/pub.dart.snapshot: obj := $(abs_obj)
+$(obj)/gen/pub.dart.snapshot: builddir := $(abs_builddir)
+$(obj)/gen/pub.dart.snapshot: TOOLSET := $(TOOLSET)
+$(obj)/gen/pub.dart.snapshot: $(builddir)/dart sdk/lib/_internal/pub/bin/pub.dart sdk/lib/_internal/pub/lib/src/http.dart sdk/lib/_internal/pub/lib/src/utils.dart sdk/lib/_internal/pub/lib/src/git_source.dart sdk/lib/_internal/pub/lib/src/command_install.dart sdk/lib/_internal/pub/lib/src/exit_codes.dart sdk/lib/_internal/pub/lib/src/command.dart sdk/lib/_internal/pub/lib/src/source_registry.dart sdk/lib/_internal/pub/lib/src/pubspec.dart sdk/lib/_internal/pub/lib/src/command_help.dart sdk/lib/_internal/pub/lib/src/oauth2.dart sdk/lib/_internal/pub/lib/src/command_uploader.dart sdk/lib/_internal/pub/lib/src/error_group.dart sdk/lib/_internal/pub/lib/src/directory_tree.dart sdk/lib/_internal/pub/lib/src/sdk.dart sdk/lib/_internal/pub/lib/src/hosted_source.dart sdk/lib/_internal/pub/lib/src/version.dart sdk/lib/_internal/pub/lib/src/git.dart sdk/lib/_internal/pub/lib/src/io.dart sdk/lib/_internal/pub/lib/src/system_cache.dart sdk/lib/_internal/pub/lib/src/safe_http_server.dart sdk/lib/_internal/pub/lib/src/command_update.dart sdk/lib/_internal/pub/lib/src/command_version.dart sdk/lib/_internal/pub/lib/src/validator.dart sdk/lib/_internal/pub/lib/src/command_cache.dart sdk/lib/_internal/pub/lib/src/source.dart sdk/lib/_internal/pub/lib/src/command_lish.dart sdk/lib/_internal/pub/lib/src/package.dart sdk/lib/_internal/pub/lib/src/log.dart sdk/lib/_internal/pub/lib/src/entrypoint.dart sdk/lib/_internal/pub/lib/src/lock_file.dart sdk/lib/_internal/pub/lib/src/path_source.dart sdk/lib/_internal/pub/lib/src/validator/name.dart sdk/lib/_internal/pub/lib/src/validator/size.dart sdk/lib/_internal/pub/lib/src/validator/pubspec_field.dart sdk/lib/_internal/pub/lib/src/validator/compiled_dartdoc.dart sdk/lib/_internal/pub/lib/src/validator/directory.dart sdk/lib/_internal/pub/lib/src/validator/utf8_readme.dart sdk/lib/_internal/pub/lib/src/validator/dependency.dart sdk/lib/_internal/pub/lib/src/validator/license.dart sdk/lib/_internal/pub/lib/src/validator/lib.dart sdk/lib/_internal/pub/lib/src/solver/version_solver.dart sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart sdk/lib/_internal/pub/test/command_line_config.dart sdk/lib/_internal/pub/test/version_test.dart sdk/lib/_internal/pub/test/io_test.dart sdk/lib/_internal/pub/test/pub_cache_test.dart sdk/lib/_internal/pub/test/test_pub.dart sdk/lib/_internal/pub/test/lock_file_test.dart sdk/lib/_internal/pub/test/real_version_test.dart sdk/lib/_internal/pub/test/directory_tree_test.dart sdk/lib/_internal/pub/test/dev_dependency_test.dart sdk/lib/_internal/pub/test/pubspec_test.dart sdk/lib/_internal/pub/test/pub_test.dart sdk/lib/_internal/pub/test/version_solver_test.dart sdk/lib/_internal/pub/test/descriptor.dart sdk/lib/_internal/pub/test/error_group_test.dart sdk/lib/_internal/pub/test/pub_uploader_test.dart sdk/lib/_internal/pub/test/lish/cloud_storage_upload_doesnt_redirect_test.dart sdk/lib/_internal/pub/test/lish/cloud_storage_upload_provides_an_error_test.dart sdk/lib/_internal/pub/test/lish/upload_form_provides_an_error_test.dart sdk/lib/_internal/pub/test/lish/utils.dart sdk/lib/_internal/pub/test/lish/package_creation_provides_a_malformed_error_test.dart sdk/lib/_internal/pub/test/lish/package_validation_has_a_warning_and_is_canceled_test.dart sdk/lib/_internal/pub/test/lish/force_cannot_be_combined_with_dry_run_test.dart sdk/lib/_internal/pub/test/lish/upload_form_fields_is_not_a_map_test.dart sdk/lib/_internal/pub/test/lish/package_creation_provides_invalid_json_test.dart sdk/lib/_internal/pub/test/lish/package_creation_provides_a_malformed_success_test.dart sdk/lib/_internal/pub/test/lish/package_creation_provides_an_error_test.dart sdk/lib/_internal/pub/test/lish/upload_form_is_missing_url_test.dart sdk/lib/_internal/pub/test/lish/force_does_not_publish_if_there_are_errors_test.dart sdk/lib/_internal/pub/test/lish/upload_form_is_missing_fields_test.dart sdk/lib/_internal/pub/test/lish/package_validation_has_an_error_test.dart sdk/lib/_internal/pub/test/lish/preview_package_validation_has_a_warning_test.dart sdk/lib/_internal/pub/test/lish/package_validation_has_a_warning_and_continues_test.dart sdk/lib/_internal/pub/test/lish/force_publishes_if_tests_are_no_warnings_or_errors_test.dart sdk/lib/_internal/pub/test/lish/preview_package_validation_has_no_warnings_test.dart sdk/lib/_internal/pub/test/lish/archives_and_uploads_a_package_test.dart sdk/lib/_internal/pub/test/lish/upload_form_url_is_not_a_string_test.dart sdk/lib/_internal/pub/test/lish/force_publishes_if_there_are_warnings_test.dart sdk/lib/_internal/pub/test/lish/upload_form_fields_has_a_non_string_value_test.dart sdk/lib/_internal/pub/test/lish/upload_form_provides_invalid_json_test.dart sdk/lib/_internal/pub/test/update/pub_update_test.dart sdk/lib/_internal/pub/test/update/git/do_not_update_if_unneeded_test.dart sdk/lib/_internal/pub/test/update/git/update_to_incompatible_pubspec_test.dart sdk/lib/_internal/pub/test/update/git/update_to_nonexistent_pubspec_test.dart sdk/lib/_internal/pub/test/update/git/update_locked_test.dart sdk/lib/_internal/pub/test/update/git/update_one_locked_test.dart sdk/lib/_internal/pub/test/update/hosted/fail_gracefully_on_missing_package_test.dart sdk/lib/_internal/pub/test/update/hosted/unlock_dependers_test.dart sdk/lib/_internal/pub/test/update/hosted/unlock_if_necessary_test.dart sdk/lib/_internal/pub/test/update/hosted/fail_gracefully_on_url_resolve_test.dart sdk/lib/_internal/pub/test/update/hosted/remove_removed_transitive_dependency_test.dart sdk/lib/_internal/pub/test/update/hosted/update_removed_constraints_test.dart sdk/lib/_internal/pub/test/update/hosted/remove_removed_dependency_test.dart sdk/lib/_internal/pub/test/validator/license_test.dart sdk/lib/_internal/pub/test/validator/utils.dart sdk/lib/_internal/pub/test/validator/pubspec_field_test.dart sdk/lib/_internal/pub/test/validator/dependency_test.dart sdk/lib/_internal/pub/test/validator/directory_test.dart sdk/lib/_internal/pub/test/validator/name_test.dart sdk/lib/_internal/pub/test/validator/lib_test.dart sdk/lib/_internal/pub/test/validator/size_test.dart sdk/lib/_internal/pub/test/validator/utf8_readme_test.dart sdk/lib/_internal/pub/test/validator/compiled_dartdoc_test.dart sdk/lib/_internal/pub/test/oauth2/utils.dart sdk/lib/_internal/pub/test/oauth2/with_server_rejected_credentials_authenticates_again_test.dart sdk/lib/_internal/pub/test/oauth2/with_a_server_rejected_refresh_token_authenticates_again_test.dart sdk/lib/_internal/pub/test/oauth2/with_no_credentials_authenticates_and_saves_credentials_test.dart sdk/lib/_internal/pub/test/oauth2/with_an_expired_credentials_refreshes_and_saves_test.dart sdk/lib/_internal/pub/test/oauth2/with_a_pre_existing_credentials_does_not_authenticate_test.dart sdk/lib/_internal/pub/test/oauth2/with_an_expired_credentials_without_a_refresh_token_authenticates_again_test.dart sdk/lib/_internal/pub/test/oauth2/with_a_malformed_credentials_authenticates_again_test.dart sdk/lib/_internal/pub/test/descriptor/tar.dart sdk/lib/_internal/pub/test/descriptor/git.dart sdk/lib/_internal/pub/test/install/pub_install_test.dart sdk/lib/_internal/pub/test/install/relative_symlink_test.dart sdk/lib/_internal/pub/test/install/broken_symlink_test.dart sdk/lib/_internal/pub/test/install/switch_source_test.dart sdk/lib/_internal/pub/test/install/git/check_out_transitive_test.dart sdk/lib/_internal/pub/test/install/git/unlock_if_incompatible_test.dart sdk/lib/_internal/pub/test/install/git/require_pubspec_test.dart sdk/lib/_internal/pub/test/install/git/check_out_with_trailing_slash_test.dart sdk/lib/_internal/pub/test/install/git/dependency_name_match_pubspec_test.dart sdk/lib/_internal/pub/test/install/git/check_out_branch_test.dart sdk/lib/_internal/pub/test/install/git/stay_locked_if_compatible_test.dart sdk/lib/_internal/pub/test/install/git/check_out_and_update_test.dart sdk/lib/_internal/pub/test/install/git/check_out_twice_test.dart sdk/lib/_internal/pub/test/install/git/check_out_test.dart sdk/lib/_internal/pub/test/install/git/lock_version_test.dart sdk/lib/_internal/pub/test/install/git/require_pubspec_name_test.dart sdk/lib/_internal/pub/test/install/git/check_out_revision_test.dart sdk/lib/_internal/pub/test/install/git/different_repo_name_test.dart sdk/lib/_internal/pub/test/install/hosted/unlock_if_incompatible_test.dart sdk/lib/_internal/pub/test/install/hosted/fail_gracefully_on_missing_package_test.dart sdk/lib/_internal/pub/test/install/hosted/do_not_update_on_removed_constraints_test.dart sdk/lib/_internal/pub/test/install/hosted/stay_locked_test.dart sdk/lib/_internal/pub/test/install/hosted/install_test.dart sdk/lib/_internal/pub/test/install/hosted/stay_locked_if_compatible_test.dart sdk/lib/_internal/pub/test/install/hosted/install_transitive_test.dart sdk/lib/_internal/pub/test/install/hosted/fail_gracefully_on_url_resolve_test.dart sdk/lib/_internal/pub/test/install/hosted/remove_removed_transitive_dependency_test.dart sdk/lib/_internal/pub/test/install/hosted/unlock_if_new_is_unsatisfied_test.dart sdk/lib/_internal/pub/test/install/hosted/stay_locked_if_new_is_satisfied_test.dart sdk/lib/_internal/pub/test/install/hosted/remove_removed_dependency_test.dart sdk/lib/_internal/pub/test/install/hosted/cached_pubspec_test.dart sdk/lib/_internal/pub/test/install/hosted/resolve_constraints_test.dart sdk/lib/_internal/pub/test/install/hosted/repair_cache_test.dart sdk/lib/_internal/pub/test/install/path/nonexistent_dir_test.dart sdk/lib/_internal/pub/test/install/path/absolute_path_test.dart sdk/lib/_internal/pub/test/install/path/relative_symlink_test.dart sdk/lib/_internal/pub/test/install/path/shared_dependency_test.dart sdk/lib/_internal/pub/test/install/path/shared_dependency_symlink_test.dart sdk/lib/_internal/pub/test/install/path/absolute_symlink_test.dart sdk/lib/_internal/pub/test/install/path/no_pubspec_test.dart sdk/lib/_internal/pub/test/install/path/relative_path_test.dart sdk/lib/_internal/pub/test/install/path/path_is_file_test.dart sdk/lib/_internal/libraries.dart sdk/lib/_internal/compiler/compiler.dart sdk/lib/_internal/compiler/implementation/dart_types.dart sdk/lib/_internal/compiler/implementation/string_validator.dart sdk/lib/_internal/compiler/implementation/world.dart sdk/lib/_internal/compiler/implementation/typechecker.dart sdk/lib/_internal/compiler/implementation/filenames.dart sdk/lib/_internal/compiler/implementation/dart2js.dart sdk/lib/_internal/compiler/implementation/patch_parser.dart sdk/lib/_internal/compiler/implementation/constants.dart sdk/lib/_internal/compiler/implementation/script.dart sdk/lib/_internal/compiler/implementation/library_loader.dart sdk/lib/_internal/compiler/implementation/enqueue.dart sdk/lib/_internal/compiler/implementation/compiler.dart sdk/lib/_internal/compiler/implementation/diagnostic_listener.dart sdk/lib/_internal/compiler/implementation/warnings.dart sdk/lib/_internal/compiler/implementation/source_file_provider.dart sdk/lib/_internal/compiler/implementation/tree_validator.dart sdk/lib/_internal/compiler/implementation/apiimpl.dart sdk/lib/_internal/compiler/implementation/native_handler.dart sdk/lib/_internal/compiler/implementation/constant_system_dart.dart sdk/lib/_internal/compiler/implementation/dart2jslib.dart sdk/lib/_internal/compiler/implementation/compile_time_constants.dart sdk/lib/_internal/compiler/implementation/closure.dart sdk/lib/_internal/compiler/implementation/code_buffer.dart sdk/lib/_internal/compiler/implementation/source_file.dart sdk/lib/_internal/compiler/implementation/deferred_load.dart sdk/lib/_internal/compiler/implementation/resolved_visitor.dart sdk/lib/_internal/compiler/implementation/colors.dart sdk/lib/_internal/compiler/implementation/source_map_builder.dart sdk/lib/_internal/compiler/implementation/constant_system.dart sdk/lib/_internal/compiler/implementation/util/characters.dart sdk/lib/_internal/compiler/implementation/util/util.dart sdk/lib/_internal/compiler/implementation/util/uri_extras.dart sdk/lib/_internal/compiler/implementation/util/link_implementation.dart sdk/lib/_internal/compiler/implementation/util/link.dart sdk/lib/_internal/compiler/implementation/util/util_implementation.dart sdk/lib/_internal/compiler/implementation/tools/mini_parser.dart sdk/lib/_internal/compiler/implementation/dart_backend/utils.dart sdk/lib/_internal/compiler/implementation/dart_backend/dart_backend.dart sdk/lib/_internal/compiler/implementation/dart_backend/emitter.dart sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart sdk/lib/_internal/compiler/implementation/dart_backend/renamer.dart sdk/lib/_internal/compiler/implementation/js_backend/minify_namer.dart sdk/lib/_internal/compiler/implementation/js_backend/namer.dart sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart sdk/lib/_internal/compiler/implementation/js_backend/runtime_types.dart sdk/lib/_internal/compiler/implementation/js_backend/constant_system_javascript.dart sdk/lib/_internal/compiler/implementation/js_backend/emitter_no_eval.dart sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart sdk/lib/_internal/compiler/implementation/js_backend/backend.dart sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart sdk/lib/_internal/compiler/implementation/js_backend/constant_emitter.dart sdk/lib/_internal/compiler/implementation/lib/string_helper.dart sdk/lib/_internal/compiler/implementation/lib/collection_patch.dart sdk/lib/_internal/compiler/implementation/lib/js_rti.dart sdk/lib/_internal/compiler/implementation/lib/core_patch.dart sdk/lib/_internal/compiler/implementation/lib/js_array.dart sdk/lib/_internal/compiler/implementation/lib/mirrors_patch.dart sdk/lib/_internal/compiler/implementation/lib/isolate_patch.dart sdk/lib/_internal/compiler/implementation/lib/async_patch.dart sdk/lib/_internal/compiler/implementation/lib/collection_dev_patch.dart sdk/lib/_internal/compiler/implementation/lib/js_helper.dart sdk/lib/_internal/compiler/implementation/lib/scalarlist_patch.dart sdk/lib/_internal/compiler/implementation/lib/native_helper.dart sdk/lib/_internal/compiler/implementation/lib/io_patch.dart sdk/lib/_internal/compiler/implementation/lib/js_number.dart sdk/lib/_internal/compiler/implementation/lib/regexp_helper.dart sdk/lib/_internal/compiler/implementation/lib/isolate_helper.dart sdk/lib/_internal/compiler/implementation/lib/constant_map.dart sdk/lib/_internal/compiler/implementation/lib/typed_data_patch.dart sdk/lib/_internal/compiler/implementation/lib/math_patch.dart sdk/lib/_internal/compiler/implementation/lib/js_string.dart sdk/lib/_internal/compiler/implementation/lib/json_patch.dart sdk/lib/_internal/compiler/implementation/lib/foreign_helper.dart sdk/lib/_internal/compiler/implementation/lib/interceptors.dart sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart sdk/lib/_internal/compiler/implementation/mirrors/util.dart sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart sdk/lib/_internal/compiler/implementation/resolution/scope.dart sdk/lib/_internal/compiler/implementation/resolution/resolution.dart sdk/lib/_internal/compiler/implementation/resolution/secret_tree_element.dart sdk/lib/_internal/compiler/implementation/resolution/members.dart sdk/lib/_internal/compiler/implementation/ssa/ssa.dart sdk/lib/_internal/compiler/implementation/ssa/bailout.dart sdk/lib/_internal/compiler/implementation/ssa/codegen.dart sdk/lib/_internal/compiler/implementation/ssa/types.dart sdk/lib/_internal/compiler/implementation/ssa/validate.dart sdk/lib/_internal/compiler/implementation/ssa/invoke_dynamic_specializers.dart sdk/lib/_internal/compiler/implementation/ssa/optimize.dart sdk/lib/_internal/compiler/implementation/ssa/types_propagation.dart sdk/lib/_internal/compiler/implementation/ssa/codegen_helpers.dart sdk/lib/_internal/compiler/implementation/ssa/nodes.dart sdk/lib/_internal/compiler/implementation/ssa/value_set.dart sdk/lib/_internal/compiler/implementation/ssa/builder.dart sdk/lib/_internal/compiler/implementation/ssa/tracer.dart sdk/lib/_internal/compiler/implementation/ssa/variable_allocator.dart sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart sdk/lib/_internal/compiler/implementation/js/precedence.dart sdk/lib/_internal/compiler/implementation/js/nodes.dart sdk/lib/_internal/compiler/implementation/js/builder.dart sdk/lib/_internal/compiler/implementation/js/printer.dart sdk/lib/_internal/compiler/implementation/js/js.dart sdk/lib/_internal/compiler/implementation/types/types.dart sdk/lib/_internal/compiler/implementation/types/type_mask.dart sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart sdk/lib/_internal/compiler/implementation/types/simple_types_inferrer.dart sdk/lib/_internal/compiler/implementation/elements/elements.dart sdk/lib/_internal/compiler/implementation/elements/modelx.dart sdk/lib/_internal/compiler/implementation/universe/selector_map.dart sdk/lib/_internal/compiler/implementation/universe/universe.dart sdk/lib/_internal/compiler/implementation/universe/function_set.dart sdk/lib/_internal/compiler/implementation/universe/full_function_set.dart sdk/lib/_internal/compiler/implementation/scanner/byte_array_scanner.dart sdk/lib/_internal/compiler/implementation/scanner/byte_strings.dart sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart sdk/lib/_internal/compiler/implementation/scanner/scanner_implementation.dart sdk/lib/_internal/compiler/implementation/scanner/listener.dart sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart sdk/lib/_internal/compiler/implementation/scanner/parser_task.dart sdk/lib/_internal/compiler/implementation/scanner/scanner.dart sdk/lib/_internal/compiler/implementation/scanner/keyword.dart sdk/lib/_internal/compiler/implementation/scanner/scanner_task.dart sdk/lib/_internal/compiler/implementation/scanner/partial_parser.dart sdk/lib/_internal/compiler/implementation/scanner/token.dart sdk/lib/_internal/compiler/implementation/scanner/parser.dart sdk/lib/_internal/compiler/implementation/scanner/array_based_scanner.dart sdk/lib/_internal/compiler/implementation/scanner/string_scanner.dart sdk/lib/_internal/compiler/implementation/tree/visitors.dart sdk/lib/_internal/compiler/implementation/tree/prettyprint.dart sdk/lib/_internal/compiler/implementation/tree/unparser.dart sdk/lib/_internal/compiler/implementation/tree/tree.dart sdk/lib/_internal/compiler/implementation/tree/nodes.dart sdk/lib/_internal/compiler/implementation/tree/dartstring.dart sdk/lib/_internal/compiler/samples/leap/leap_leg.dart sdk/lib/_internal/compiler/samples/leap/request_cache.dart sdk/lib/_internal/compiler/samples/leap/leap_script.dart sdk/lib/_internal/compiler/samples/leap/leap_server.dart sdk/lib/_internal/compiler/samples/leap/leap.dart pkg/intl/lib/number_symbols.dart pkg/intl/lib/intl.dart pkg/intl/lib/number_format.dart pkg/intl/lib/date_format.dart pkg/intl/lib/number_symbols_data.dart pkg/intl/lib/date_symbol_data_http_request.dart pkg/intl/lib/intl_browser.dart pkg/intl/lib/bidi_utils.dart pkg/intl/lib/date_symbol_data_local.dart pkg/intl/lib/date_time_patterns.dart pkg/intl/lib/message_lookup_by_library.dart pkg/intl/lib/date_symbol_data_file.dart pkg/intl/lib/extract_messages.dart pkg/intl/lib/generate_localized.dart pkg/intl/lib/bidi_formatter.dart pkg/intl/lib/date_symbols.dart pkg/intl/lib/intl_standalone.dart pkg/intl/lib/src/date_format_helpers.dart pkg/intl/lib/src/http_request_data_reader.dart pkg/intl/lib/src/file_data_reader.dart pkg/intl/lib/src/date_format_internal.dart pkg/intl/lib/src/intl_message.dart pkg/intl/lib/src/intl_helpers.dart pkg/intl/lib/src/date_format_field.dart pkg/intl/lib/src/lazy_locale_data.dart pkg/intl/lib/src/data/dates/localeList.dart pkg/intl/test/date_time_format_local_odd_test.dart pkg/intl/test/data_directory.dart pkg/intl/test/date_time_format_local_even_test.dart pkg/intl/test/intl_message_basic_example_test.dart pkg/intl/test/number_test_data.dart pkg/intl/test/bidi_utils_test.dart pkg/intl/test/date_time_format_test_data.dart pkg/intl/test/number_closure_test.dart pkg/intl/test/date_time_format_file_even_test.dart pkg/intl/test/number_format_test.dart pkg/intl/test/intl_test.dart pkg/intl/test/find_default_locale_standalone_test.dart pkg/intl/test/date_time_format_test_core.dart pkg/intl/test/date_time_format_http_request_test.dart pkg/intl/test/date_time_format_uninitialized_test.dart pkg/intl/test/date_time_format_test_stub.dart pkg/intl/test/find_default_locale_browser_test.dart pkg/intl/test/bidi_format_test.dart pkg/intl/test/date_time_format_file_odd_test.dart pkg/intl/test/message_extraction/generate_from_json.dart pkg/intl/test/message_extraction/sample_with_messages.dart pkg/intl/test/message_extraction/make_hardcoded_translation.dart pkg/intl/test/message_extraction/part_of_sample_with_messages.dart pkg/intl/test/message_extraction/extract_to_json.dart pkg/intl/test/message_extraction/message_extraction_test.dart pkg/intl/tool/generate_locale_data_files.dart pkg/intl/example/basic/basic_example_runner.dart pkg/intl/example/basic/basic_example.dart pkg/intl/example/basic/messages_de.dart pkg/intl/example/basic/messages_all.dart pkg/intl/example/basic/messages_th_th.dart pkg/serialization/lib/serialization.dart pkg/serialization/lib/src/format.dart pkg/serialization/lib/src/serialization_rule.dart pkg/serialization/lib/src/serialization_helpers.dart pkg/serialization/lib/src/mirrors_helpers.dart pkg/serialization/lib/src/basic_rule.dart pkg/serialization/lib/src/reader_writer.dart pkg/serialization/test/serialization_test.dart pkg/serialization/test/test_models.dart pkg/serialization/test/polyfill_identity_map_test.dart pkg/serialization/test/no_library_test.dart pkg/analyzer_experimental/bin/analyzer.dart pkg/analyzer_experimental/lib/options.dart pkg/analyzer_experimental/lib/analyzer.dart pkg/analyzer_experimental/lib/src/generated/constant.dart pkg/analyzer_experimental/lib/src/generated/utilities_dart.dart pkg/analyzer_experimental/lib/src/generated/instrumentation.dart pkg/analyzer_experimental/lib/src/generated/source_io.dart pkg/analyzer_experimental/lib/src/generated/ast.dart pkg/analyzer_experimental/lib/src/generated/sdk.dart pkg/analyzer_experimental/lib/src/generated/element.dart pkg/analyzer_experimental/lib/src/generated/engine.dart pkg/analyzer_experimental/lib/src/generated/scanner.dart pkg/analyzer_experimental/lib/src/generated/java_core.dart pkg/analyzer_experimental/lib/src/generated/java_engine.dart pkg/analyzer_experimental/lib/src/generated/java_io.dart pkg/analyzer_experimental/lib/src/generated/parser.dart pkg/analyzer_experimental/lib/src/generated/java_junit.dart pkg/analyzer_experimental/lib/src/generated/sdk_io.dart pkg/analyzer_experimental/lib/src/generated/html.dart pkg/analyzer_experimental/lib/src/generated/java_engine_io.dart pkg/analyzer_experimental/lib/src/generated/error.dart pkg/analyzer_experimental/lib/src/generated/source.dart pkg/analyzer_experimental/lib/src/generated/resolver.dart pkg/analyzer_experimental/test/options_test.dart pkg/analyzer_experimental/test/generated/resolver_test.dart pkg/analyzer_experimental/test/generated/scanner_test.dart pkg/analyzer_experimental/test/generated/element_test.dart pkg/analyzer_experimental/test/generated/ast_test.dart pkg/analyzer_experimental/test/generated/test_support.dart pkg/analyzer_experimental/test/generated/parser_test.dart pkg/analyzer_experimental/example/scanner_driver.dart pkg/analyzer_experimental/example/resolver_driver.dart pkg/analyzer_experimental/example/parser_driver.dart pkg/webdriver/lib/webdriver.dart pkg/webdriver/lib/src/base64decoder.dart pkg/webdriver/test/webdriver_test.dart pkg/fixnum/lib/fixnum.dart pkg/fixnum/lib/src/int64.dart pkg/fixnum/lib/src/intx.dart pkg/fixnum/lib/src/int32.dart pkg/fixnum/test/int_32_test.dart pkg/fixnum/test/int_64_vm_test.dart pkg/fixnum/test/int_64_test.dart pkg/pathos/lib/path.dart pkg/pathos/test/pathos_test.dart pkg/pathos/test/pathos_windows_test.dart pkg/pathos/test/pathos_posix_test.dart pkg/meta/lib/meta.dart pkg/oauth2/lib/oauth2.dart pkg/oauth2/lib/src/utils.dart pkg/oauth2/lib/src/expiration_exception.dart pkg/oauth2/lib/src/credentials.dart pkg/oauth2/lib/src/authorization_exception.dart pkg/oauth2/lib/src/authorization_code_grant.dart pkg/oauth2/lib/src/handle_access_token_response.dart pkg/oauth2/lib/src/client.dart pkg/oauth2/test/utils.dart pkg/oauth2/test/handle_access_token_response_test.dart pkg/oauth2/test/authorization_code_grant_test.dart pkg/oauth2/test/client_test.dart pkg/oauth2/test/utils_test.dart pkg/oauth2/test/credentials_test.dart pkg/http/lib/http.dart pkg/http/lib/testing.dart pkg/http/lib/src/io_client.dart pkg/http/lib/src/utils.dart pkg/http/lib/src/base_request.dart pkg/http/lib/src/streamed_response.dart pkg/http/lib/src/byte_stream.dart pkg/http/lib/src/base_client.dart pkg/http/lib/src/streamed_request.dart pkg/http/lib/src/base_response.dart pkg/http/lib/src/mock_client.dart pkg/http/lib/src/response.dart pkg/http/lib/src/request.dart pkg/http/lib/src/client.dart pkg/http/lib/src/multipart_file.dart pkg/http/lib/src/multipart_request.dart pkg/http/test/mock_client_test.dart pkg/http/test/utils.dart pkg/http/test/streamed_request_test.dart pkg/http/test/multipart_test.dart pkg/http/test/client_test.dart pkg/http/test/http_test.dart pkg/http/test/request_test.dart pkg/http/test/response_test.dart pkg/http/test/safe_http_server.dart pkg/expect/lib/expect.dart pkg/logging/lib/logging.dart pkg/logging/test/logging_test.dart pkg/stack_trace/lib/stack_trace.dart pkg/stack_trace/lib/src/utils.dart pkg/stack_trace/lib/src/trace.dart pkg/stack_trace/lib/src/frame.dart pkg/stack_trace/test/frame_test.dart pkg/stack_trace/test/trace_test.dart pkg/yaml/lib/yaml.dart pkg/yaml/lib/src/composer.dart pkg/yaml/lib/src/utils.dart pkg/yaml/lib/src/yaml_exception.dart pkg/yaml/lib/src/deep_equals.dart pkg/yaml/lib/src/visitor.dart pkg/yaml/lib/src/yaml_map.dart pkg/yaml/lib/src/parser.dart pkg/yaml/lib/src/model.dart pkg/yaml/lib/src/constructor.dart pkg/yaml/test/yaml_test.dart pkg/scheduled_test/lib/scheduled_test.dart pkg/scheduled_test/lib/scheduled_process.dart pkg/scheduled_test/lib/scheduled_server.dart pkg/scheduled_test/lib/descriptor.dart pkg/scheduled_test/lib/src/utils.dart pkg/scheduled_test/lib/src/schedule_error.dart pkg/scheduled_test/lib/src/task.dart pkg/scheduled_test/lib/src/substitute_future.dart pkg/scheduled_test/lib/src/scheduled_future_matchers.dart pkg/scheduled_test/lib/src/value_future.dart pkg/scheduled_test/lib/src/mock_clock.dart pkg/scheduled_test/lib/src/future_group.dart pkg/scheduled_test/lib/src/schedule.dart pkg/scheduled_test/lib/src/scheduled_server/handler.dart pkg/scheduled_test/lib/src/scheduled_server/safe_http_server.dart pkg/scheduled_test/lib/src/descriptor/directory_descriptor.dart pkg/scheduled_test/lib/src/descriptor/async_descriptor.dart pkg/scheduled_test/lib/src/descriptor/nothing_descriptor.dart pkg/scheduled_test/lib/src/descriptor/descriptor.dart pkg/scheduled_test/lib/src/descriptor/file_descriptor.dart pkg/scheduled_test/lib/src/descriptor/pattern_descriptor.dart pkg/scheduled_test/test/utils.dart pkg/scheduled_test/test/substitute_future_test.dart pkg/scheduled_test/test/scheduled_server_test.dart pkg/scheduled_test/test/scheduled_future_matchers_test.dart pkg/scheduled_test/test/metatest.dart pkg/scheduled_test/test/value_future_test.dart pkg/scheduled_test/test/scheduled_process_test.dart pkg/scheduled_test/test/descriptor/utils.dart pkg/scheduled_test/test/descriptor/file_test.dart pkg/scheduled_test/test/descriptor/nothing_test.dart pkg/scheduled_test/test/descriptor/pattern_test.dart pkg/scheduled_test/test/descriptor/directory_test.dart pkg/scheduled_test/test/descriptor/async_test.dart pkg/scheduled_test/test/scheduled_test/current_schedule_state_test.dart pkg/scheduled_test/test/scheduled_test/current_schedule_current_task_test.dart pkg/scheduled_test/test/scheduled_test/nested_task_test.dart pkg/scheduled_test/test/scheduled_test/on_exception_test.dart pkg/scheduled_test/test/scheduled_test/task_return_value_test.dart pkg/scheduled_test/test/scheduled_test/abort_test.dart pkg/scheduled_test/test/scheduled_test/timeout_test.dart pkg/scheduled_test/test/scheduled_test/out_of_band_task_test.dart pkg/scheduled_test/test/scheduled_test/wrap_async_test.dart pkg/scheduled_test/test/scheduled_test/capture_stack_traces_test.dart pkg/scheduled_test/test/scheduled_test/wrap_future_test.dart pkg/scheduled_test/test/scheduled_test/signal_error_test.dart pkg/scheduled_test/test/scheduled_test/set_up_test.dart pkg/scheduled_test/test/scheduled_test/on_complete_test.dart pkg/scheduled_test/test/scheduled_test/simple_test.dart pkg/scheduled_test/test/scheduled_test/current_schedule_errors_test.dart pkg/unittest/lib/unittest.dart pkg/unittest/lib/html_individual_config.dart pkg/unittest/lib/vm_config.dart pkg/unittest/lib/html_enhanced_config.dart pkg/unittest/lib/matcher.dart pkg/unittest/lib/interactive_html_config.dart pkg/unittest/lib/mock.dart pkg/unittest/lib/html_config.dart pkg/unittest/lib/compact_vm_config.dart pkg/unittest/lib/src/expect.dart pkg/unittest/lib/src/basematcher.dart pkg/unittest/lib/src/string_matchers.dart pkg/unittest/lib/src/core_matchers.dart pkg/unittest/lib/src/interfaces.dart pkg/unittest/lib/src/description.dart pkg/unittest/lib/src/future_matchers.dart pkg/unittest/lib/src/numeric_matchers.dart pkg/unittest/lib/src/iterable_matchers.dart pkg/unittest/lib/src/map_matchers.dart pkg/unittest/lib/src/config.dart pkg/unittest/lib/src/test_case.dart pkg/unittest/lib/src/operator_matchers.dart pkg/unittest/test/mock_regexp_negative_test.dart pkg/unittest/test/matchers_test.dart pkg/unittest/test/unittest_test.dart pkg/unittest/test/test_utils.dart pkg/unittest/test/instance_test.dart pkg/unittest/test/mock_test.dart pkg/unittest/test/mock_stepwise_negative_test.dart pkg/args/lib/args.dart pkg/args/lib/src/parser.dart pkg/args/lib/src/usage.dart pkg/args/test/args_test.dart pkg/args/test/usage_test.dart pkg/args/test/command_test.dart pkg/args/test/parse_test.dart pkg/args/example/test_runner.dart pkg/source_maps/lib/span.dart pkg/source_maps/lib/source_maps.dart pkg/source_maps/lib/parser.dart pkg/source_maps/lib/builder.dart pkg/source_maps/lib/printer.dart pkg/source_maps/lib/src/utils.dart pkg/source_maps/lib/src/vlq.dart pkg/source_maps/test/vlq_test.dart pkg/source_maps/test/run.dart pkg/source_maps/test/builder_test.dart pkg/source_maps/test/utils_test.dart pkg/source_maps/test/common.dart pkg/source_maps/test/parser_test.dart pkg/source_maps/test/printer_test.dart pkg/source_maps/test/span_test.dart pkg/source_maps/test/end2end_test.dart FORCE_DO_CMD
+	$(call do_cmd,dart_utils_pub_pub_gyp_pub_target_generate_pub_snapshot)
+
+all_deps += $(obj)/gen/pub.dart.snapshot
+action_dart_utils_pub_pub_gyp_pub_target_generate_pub_snapshot_outputs := $(obj)/gen/pub.dart.snapshot
+
+
+### Rules for final target.
+# Build our special outputs first.
+$(obj).target/utils/pub/pub.stamp: | $(action_dart_utils_pub_pub_gyp_pub_target_generate_pub_snapshot_outputs)
+
+# Preserve order dependency of special output on deps.
+$(action_dart_utils_pub_pub_gyp_pub_target_generate_pub_snapshot_outputs): | $(builddir)/dart $(obj).target/pkg/pkg_packages.stamp
+
+$(obj).target/utils/pub/pub.stamp: TOOLSET := $(TOOLSET)
+$(obj).target/utils/pub/pub.stamp: $(builddir)/dart $(obj).target/pkg/pkg_packages.stamp FORCE_DO_CMD
+	$(call do_cmd,touch)
+
+all_deps += $(obj).target/utils/pub/pub.stamp
+# Add target alias
+.PHONY: pub
+pub: $(obj).target/utils/pub/pub.stamp
+
+# Add target alias to "all" target.
+.PHONY: all
+all: pub
+
diff --git a/utils/pub/solver/greedy_solver.dart b/utils/pub/solver/greedy_solver.dart
new file mode 100644
index 0000000..e664ea2
--- /dev/null
+++ b/utils/pub/solver/greedy_solver.dart
@@ -0,0 +1,556 @@
+// Copyright (c) 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.
+
+/// Attempts to resolve a set of version constraints for a package dependency
+/// graph and select an appropriate set of best specific versions for all
+/// dependent packages. It works iteratively and tries to reach a stable
+/// solution where the constraints of all dependencies are met. If it fails to
+/// reach a solution after a certain number of iterations, it assumes the
+/// dependency graph is unstable and reports and error.
+///
+/// There are two fundamental operations in the process of iterating over the
+/// graph:
+///
+/// 1.  Changing the selected concrete version of some package. (This includes
+///     adding and removing a package too, which is considering changing the
+///     version to or from "none".) In other words, a node has changed.
+/// 2.  Changing the version constraint that one package places on another. In
+///     other words, and edge has changed.
+///
+/// Both of these events have a corresponding (potentional) async operation and
+/// roughly cycle back and forth between each other. When we change the version
+/// of package changes, we asynchronously load the pubspec for the new version.
+/// When that's done, we compare the dependencies of the new version versus the
+/// old one. For everything that differs, we change those constraints between
+/// this package and that dependency.
+///
+/// When a constraint on a package changes, we re-calculate the overall
+/// constraint on that package. I.e. with a shared dependency, we intersect all
+/// of the constraints that its depending packages place on it. If that overall
+/// constraint changes (say from "<3.0.0" to "<2.5.0"), then the currently
+/// picked version for that package may fall outside of the new constraint. If
+/// that happens, we find the new best version that meets the updated constraint
+/// and then the change the package to use that version. That cycles back up to
+/// the beginning again.
+library version_solver1;
+
+import 'dart:async';
+import 'dart:collection' show Queue;
+import 'dart:math' as math;
+
+import '../lock_file.dart';
+import '../log.dart' as log;
+import '../package.dart';
+import '../source.dart';
+import '../source_registry.dart';
+import '../version.dart';
+import 'version_solver.dart';
+
+class GreedyVersionSolver extends VersionSolver {
+  final _packages = <String, DependencyNode>{};
+  final _work = new Queue<WorkItem>();
+  int _numIterations = 0;
+
+  GreedyVersionSolver(SourceRegistry sources, Package root, LockFile lockFile,
+                      List<String> useLatest)
+      : super(sources, root, lockFile, useLatest);
+
+  /// The non-backtracking solver always only tries one solution.
+  int get attemptedSolutions => 1;
+
+  void forceLatestVersion(String package) {
+    // TODO(nweiz): How do we want to detect and handle unknown dependencies
+    // here?
+    getDependency(package).useLatestVersion = true;
+  }
+
+  Future<List<PackageId>> runSolver() {
+    // Kick off the work by adding the root package at its concrete version to
+    // the dependency graph.
+    enqueue(new AddConstraint('(entrypoint)', new PackageRef.root(root)));
+
+    Future processNextWorkItem(_) {
+      while (true) {
+        // Stop if we are done.
+        if (_work.isEmpty) return new Future.value(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
+        // only take a certain number of steps to solve a graph with a given
+        // number of connections.
+        // TODO(rnystrom): These numbers here are magic and arbitrary. Tune
+        // when we have a better picture of real-world package topologies.
+        _numIterations++;
+        if (_numIterations > math.max(50, _packages.length * 5)) {
+          throw new CouldNotSolveException();
+        }
+
+        // Run the first work item.
+        var future = _work.removeFirst().process(this);
+
+        // If we have an async operation to perform, chain the loop to resume
+        // when it's done. Otherwise, just loop synchronously.
+        if (future != null) {
+          return future.then(processNextWorkItem);
+        }
+      }
+    }
+
+    return processNextWorkItem(null);
+  }
+
+  void enqueue(WorkItem work) {
+    _work.add(work);
+  }
+
+  DependencyNode getDependency(String package) {
+    // There can be unused dependencies in the graph, so just create an empty
+    // one if needed.
+    _packages.putIfAbsent(package, () => new DependencyNode(package));
+    return _packages[package];
+  }
+
+  /// Sets the best selected version of [package] to [version].
+  void setVersion(String package, Version version) {
+    _packages[package].version = version;
+  }
+
+  /// Returns the most recent version of [dependency] that satisfies all of its
+  /// version constraints.
+  Future<Version> getBestVersion(DependencyNode dependency) {
+    return cache.getVersions(dependency.name,
+        dependency.source, dependency.description).then((versions) {
+      var best = null;
+      for (var ref in versions) {
+        if (dependency.useLatestVersion ||
+            dependency.constraint.allows(ref.version)) {
+          if (best == null || ref.version > best) best = ref.version;
+        }
+      }
+
+      // TODO(rnystrom): Better exception.
+      if (best == null) {
+        if (tryUnlockDepender(dependency)) return null;
+        throw new NoVersionException(dependency.name, dependency.constraint,
+            dependency.toList());
+      } else if (!dependency.constraint.allows(best)) {
+        if (tryUnlockDepender(dependency)) return null;
+        throw new CouldNotUpdateException(
+            dependency.name, dependency.constraint, best);
+      }
+
+      return best;
+    });
+  }
+
+  /// Looks for a package that depends (transitively) on [dependency] and has
+  /// its version locked in the lockfile. If one is found, enqueues an
+  /// [UnlockPackage] work item for it and returns true. Otherwise, returns
+  /// false.
+  ///
+  /// This does a breadth-first search; immediate dependers will be unlocked
+  /// first, followed by transitive dependers.
+  bool tryUnlockDepender(DependencyNode dependency, [Set<String> seen]) {
+    if (seen == null) seen = new Set();
+    // Avoid an infinite loop if there are circular dependencies.
+    if (seen.contains(dependency.name)) return false;
+    seen.add(dependency.name);
+
+    for (var dependerName in dependency.dependers) {
+      var depender = getDependency(dependerName);
+      var locked = lockFile.packages[dependerName];
+      if (locked != null && depender.version == locked.version &&
+          depender.source.name == locked.source.name) {
+        enqueue(new UnlockPackage(depender));
+        return true;
+      }
+    }
+
+    return dependency.dependers.map(getDependency).any((subdependency) =>
+        tryUnlockDepender(subdependency, seen));
+  }
+
+  List<PackageId> buildResults() {
+    return _packages.values
+        .where((dep) => dep.isDependedOn)
+        .map(_dependencyToPackageId)
+        .toList();
+  }
+
+  PackageId _dependencyToPackageId(DependencyNode dep) {
+    var description = dep.description;
+
+    // If the lockfile contains a fully-resolved description for the package,
+    // use that. This allows e.g. Git to ensure that the same commit is used.
+    var lockedPackage = lockFile.packages[dep.name];
+    if (lockedPackage != null && lockedPackage.version == dep.version &&
+        lockedPackage.source.name == dep.source.name &&
+        dep.source.descriptionsEqual(
+            description, lockedPackage.description)) {
+      description = lockedPackage.description;
+    }
+
+    return new PackageId(dep.name, dep.source, dep.version, description);
+  }
+}
+
+/// The constraint solver works by iteratively processing a queue of work items.
+/// Each item is a single atomic change to the dependency graph. Handling them
+/// in a queue lets us handle asynchrony (resolving versions requires
+/// information from servers) as well as avoid deeply nested recursion.
+abstract class WorkItem {
+  /// Processes this work item. Returns a future that completes when the work is
+  /// done. If `null` is returned, that means the work has completed
+  /// synchronously and the next item can be started immediately.
+  Future process(GreedyVersionSolver solver);
+}
+
+/// The best selected version for a package has changed to [version]. If the
+/// previous version of the package is `null`, that means the package is being
+/// added to the graph. If [version] is `null`, it is being removed.
+class ChangeVersion implements WorkItem {
+  /// The name of the package whose version is being changed.
+  final String package;
+
+  /// The source of the package whose version is changing.
+  final Source source;
+
+  /// The description identifying the package whose version is changing.
+  final description;
+
+  /// The new selected version.
+  final Version version;
+
+  ChangeVersion(this.package, this.source, this.description, this.version);
+
+  Future process(GreedyVersionSolver solver) {
+    log.fine("Changing $package to version $version.");
+
+    var dependency = solver.getDependency(package);
+    var oldVersion = dependency.version;
+    solver.setVersion(package, version);
+
+    // The dependencies between the old and new version may be different. Walk
+    // them both and update any constraints that differ between the two.
+    return Future.wait([
+        getDependencyRefs(solver, oldVersion),
+        getDependencyRefs(solver, version)]).then((list) {
+      var oldDependencyRefs = list[0];
+      var newDependencyRefs = list[1];
+
+      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.
+          var newRef = newDependencyRefs.remove(oldRef.name);
+          solver.enqueue(new AddConstraint(package, newRef));
+        } else {
+          // The dependency is not in the new version of the package, so just
+          // remove its constraint.
+          solver.enqueue(new RemoveConstraint(package, oldRef.name));
+        }
+      }
+
+      // Everything that's left is a depdendency that's only in the new
+      // version of the package.
+      for (var newRef in newDependencyRefs.values) {
+        solver.enqueue(new AddConstraint(package, newRef));
+      }
+    });
+  }
+
+  /// Get the dependencies at [version] of the package being changed.
+  Future<Map<String, PackageRef>> getDependencyRefs(VersionSolver solver,
+      Version version) {
+    // If there is no version, it means no package, so no dependencies.
+    if (version == null) {
+      return new Future<Map<String, PackageRef>>.value(<String, PackageRef>{});
+    }
+
+    var id = new PackageId(package, source, version, description);
+    return solver.cache.getPubspec(id).then((pubspec) {
+      var dependencies = <String, PackageRef>{};
+      for (var dependency in pubspec.dependencies) {
+        dependencies[dependency.name] = dependency;
+      }
+
+      // Include dev dependencies only from the root package.
+      if (id.isRoot) {
+        for (var dependency in pubspec.devDependencies) {
+          dependencies[dependency.name] = dependency;
+        }
+      }
+
+      return dependencies;
+    });
+  }
+}
+
+/// A constraint that a depending package places on a dependent package has
+/// changed.
+///
+/// This is an abstract class that contains logic for updating the dependency
+/// graph once a dependency has changed. Changing the dependency is the
+/// responsibility of subclasses.
+abstract class ChangeConstraint implements WorkItem {
+  Future process(GreedyVersionSolver solver);
+
+  void undo(GreedyVersionSolver solver);
+
+  Future _processChange(GreedyVersionSolver solver,
+                        DependencyNode oldDependency,
+                        DependencyNode newDependency) {
+    var name = newDependency.name;
+    var source = oldDependency.source != null ?
+      oldDependency.source : newDependency.source;
+    var description = oldDependency.description != null ?
+      oldDependency.description : newDependency.description;
+    var oldConstraint = oldDependency.constraint;
+    var newConstraint = newDependency.constraint;
+
+    // If the package is over-constrained, i.e. the packages depending have
+    // disjoint constraints, then try unlocking a depender that's locked by the
+    // lockfile. If there are no remaining locked dependencies, throw an error.
+    if (newConstraint != null && newConstraint.isEmpty) {
+      if (solver.tryUnlockDepender(newDependency)) {
+        undo(solver);
+        return null;
+      }
+
+      throw new DisjointConstraintException(name, newDependency.toList());
+    }
+
+    // If this constraint change didn't cause the overall constraint on the
+    // package to change, then we don't need to do any further work.
+    if (oldConstraint == newConstraint) return null;
+
+    // If the dependency has been cut free from the graph, just remove it.
+    if (!newDependency.isDependedOn) {
+      solver.enqueue(new ChangeVersion(name, source, description, null));
+      return null;
+    }
+
+    // If the dependency is on the root package, then we don't need to do
+    // anything since it's already at the best version.
+    if (name == solver.root.name) {
+      solver.enqueue(new ChangeVersion(
+          name, source, description, solver.root.version));
+      return null;
+    }
+
+    // If the dependency is on a package in the lockfile, use the lockfile's
+    // version for that package if it's valid given the other constraints.
+    var lockedPackage = solver.lockFile.packages[name];
+    if (lockedPackage != null && newDependency.source == lockedPackage.source) {
+      var lockedVersion = lockedPackage.version;
+      if (newConstraint.allows(lockedVersion)) {
+        solver.enqueue(
+            new ChangeVersion(name, source, description, lockedVersion));
+        return null;
+      }
+    }
+
+    // The constraint has changed, so see what the best version of the package
+    // that meets the new constraint is.
+    return solver.getBestVersion(newDependency).then((best) {
+      if (best == null) {
+        undo(solver);
+      } else if (newDependency.version != best) {
+        solver.enqueue(new ChangeVersion(name, source, description, best));
+      }
+    });
+  }
+}
+
+/// The constraint given by [ref] is being placed by [depender].
+class AddConstraint extends ChangeConstraint {
+  /// The package that has the dependency.
+  final String depender;
+
+  /// The package being depended on and the constraints being placed on it. The
+  /// source, version, and description in this ref are all considered
+  /// constraints on the dependent package.
+  final PackageRef ref;
+
+  AddConstraint(this.depender, this.ref);
+
+  Future process(GreedyVersionSolver solver) {
+    log.fine("Adding $depender's constraint $ref.");
+
+    var dependency = solver.getDependency(ref.name);
+    var oldDependency = dependency.clone();
+    dependency.placeConstraint(depender, ref);
+    return _processChange(solver, oldDependency, dependency);
+  }
+
+  void undo(GreedyVersionSolver solver) {
+    solver.getDependency(ref.name).removeConstraint(depender);
+  }
+}
+
+/// [depender] is no longer placing a constraint on [dependent].
+class RemoveConstraint extends ChangeConstraint {
+  /// The package that was placing a constraint on [dependent].
+  String depender;
+
+  /// The package that was being depended on.
+  String dependent;
+
+  /// The constraint that was removed.
+  PackageRef _removed;
+
+  RemoveConstraint(this.depender, this.dependent);
+
+  Future process(GreedyVersionSolver solver) {
+    log.fine("Removing $depender's constraint ($_removed) on $dependent.");
+
+    var dependency = solver.getDependency(dependent);
+    var oldDependency = dependency.clone();
+    _removed = dependency.removeConstraint(depender);
+    return _processChange(solver, oldDependency, dependency);
+  }
+
+  void undo(GreedyVersionSolver solver) {
+    solver.getDependency(dependent).placeConstraint(depender, _removed);
+  }
+}
+
+/// [package]'s version is no longer constrained by the lockfile.
+class UnlockPackage implements WorkItem {
+  /// The package being unlocked.
+  DependencyNode package;
+
+  UnlockPackage(this.package);
+
+  Future process(GreedyVersionSolver solver) {
+    log.fine("Unlocking ${package.name}.");
+
+    solver.lockFile.packages.remove(package.name);
+    return solver.getBestVersion(package).then((best) {
+      if (best == null) return null;
+      solver.enqueue(new ChangeVersion(
+          package.name, package.source, package.description, best));
+    });
+  }
+}
+
+/// Describes one [Package] in the [DependencyGraph] and keeps track of which
+/// packages depend on it and what constraints they place on it.
+class DependencyNode {
+  /// The name of the this dependency's package.
+  final String name;
+
+  /// The [PackageRefs] that represent constraints that depending packages have
+  /// placed on this one.
+  final Map<String, PackageRef> _refs;
+
+  /// The currently-selected best version for this dependency.
+  Version version;
+
+  /// Whether this dependency should always select the latest version.
+  bool useLatestVersion = false;
+
+  /// Gets whether or not any other packages are currently depending on this
+  /// one. If `false`, then it means this package is not part of the dependency
+  /// graph and should be omitted.
+  bool get isDependedOn => !_refs.isEmpty;
+
+  /// The names of all the packages that depend on this dependency.
+  Iterable<String> get dependers => _refs.keys;
+
+  /// Gets the overall constraint that all packages are placing on this one.
+  /// If no packages have a constraint on this one (which can happen when this
+  /// package is in the process of being added to the graph), returns `null`.
+  VersionConstraint get constraint {
+    if (_refs.isEmpty) return null;
+    return new VersionConstraint.intersection(
+        _refs.values.map((ref) => ref.constraint));
+  }
+
+  /// The source of this dependency's package.
+  Source get source {
+     var canonical = _canonicalRef();
+     if (canonical == null) return null;
+     return canonical.source;
+  }
+
+  /// The description of this dependency's package.
+  get description {
+     var canonical = _canonicalRef();
+     if (canonical == null) return null;
+     return canonical.description;
+  }
+
+  /// Return the PackageRef that has the canonical source and description for
+  /// this package. If any dependency is on the root package, 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.values;
+    for (var ref in refs) {
+      if (ref.isRoot) return ref;
+    }
+    return refs.first;
+  }
+
+  DependencyNode(this.name)
+      : _refs = <String, PackageRef>{};
+
+  DependencyNode._clone(DependencyNode other)
+      : name = other.name,
+        version = other.version,
+        _refs = new Map<String, PackageRef>.from(other._refs);
+
+  /// Creates a copy of this dependency.
+  DependencyNode clone() => new DependencyNode._clone(this);
+
+  /// Places [ref] as a constraint from [package] onto this.
+  void placeConstraint(String package, PackageRef ref) {
+    var requiredDepender = _requiredDepender();
+    if (requiredDepender != null) {
+      var required = _refs[requiredDepender];
+      if (required.source.name != ref.source.name) {
+        throw new SourceMismatchException(name, [
+            new Dependency(requiredDepender, required),
+            new Dependency(package, ref)]);
+      } else if (!required.descriptionEquals(ref)) {
+        throw new DescriptionMismatchException(name, [
+            new Dependency(requiredDepender, required),
+            new Dependency(package, ref)]);
+      }
+    }
+
+    _refs[package] = ref;
+  }
+
+  /// Returns the name of a package whose constraint source and description
+  /// all other constraints must match. Returns null if there are no
+  /// requirements on new constraints.
+  String _requiredDepender() {
+    if (_refs.isEmpty) return null;
+
+    var dependers = _refs.keys.toList();
+    if (dependers.length == 1) {
+      var depender = dependers[0];
+      if (_refs[depender].isRoot) return null;
+      return depender;
+    }
+
+    return dependers[1];
+  }
+
+  /// Removes the constraint from [package] onto this.
+  PackageRef removeConstraint(String package) => _refs.remove(package);
+
+  /// Converts this to a list of [Dependency] objects like the error types
+  /// expect.
+  List<Dependency> toList() {
+    var result = <Dependency>[];
+    _refs.forEach((name, ref) {
+      result.add(new Dependency(name, ref));
+    });
+    return result;
+  }
+}
