# (c) 2021 Ashok P. Nadkarni
# See LICENSE for license terms.

namespace eval ${NS}::alias {
    proc clear {} {
        # Deletes all aliases from the interpreter
    }

    proc define {args} {
        # Defines one or more type aliases.
        #  name - Name for type alias. Must begin with an alphabetic
        #   character and may contain alphanumerics and underscore.
        #  definition - definition for the alias
        #  aliasdefs - dictionary mapping alias names to their definition
        #
        # Synopsis: name definition
        # Synopsis: aliasdefs
        #
        # Given two arguments, creates an alias of the given name for passed
        # definition. If a single argument is provided, it must be a dictionary
        # mapping alias names to their definitions.
        #
        # An error will be raised if an alias name matches a built-in
        # type or if an alias of that name already exists with a different
        # definition in the same scope.
        #
        # The definition may itself be based on an existing alias. In this
        # case the existing alias is immediately resolved and expanded
        # as part of the definition so further changes to it are not reflected
        # in the alias being defined.
        #
        # See [Type aliases] for more on type aliases.
    }
    proc body {alias_name} {
        # Returns the resolved body of an alias.
        #  alias_name - Name of alias to be retrieved.
        # The alias must be one defined in the current [scope][Scopes].
    }
    proc list {{pattern *}} {
        # Returns a list of aliases that match the specified pattern.
        #  pattern - pattern to match against aliases
        # The command returns the alias names that match the specified pattern.
        # The conditions for matching the pattern are:
        #  - the tail of the pattern must match the tail of the alias name
        #    using Tcl's glob pattern matching rules.
        #  - the scope component of the alias name must match exactly.
    }
    proc delete {pattern} {
        # Deletes aliases matching a pattern.
        #  pattern - pattern to match against aliases
        # The command deletes all aliases whose name matches the specified
        # pattern. The conditions for matching the pattern are:
        #  - the tail of the pattern must match the tail of the alias name
        #    using Tcl's glob pattern matching rules.
        #  - the scope component of the alias name must match exactly.

    }
    proc load {alias_set} {
        # Loads predefined type aliases.
        #  alias_set - the alias set to load.
        #
        # The aliases are loaded into the calling scope.
        #
        # The possible values of $alias_set are `C`, `win32` (Windows only),
        # or `posix` (platform dependent).
        #
        # The `C` predefined alias set includes
        # `int8_t` `uint8_t` `int16_t` `uint16_t` `int32_t`
        #   `uint32_t` `int64_t` `uint64_t` `size_t` `ssize_t`
        #
        # The `win32` predefined alias set includes `BOOL` `BOOLEAN` `BYTE`
        # `CHAR` `DWORD` `DWORDLONG` `DWORD_PTR` `HALF_PTR` `HANDLE` `INT`
        # `INT_PTR` `LONG` `LONGLONG` `LONG_PTR` `LPARAM` `LPVOID`
        # `LRESULT` `SHORT` `SIZE_T` `SSIZE_T` `UCHAR` `UINT`
        # `UINT_PTR` `ULONG` `ULONGLONG` `ULONG_PTR` `USHORT` `WORD` `WPARAM`
        #
        # The `posix` alias set is platform dependent. In POSIX compliant
        # environments, it includes `blkcnt_t` `blksize_t` `clock_t`
        # `dev_t` `fsblkcnt_t` `fsfilcnt_t` `gid_t` `id_t` `ino_t` `key_t`
        # `mode_t` `nlink_t` `off_t` `pid_t` `size_t` `ssize_t` `suseconds_t`
        # `time_t` `uid_t`. On Windows, it only includes `dev_t` `ino_t` `off_t`
        # `time_t`.
        #
    }
    namespace export *
    namespace ensemble create
}

