| Index: runtime/bin/process.dart | 
| diff --git a/runtime/bin/process.dart b/runtime/bin/process.dart | 
| index 351465847f6efada58150c04bd14f73ae7b73d22..01d27a9456c4bb59c9492a6c042d90b11145555f 100644 | 
| --- a/runtime/bin/process.dart | 
| +++ b/runtime/bin/process.dart | 
| @@ -3,46 +3,47 @@ | 
| // BSD-style license that can be found in the LICENSE file. | 
|  | 
| /** | 
| - * [Process] objects are used to start new processes and interact with | 
| - * them. | 
| + * [Process] is used to start new processes using the static | 
| + * [start] and [run] methods. | 
| */ | 
| -interface Process default _Process { | 
| +class Process { | 
| /** | 
| -   * Creates a new process object and starts a process running the | 
| -   * [executable] with the specified [arguments]. When the process has | 
| -   * been successfully started [onStart] is called. If the process | 
| -   * fails to start [onError] is called. | 
| +   * Starts a process running the [executable] with the specified | 
| +   * [arguments]. Returns a [Process] instance that can be used to | 
| +   * interact with the process. | 
| * | 
| * An optional [ProcessOptions] object can be passed to specify | 
| * options other than the executable and the arguments. | 
| * | 
| +   * When the process has been successfully started [onStart] is | 
| +   * called on the returned Process object. If the process fails to | 
| +   * start [onError] is called on the returned Process object. | 
| +   * | 
| * No data can be written to the process stdin and the process | 
| * cannot be closed nor killed before [onStart] has been invoked. | 
| */ | 
| -  Process.start(String executable, | 
| -                List<String> arguments, | 
| -                [ProcessOptions options]); | 
| +  static Process start(String executable, | 
| +                       List<String> arguments, | 
| +                       [ProcessOptions options]) { | 
| +    return _Process.start(executable, arguments, options); | 
| +  } | 
|  | 
| /** | 
| -   * Creates a new process object, starts a process and runs it | 
| -   * non-interactively to completion. The process run is [executable] | 
| -   * with the specified [arguments]. When the process has been | 
| -   * successfully started [onStart] is called. If the process fails to | 
| -   * start [onError] is called. | 
| +   * Starts a process and runs it non-interactively to completion. The | 
| +   * process run is [executable] with the specified [arguments]. | 
| * | 
| -   * Options other than the executable and the arguments are specified | 
| -   * using a [ProcessOptions] object. If no options are required, | 
| -   * [null] can be passed as the options. | 
| +   * An optional [ProcessOptions] object can be passed to specify | 
| +   * options other than the executable and the arguments. | 
| * | 
| -   * No communication via [stdin], [stdout] or [stderr] can take place | 
| -   * with a non-interactive process. Instead, the process is run to | 
| -   * completion at which point the exit code and stdout and stderr are | 
| -   * supplied to the [callback] parameter. | 
| +   * Returns a [:Future<ProcessResult>:] that completes with the | 
| +   * result of running the process, i.e., exit code, standard out and | 
| +   * standard in. | 
| */ | 
| -  Process.run(String executable, | 
| -              List<String> arguments, | 
| -              ProcessOptions options, | 
| -              void callback(int exitCode, String stdout, String stderr)); | 
| +  static Future<ProcessResult> run(String executable, | 
| +                                   List<String> arguments, | 
| +                                   [ProcessOptions options]) { | 
| +    return _Process.run(executable, arguments, options); | 
| +  } | 
|  | 
| /** | 
| * Returns an input stream of the process stdout. | 
| @@ -50,7 +51,7 @@ interface Process default _Process { | 
| * Throws an [UnsupportedOperationException] if the process is | 
| * non-interactive. | 
| */ | 
| -  InputStream get stdout(); | 
| +  abstract InputStream get stdout(); | 
|  | 
| /** | 
| * Returns an input stream of the process stderr. | 
| @@ -58,7 +59,7 @@ interface Process default _Process { | 
| * Throws an [UnsupportedOperationException] if the process is | 
| * non-interactive. | 
| */ | 
| -  InputStream get stderr(); | 
| +  abstract InputStream get stderr(); | 
|  | 
| /** | 
| * Returns an output stream to the process stdin. | 
| @@ -66,13 +67,13 @@ interface Process default _Process { | 
| * Throws an [UnsupportedOperationException] if the process is | 
| * non-interactive. | 
| */ | 
| -  OutputStream get stdin(); | 
| +  abstract OutputStream get stdin(); | 
|  | 
| /** | 
| * Set the start handler which gets invoked when the process is | 
| * successfully started. | 
| */ | 
| -  void set onStart(void callback()); | 
| +  abstract void set onStart(void callback()); | 
|  | 
| /** | 
| * Sets an exit handler which gets invoked when the process | 
| @@ -81,20 +82,20 @@ interface Process default _Process { | 
| * Throws an [UnsupportedOperationException] if the process is | 
| * non-interactive. | 
| */ | 
| -  void set onExit(void callback(int exitCode)); | 
| +  abstract void set onExit(void callback(int exitCode)); | 
|  | 
| /** | 
| * Set an error handler which gets invoked if an operation on the process | 
| * fails. | 
| */ | 
| -  void set onError(void callback(e)); | 
| +  abstract void set onError(void callback(e)); | 
|  | 
| /** | 
| * Kills the process. When the process terminates as a result of | 
| * calling [kill] [onExit] is called. If the kill operation fails, | 
| * [onError] is called. | 
| */ | 
| -  void kill(); | 
| +  abstract void kill(); | 
|  | 
| /** | 
| * Terminates the streams of a process. [close] most be called on a | 
| @@ -103,7 +104,29 @@ interface Process default _Process { | 
| * closed it can no longer be killed and [onExit] is detached so the | 
| * application is not notified of process termination. | 
| */ | 
| -  void close(); | 
| +  abstract void close(); | 
| +} | 
| + | 
| + | 
| +/** | 
| + * [ProcessResult] represents the result of running a non-interactive | 
| + * process started with [:Process.run:]. | 
| + */ | 
| +interface ProcessResult { | 
| +  /** | 
| +   * Exit code for the process. | 
| +   */ | 
| +  int get exitCode(); | 
| + | 
| +  /** | 
| +   * Standard output from the process as a string. | 
| +   */ | 
| +  String get stdout(); | 
| + | 
| +  /** | 
| +   * Standard error from the process as a string. | 
| +   */ | 
| +  String get stderr(); | 
| } | 
|  | 
|  | 
| @@ -156,7 +179,7 @@ class ProcessOptions { | 
|  | 
| class ProcessException implements Exception { | 
| const ProcessException([String this.message, int this.errorCode = 0]); | 
| -  String toString() => "ProcessException: $message"; | 
| +  String toString() => "ProcessException: $message ($errorCode)"; | 
|  | 
| /** | 
| * Contains the system message for the process exception if any. | 
|  |