// Copyright (c) 2017, 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;

// Each Isolate may run in a different "namespace", which provides the scope in
// which file paths are resolved.
abstract class _Namespace {
  // This getter does not increase the reference count on the underlying native
  // object. It cannot be passed in a dispatch message to the IOService thread.
  external static _Namespace get _namespace;

  // This getter does increase the reference count on the underlying native
  // object. It must be passed in a dispatch message to the IOService thread.
  external static int get _namespacePointer;

  // This sets up the Isolate's namespace. It should be set up by the embedder.
  // If it is not set up by the embedder, relative paths will be resolved
  // relative to the process's current working directory and absolute paths will
  // be left relative to the file system root.
  @pragma("vm.entry-point")
  external static void _setupNamespace(var namespace);
}
