Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Unified Diff: tool/input_sdk/lib/io/platform_impl.dart

Issue 1976103003: Migrate dart2js stubs for dart:io (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tool/input_sdk/lib/io/platform.dart ('k') | tool/input_sdk/lib/io/process.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tool/input_sdk/lib/io/platform_impl.dart
diff --git a/tool/input_sdk/lib/io/platform_impl.dart b/tool/input_sdk/lib/io/platform_impl.dart
new file mode 100644
index 0000000000000000000000000000000000000000..4ce43ea1e65507f09bbfac97a6919a66a90297ca
--- /dev/null
+++ b/tool/input_sdk/lib/io/platform_impl.dart
@@ -0,0 +1,121 @@
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of dart.io;
+
+class _Platform {
+ external static int _numberOfProcessors();
+ external static String _pathSeparator();
+ external static String _operatingSystem();
+ external static _localHostname();
+ external static _executable();
+ external static _resolvedExecutable();
+ /**
+ * Retrieve the entries of the process environment.
+ *
+ * The result is an [Iterable] of strings, where each string represents
+ * an environment entry.
+ *
+ * Environment entries should be strings containing
+ * a non-empty name and a value separated by a '=' character.
+ * The name does not contain a '=' character,
+ * so the name is everything up to the first '=' character.
+ * Values are everything after the first '=' charcacter.
+ * A value may contain further '=' characters, and it may be empty.
+ *
+ * Returns an [OSError] if retrieving the environment fails.
+ */
+ external static _environment();
+ external static List<String> _executableArguments();
+ external static String _packageRoot();
+ external static String _packageConfig();
+ external static String _version();
+
+ static String executable = _executable();
+ static String resolvedExecutable = _resolvedExecutable();
+ static String packageRoot = _packageRoot();
+ static String packageConfig = _packageConfig();
+
+ // Cache the OS environemnt. This can be an OSError instance if
+ // retrieving the environment failed.
+ static var _environmentCache;
+
+ static int get numberOfProcessors => _numberOfProcessors();
+ static String get pathSeparator => _pathSeparator();
+ static String get operatingSystem => _operatingSystem();
+ static Uri script;
+
+ static String get localHostname {
+ var result = _localHostname();
+ if (result is OSError) {
+ throw result;
+ } else {
+ return result;
+ }
+ }
+
+ static List<String> get executableArguments => _executableArguments();
+
+ static Map<String, String> get environment {
+ if (_environmentCache == null) {
+ var env = _environment();
+ if (env is !OSError) {
+ var isWindows = operatingSystem == 'windows';
+ var result = isWindows ? new _CaseInsensitiveStringMap() : new Map();
+ for (var str in env) {
+ // The Strings returned by [_environment()] are expected to be
+ // valid environment entries, but exceptions have been seen
+ // (e.g., an entry of just '=' has been seen on OS/X).
+ // Invalid entries (lines without a '=' or with an empty name)
+ // are discarded.
+ var equalsIndex = str.indexOf('=');
+ if (equalsIndex > 0) {
+ result[str.substring(0, equalsIndex)] =
+ str.substring(equalsIndex + 1);
+ }
+ }
+ _environmentCache = new UnmodifiableMapView<String, String>(result);
+ } else {
+ _environmentCache = env;
+ }
+ }
+
+ if (_environmentCache is OSError) {
+ throw _environmentCache;
+ } else {
+ return _environmentCache;
+ }
+ }
+
+ static String get version => _version();
+}
+
+// Environment variables are case-insensitive on Windows. In order
+// to reflect that we use a case-insensitive string map on Windows.
+class _CaseInsensitiveStringMap<V> implements Map<String, V> {
+ final Map<String, V> _map = new Map<String, V>();
+
+ bool containsKey(Object key) =>
+ key is String && _map.containsKey(key.toUpperCase());
+ bool containsValue(Object value) => _map.containsValue(value);
+ V operator [](Object key) => key is String ? _map[key.toUpperCase()] : null;
+ void operator []=(String key, V value) {
+ _map[key.toUpperCase()] = value;
+ }
+ V putIfAbsent(String key, V ifAbsent()) {
+ return _map.putIfAbsent(key.toUpperCase(), ifAbsent);
+ }
+ void addAll(Map other) {
+ other.forEach((key, value) => this[key.toUpperCase()] = value);
+ }
+ V remove(Object key) => key is String ? _map.remove(key.toUpperCase()) : null;
+ void clear() { _map.clear(); }
+ void forEach(void f(String key, V value)) { _map.forEach(f); }
+ Iterable<String> get keys => _map.keys;
+ Iterable<V> get values => _map.values;
+ int get length => _map.length;
+ bool get isEmpty => _map.isEmpty;
+ bool get isNotEmpty => _map.isNotEmpty;
+ String toString() => _map.toString();
+}
« no previous file with comments | « tool/input_sdk/lib/io/platform.dart ('k') | tool/input_sdk/lib/io/process.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698