anchor.diff:      }
   
       _environment = [];
  -    if (environment == null) {
  -      environment = {};
  -    }
  -    if (environment is !Map) {
  -      throw new ArgumentError("Environment is not a map: $environment");
  -    }
  -    if (identical(true, includeParentEnvironment)) {
  -      environment = new Map.from(Platform.environment)..addAll(environment);
  -    }
  -    environment.forEach((key, value) {
  +    var environmentEntryHandler = (key, value) {
         if (key is !String || value is !String) {
           throw new ArgumentError(
  -            "Environment key or value is not a string: ($key, $value)");
  +        "Environment key or value is not a string: ($key, $value)");
         }
         _environment.add('$key=$value');
  -    });
  +    };
  +    if (environment != null) {
  +      if (environment is !Map) {
  +        throw new ArgumentError("Environment is not a map: $environment");
  +      }
  +      environment.forEach(environmentEntryHandler);
  +    }
  +    if (includeParentEnvironment) {
  +      Platform.environment.forEach(environmentEntryHandler);
  +    }
   
       // stdin going to process.
       _stdin = new _StdSink(new _Socket._writePipe());
  
positive.code:                                 _stderr._stream._nativeSocket,
                                  _exitHandler._nativeSocket,
                                  status);
      if (!success) {
        throw new ProcessException(_path,
                                   _arguments,
  
negative.code:                Map<String, String> environment,
                 bool includeParentEnvironment,
                 bool runInShell) {
      if (runInShell) {
        arguments = _getShellArguments(path, arguments);
        path = _getShellCommand();
  