Fan

 

final class

sys::Sys

sys::Obj
  sys::Sys
//
// Copyright (c) 2006, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
//   9 Jan 06  Brian Frank  Creation
//

**
** Sys provides static access to the system's environment.
**
final class Sys
{

//////////////////////////////////////////////////////////////////////////
// Constructor
//////////////////////////////////////////////////////////////////////////

  **
  ** Private constructor.
  **
  private new make()

//////////////////////////////////////////////////////////////////////////
// Namespace
//////////////////////////////////////////////////////////////////////////

  **
  ** Get the namespace instance which manages the specified
  ** uri, or if uri is omitted, then get the root namespace.
  **
  static Namespace ns(Uri? uri := null)

  **
  ** Mount a namespace under the specified Uri.  All requests
  ** to process uris contained by the specified uri are routed
  ** to the namespace instance for processing.  Throw ArgErr if
  ** the uri is already or mounted by another namespace.  Throw
  ** ArgErr if the uri isn't path absolute, has a query, or has
  ** fragment.
  **
  static Void mount(Uri uri, Namespace ns)

  **
  ** Unmount a namespace which was previously mounted by the
  ** `mount` method.  Throw UnresolvedErr is uri doesn't directly
  ** map to a mounted namespace.
  **
  static Void unmount(Uri uri)

//////////////////////////////////////////////////////////////////////////
// Environment
//////////////////////////////////////////////////////////////////////////

  **
  ** Get the command line arguments used to run the fan process
  ** as a readonly List of strings.
  **
  static Str[] args()

  **
  ** Get the environment variables as a case insensitive, readonly
  ** map of Str name/value pairs.  The environment map is initialized
  ** from the following sources from lowest priority to highest priority:
  **   1. shell environment variables
  **   2. Java system properties (Java VM only obviously)
  **   3. {homeDir}/lib/sys.props
  **
  ** The following environment variables are always available:
  **   - os.name: name of the host operating system
  **   - os.version: version of the host operating system
  **
  static Str:Str env()

  **
  ** Poll for a platform dependent map of diagnostics name/value
  ** pairs for the current state of the VM.  Java platforms return
  ** key values from the java.lang.management interface.
  **
  static Str:Obj diagnostics()

  **
  ** Run the garbage collector.  No guarantee is made
  ** to what the VM will actually do.
  **
  static Void gc()

  **
  ** Get the fan installation home directory.
  **
  static File homeDir()

  **
  ** Get the application home directory.  The appDir is
  ** automatically exposed into the namespace as part
  ** of the root Resource:
  **   - In 'fand' this is the app directory used to
  **     boot the namespace (TODO - revisit this)
  **   - In 'fant' this is the test directory.
  **   - In other VMs it is the current working directory.
  **
  static File appDir()

  **
  ** Get the local host name of the machine running the
  ** virtual machine process.
  **
  static Str hostName()

  **
  ** Get the user name of the user account used to run the
  ** virtual machine process.
  **
  static Str userName()

  **
  ** Terminate the current virtual machine.
  **
  static Void exit(Int status := 0)

  **
  ** Standard output stream.
  **
  static InStream in()

  **
  ** Standard output stream.
  **
  static OutStream out()

  **
  ** Standard error output stream.
  **
  static OutStream err()

  **
  ** Return the default hash code of `Obj.hash` for the
  ** specified object regardless of whether the object
  ** has overridden the 'hash' method.  If null then
  ** return 0.
  **
  static Int idHash(Obj? obj)

//////////////////////////////////////////////////////////////////////////
// Compiler Utils
//////////////////////////////////////////////////////////////////////////

  **
  ** Compile a script file into a pod and return the first
  ** public type declared in the script file.  If the file
  ** has been previously compiled and hasn't changed, then a
  ** cached type is returned.  If the script contains errors
  ** then the first CompilerErr found is thrown.  The options
  ** available:
  **   - logLevel: the default `LogLevel` to use for logging
  **     the compilation process and errors
  **   - log: the `compiler::CompilerLog` to use for
  **     logging the compilation process and errors
  **   - logOut: an output stream to capture logging
  **   - force: pass 'true' to not use caching, always forces
  **     a recompile
  **
  static Type compile(File f, [Str:Obj]? options := null)

}