Version 1.4.0-dev.2.1

svn merge -c 35000 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 35003 https://dart.googlecode.com/svn/branches/bleeding_edge trunk

git-svn-id: http://dart.googlecode.com/svn/trunk@35020 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
index cfd3a2f..9721322 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
@@ -948,6 +948,13 @@
     int cmp1 = isConstantInlinedOrAlreadyEmitted(a) ? 0 : 1;
     int cmp2 = isConstantInlinedOrAlreadyEmitted(b) ? 0 : 1;
     if (cmp1 + cmp2 < 2) return cmp1 - cmp2;
+
+    // Emit constant interceptors first. Constant intercpetors for primitives
+    // might be used by code that builds other constants.  See Issue 19183.
+    if (a.isInterceptor != b.isInterceptor) {
+      return a.isInterceptor ? -1 : 1;
+    }
+
     // Sorting by the long name clusters constants with the same constructor
     // which compresses a tiny bit better.
     int r = namer.constantLongName(a).compareTo(namer.constantLongName(b));
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 461eff2..83bc9ea 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -180,8 +180,6 @@
 
 [ $compiler == dart2js && $checked ]
 convert/utf85_test: Pass, Slow # Issue 12029.
-mirrors/metadata_nested_constructor_call_test/none: RuntimeError # Issue 17187
-mirrors/metadata_scope_test/none: RuntimeError # Issue 17187
 
 [ $compiler == dart2js ]
 convert/chunked_conversion_utf88_test: Slow, Pass
diff --git a/tools/VERSION b/tools/VERSION
index ed7cccc..b28a2c6 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 4
 PATCH 0
 PRERELEASE 2
-PRERELEASE_PATCH 0
+PRERELEASE_PATCH 1