summaryrefslogtreecommitdiffstats
path: root/txr.1
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2016-11-08 21:09:45 -0800
committerKaz Kylheku <kaz@kylheku.com>2016-11-08 21:09:45 -0800
commit847a7b6c5292bd2126303e3ab7a6916657e13a71 (patch)
tree35e76797d42dbdae9171ab436f492e754576cf78 /txr.1
parent3ccdd5c9bfc6c8a8812ef6dab12dc1a1cd2bc0ee (diff)
downloadtxr-847a7b6c5292bd2126303e3ab7a6916657e13a71.tar.gz
txr-847a7b6c5292bd2126303e3ab7a6916657e13a71.tar.bz2
txr-847a7b6c5292bd2126303e3ab7a6916657e13a71.zip
Implement *package* special var; package overhaul.
* eval.c (load): Rebind *package* in the local dynamic environment already established for the sake of *load-path*. By doing this we cause *package* to be restored to its prior value, which allows the loaded file to alter it. Common Lisp works this way. (eval_init): Register *package* variable, with the user package as its default value. * lib.c (package_s): New symbol variable. (intern, rehome_sym): Default the package argument to the current package, not to user_package. (get_user_package, get_system_package, get_keyword_package): Functions removed. (get_current_package): New function. (obj_print_impl): Revise symbol printing. Keyword and uninterned symbols are printed with : and #: prefixes. The remainder are printed with a package prefix if their home package isn't the current package. * lib.h (keyword_package, user_package, system_package): These macros are just straight aliases for the global variables, not going through the lookup mechanism, which was pointless. (cur_package): New macro. (package_s): Declared. (get_current_package): Declared. * lisplib.c (lisplib_try_load): Establish a local dynamic environment, and bind the *package* variable to the user package which the library modules expect. * parser.c (find_matching_syms, provide_completions): Treat unqualified symbols in the current package rather than user package. * parser.y (sym_helper): Intern unqualified symbols in the current package, not user package. * txr.1: Document that the variables user-package, system-package and keyword-package should not be modified. Document the *package* special variable, and that intern and rehome-sym default their package argument to its value. (Here we get rid of wrong references to the undocumented variable *user-package*).
Diffstat (limited to 'txr.1')
-rw-r--r--txr.123
1 files changed, 21 insertions, 2 deletions
diff --git a/txr.1 b/txr.1
index 91127f58..68081588 100644
--- a/txr.1
+++ b/txr.1
@@ -38743,6 +38743,25 @@ a leading colon. The
is for internal symbols, helping
the implementation avoid name clashes with user code in some situations.
+These variables shouldn't be modified. If they are modified, the consequences
+are unspecified.
+
+.coNP Special variable @ *package*
+.desc
+This variable holds the current package. The top-level binding of this
+variable is initialized to the user package: the same package object
+which is held in the
+.code user-package
+variable.
+
+The current package is used as the default package for interning symbol tokens
+which do not carry the colon-delimited package prefix.
+
+The current package also affects printing. When a symbol is printed whose
+home package matches the current package, it is printed without a package
+prefix. (Keyword symbols are always printed with the colon prefix, even if the
+keyword package is current.)
+
.coNP Function @ make-sym
.synb
.mets (make-sym << name )
@@ -38901,7 +38920,7 @@ should be a package. If
.meta package
is not supplied, then the value
taken is that of
-.codn *user-package* .
+.codn *package* .
The
.code intern
@@ -38930,7 +38949,7 @@ must be a symbol and package object,
respectively. If
.meta package
is not given, then it defaults to the value of
-.codn *user-package* .
+.codn *package* .
The
.code rehome-sym