Version 1.1.3 (stable)

svn merge -c 32031 https://dart.googlecode.com/svn/branches/bleeding_edge 1.1
svn merge -c 32046 https://dart.googlecode.com/svn/branches/bleeding_edge 1.1
svn merge -c 32070 https://dart.googlecode.com/svn/branches/bleeding_edge 1.1
svn merge -c 32102 https://dart.googlecode.com/svn/branches/bleeding_edge 1.1

R=whesse@google.com

Review URL: https://codereview.chromium.org//143153006

git-svn-id: http://dart.googlecode.com/svn/branches/1.1@32314 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/runtime/bin/builtin.dart b/runtime/bin/builtin.dart
index 51e6dce..99e80ca 100644
--- a/runtime/bin/builtin.dart
+++ b/runtime/bin/builtin.dart
@@ -216,14 +216,18 @@
     // Relative URIs with scheme dart-ext should be resolved as if with no
     // scheme.
     resolved = baseUri.resolve(uri.path);
-    var path = resolved.path;
     if (resolved.scheme == 'package') {
       // If we are resolving relative to a package URI we go directly to the
       // file path and keep the dart-ext scheme. Otherwise, we will lose the
       // package URI path part.
-      path = _filePathFromPackageUri(resolved);
+      var path = _filePathFromPackageUri(resolved);
+      if (path.startsWith('http:')) {
+        throw "Native extensions not supported in "
+            "packages loaded over http: %path";
+      }
+      resolved = new Uri.file(path);
     }
-    resolved = new Uri(scheme: 'dart-ext', path: path);
+    resolved = new Uri(scheme: 'dart-ext', path: resolved.path);
   } else {
     resolved = baseUri.resolve(userString);
   }
@@ -244,7 +248,9 @@
       return uri.toFilePath();
       break;
     case 'dart-ext':
-      return new Uri(scheme: 'file',
+      // Relative file URIs don't start with file:///.
+      var scheme = (uri.path.startsWith('/') ? 'file' : '');
+      return new Uri(scheme: scheme,
                      host: uri.host,
                      path: uri.path).toFilePath();
       break;
diff --git a/runtime/vm/gc_marker.cc b/runtime/vm/gc_marker.cc
index 4a9eabd..074619d 100644
--- a/runtime/vm/gc_marker.cc
+++ b/runtime/vm/gc_marker.cc
@@ -6,6 +6,7 @@
 
 #include <map>
 #include <utility>
+#include <vector>
 
 #include "vm/allocation.h"
 #include "vm/dart_api_state.h"
@@ -192,10 +193,14 @@
       std::pair<DelaySet::iterator, DelaySet::iterator> ret;
       // Visit all elements with a key equal to raw_obj.
       ret = delay_set_.equal_range(raw_obj);
-      for (DelaySet::iterator it = ret.first; it != ret.second; ++it) {
+      // Create a copy of the range in a temporary vector to iterate over it
+      // while delay_set_ may be modified.
+      std::vector<DelaySetEntry> temp_copy(ret.first, ret.second);
+      delay_set_.erase(ret.first, ret.second);
+      for (std::vector<DelaySetEntry>::iterator it = temp_copy.begin();
+           it != temp_copy.end(); ++it) {
         it->second->VisitPointers(this);
       }
-      delay_set_.erase(ret.first, ret.second);
       raw_obj->ClearWatchedBit();
     }
     marking_stack_->Push(raw_obj);
@@ -261,6 +266,7 @@
   MarkingStack* marking_stack_;
   RawObject* visiting_old_object_;
   typedef std::multimap<RawObject*, RawWeakProperty*> DelaySet;
+  typedef std::pair<RawObject*, RawWeakProperty*> DelaySetEntry;
   DelaySet delay_set_;
   const bool visit_function_code_;
   GrowableArray<RawFunction*> skipped_code_functions_;
diff --git a/sdk/lib/core/uri.dart b/sdk/lib/core/uri.dart
index d2e2a7a..41130ad 100644
--- a/sdk/lib/core/uri.dart
+++ b/sdk/lib/core/uri.dart
@@ -390,9 +390,9 @@
     segments.skip(firstSegment).forEach((segment) {
       if (segment.contains(new RegExp(r'["*/:<>?\\|]'))) {
         if (argumentError) {
-          throw new ArgumentError("Illegal character in path}");
+          throw new ArgumentError("Illegal character in path");
         } else {
-          throw new UnsupportedError("Illegal character in path}");
+          throw new UnsupportedError("Illegal character in path");
         }
       }
     });
diff --git a/tools/VERSION b/tools/VERSION
index d0a7398..0e21058 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -26,6 +26,6 @@
 CHANNEL stable
 MAJOR 1
 MINOR 1
-PATCH 2
+PATCH 3
 PRERELEASE 0
 PRERELEASE_PATCH 0