| Index: sdk/lib/_internal/lib/isolate_patch.dart
 | 
| diff --git a/sdk/lib/_internal/lib/isolate_patch.dart b/sdk/lib/_internal/lib/isolate_patch.dart
 | 
| index 4e6982ae430082ac93dbca7bab7d55b89829bcea..057e571d71664e3d2f9e0ddde4d828f5d1a77e76 100644
 | 
| --- a/sdk/lib/_internal/lib/isolate_patch.dart
 | 
| +++ b/sdk/lib/_internal/lib/isolate_patch.dart
 | 
| @@ -10,56 +10,41 @@ import 'dart:_isolate_helper' show IsolateNatives,
 | 
|                                     CloseToken,
 | 
|                                     JsIsolateSink;
 | 
|  
 | 
| -patch class _Isolate {
 | 
| -  patch static ReceivePort get port {
 | 
| -    if (lazyPort == null) {
 | 
| -      lazyPort = new ReceivePort();
 | 
| -    }
 | 
| -    return lazyPort;
 | 
| +patch class Isolate {
 | 
| +  patch static Future<Isolate> spawn(void entryPoint(message), var message) {
 | 
| +    SendPort controlPort = IsolateNatives.spawnFunction(entryPoint, message);
 | 
| +    return new Future<Isolate>.value(new Isolate._fromControlPort(controlPort));
 | 
|    }
 | 
|  
 | 
| -  patch static SendPort spawnFunction(void topLevelFunction(),
 | 
| -      [bool unhandledExceptionCallback(IsolateUnhandledException e)]) {
 | 
| -    if (unhandledExceptionCallback != null) {
 | 
| -      // TODO(9012): Implement the UnhandledExceptionCallback.
 | 
| -      throw new UnimplementedError(
 | 
| -          "spawnFunction with unhandledExceptionCallback");
 | 
| +  patch static Future<Isolate> spawnUri(
 | 
| +      Uri uri, List<String> args, var message) {
 | 
| +    if (args is List<String>) {
 | 
| +      for (int i = 0; i < args.length; i++) {
 | 
| +        if (args[i] is! String) {
 | 
| +          throw new ArgumentError("Args must be a list of Strings $args");
 | 
| +        }
 | 
| +      }
 | 
| +    } else if (args != null) {
 | 
| +      throw new ArgumentError("Args must be a list of Strings $args");
 | 
|      }
 | 
| -    return IsolateNatives.spawnFunction(topLevelFunction);
 | 
| -  }
 | 
| -
 | 
| -  patch static SendPort spawnUri(String uri) {
 | 
| -    return IsolateNatives.spawn(null, uri, false);
 | 
| +    SendPort controlPort = IsolateNatives.spawnUri(uri, args, message);
 | 
| +    return new Future<Isolate>.value(new Isolate._fromControlPort(controlPort));
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -patch bool _isCloseToken(var object) {
 | 
| -  return identical(object, const CloseToken());
 | 
| -}
 | 
| -
 | 
|  /** Default factory for receive ports. */
 | 
|  patch class ReceivePort {
 | 
|    patch factory ReceivePort() {
 | 
|      return new ReceivePortImpl();
 | 
|    }
 | 
| -}
 | 
| -
 | 
| -patch class MessageBox {
 | 
| -  patch MessageBox.oneShot() : this._oneShot(new ReceivePort());
 | 
| -  MessageBox._oneShot(ReceivePort receivePort)
 | 
| -      : stream = new IsolateStream._fromOriginalReceivePortOneShot(receivePort),
 | 
| -        sink = new JsIsolateSink.fromPort(receivePort.toSendPort());
 | 
|  
 | 
| -  patch MessageBox() : this._(new ReceivePort());
 | 
| -  MessageBox._(ReceivePort receivePort)
 | 
| -      : stream = new IsolateStream._fromOriginalReceivePort(receivePort),
 | 
| -        sink = new JsIsolateSink.fromPort(receivePort.toSendPort());
 | 
| +  patch factory ReceivePort.fromRawReceivePort(RawReceivePort rawPort) {
 | 
| +    throw new UnimplementedError("ReceivePort.fromRawReceivePort");
 | 
| +  }
 | 
|  }
 | 
|  
 | 
| -patch IsolateSink streamSpawnFunction(
 | 
| -    void topLevelFunction(),
 | 
| -    [bool unhandledExceptionCallback(IsolateUnhandledException e)]) {
 | 
| -  SendPort sendPort = spawnFunction(topLevelFunction,
 | 
| -                                    unhandledExceptionCallback);
 | 
| -  return new JsIsolateSink.fromPort(sendPort);
 | 
| +patch class RawReceivePort {
 | 
| +  patch factory RawReceivePort([void handler(event)]) {
 | 
| +    throw new UnimplementedError("RawReceivePort");
 | 
| +  }
 | 
|  }
 | 
| 
 |