Version 1.4.0-dev.6.2

svn merge -c 35885 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 35889 https://dart.googlecode.com/svn/branches/bleeding_edge trunk

git-svn-id: http://dart.googlecode.com/svn/trunk@35890 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/sdk/bin/dartanalyzer b/sdk/bin/dartanalyzer
index ffcaef5..cc49a5c 100755
--- a/sdk/bin/dartanalyzer
+++ b/sdk/bin/dartanalyzer
@@ -20,9 +20,12 @@
 
 # Handle the case where dart-sdk/bin has been symlinked to.
 BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
+SDK_DIR="$(cd "${BIN_DIR}/.." ; pwd -P)"
+
+SDK_ARG="--dart-sdk=$SDK_DIR"
 
 SNAPSHOT="$BIN_DIR/snapshots/dartanalyzer.dart.snapshot"
 
 # We are running the snapshot in the built SDK.
 DART="$BIN_DIR/dart"
-exec "$DART" "$SNAPSHOT" "$@"
+exec "$DART" "$SNAPSHOT" "$SDK_ARG" "$@"
diff --git a/sdk/bin/dartanalyzer.bat b/sdk/bin/dartanalyzer.bat
index ba7989f..bca4afb 100644
--- a/sdk/bin/dartanalyzer.bat
+++ b/sdk/bin/dartanalyzer.bat
@@ -14,7 +14,15 @@
 set DART=%BIN_DIR%\dart
 set SNAPSHOT=%BIN_DIR%\snapshots\dartanalyzer.dart.snapshot
 
-"%DART%" "%SNAPSHOT%" %*
+rem Get absolute full name for SDK_DIR.
+for %%i in ("%BIN_DIR%\..\") do set SDK_DIR=%%~fi
+
+rem Remove trailing backslash if there is one
+if %SDK_DIR:~-1%==\ set SDK_DIR=%SDK_DIR:~0,-1%
+
+set SDK_ARG=--dart-sdk=%SDK_DIR%
+
+"%DART%" "%SNAPSHOT%" "%SDK_ARG%" %*
 
 endlocal
 
diff --git a/sdk/lib/collection/splay_tree.dart b/sdk/lib/collection/splay_tree.dart
index 4674f8c..8e2f593 100644
--- a/sdk/lib/collection/splay_tree.dart
+++ b/sdk/lib/collection/splay_tree.dart
@@ -523,6 +523,7 @@
   _SplayTreeIterator.startAt(_SplayTree tree, var startKey)
       : _tree = tree,
         _modificationCount = tree._modificationCount {
+    if (tree._root == null) return;
     int compare = tree._splay(startKey);
     _splayCount = tree._splayCount;
     if (compare < 0) {
diff --git a/tests/corelib/splay_tree_test.dart b/tests/corelib/splay_tree_test.dart
index ee3083d..2557b54 100644
--- a/tests/corelib/splay_tree_test.dart
+++ b/tests/corelib/splay_tree_test.dart
@@ -51,6 +51,7 @@
   Expect.equals(7, tree.firstKeyAfter(6));
 
   regressRemoveWhere();
+  regressRemoveWhere2();
 }
 
 void regressRemoveWhere() {
@@ -65,3 +66,16 @@
     return x.isOdd;
   });
 }
+
+void regressRemoveWhere2() {
+  // Regression test for http://dartbug.com/18676
+  // Removing all elements with removeWhere causes error.
+
+  var t = new SplayTreeSet();
+  t.addAll([1,2,3,4,5]);
+  t.removeWhere((_) => true);  // Should not throw.
+  Expect.isTrue(t.isEmpty);
+  t.addAll([1,2,3,4,5]);
+  t.retainWhere((_) => false);  // Should not throw.
+  Expect.isTrue(t.isEmpty);
+}
diff --git a/tools/VERSION b/tools/VERSION
index d960607..6374033 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 4
 PATCH 0
 PRERELEASE 6
-PRERELEASE_PATCH 1
+PRERELEASE_PATCH 2