This is a follow-up to commit e139accb530c970c989b3d53d5a8a22fd75437fc.
* module/language/elisp/boot.el (backtrace-frame, guile-backtrace): Use
FRAME-PROCEDURE-NAME instead of FRAME-PROCEDURE.
(cherry picked from commit 3d7db7c2175d91629d4133ae0b79f3c9c2ce6191)
(Best-ability ChangeLog annotation added by Christine Lemmer-Webber.)
* module/language/elisp/boot.el (null, consp, listp, car, cdr): Update
to use defsubst.
(atom): New variable, using defsubst.
(Best-ability ChangeLog annotation added by Christine Lemmer-Webber.)
* module/language/elisp/boot.el
(progn, eval-when-compile, if, defconst, defvar, setq, let, flet)
(labels, let*, function, defmacro, quote): Removed.
* module/language/elisp/compile-tree-il.scm (special-operators): Removed.
(compound-pair): Use find-operator to check if a 'special-operator
rather than checking the now removed special-operators table.
* module/language/elisp/runtime.scm (defspecial): Update to use
set-symbol-function!
(Best-ability ChangeLog annotation added by Christine Lemmer-Webber.)
* module/language/elisp/bindings.scm (get-lexical-binding)
(get-function-binding): Use cadr instead of fluid-ref on slot.
(with-fluids**): New procedure.
(with-symbol-bindings, with-function-bindings): Use with-fluids**.
Also stop using "make-fluid", use "(list #f #f)" instead as default
lexical-bindings hashtable value.
(with-lexical-bindings): Drop the error checking for invalid targets.
* module/language/elisp/boot.el (defun, save-excursion)
(save-current-buffer, save-restriction, track-mouse, setq-default)
(catch, condition-case): New macros.
(omega, eval, gensym, interactive, autoload-do-load, fset, prin1)
(backtrace-frame, backtrace, %set-eager-macroexpansion-mode): New functions.
(null, consp, listp, car, cdr, make-symbol, signal): Wrap in eval-and-compile.
(prog1, cond, or, while): Update to make use of gensym.
(unwind-protect): Switch from funcall to %funcall.
(%functionp): Rename from functionp.
(%indirect-function): Update to use %functionp instead of functionp.
Add check for if object is null, signaling void-function. Instead of
calling symbol-function directly, call via %funcall from the module
"(language elisp runtime)".
(fset): Significant additions and refactoring.
(gload): Renamed from fload.
(defvaralias, nthcdr, nth, eq): Move functions to a different location.
(eq): Also stop using null.
(dolist): Remove quasiquoting, build list manually.
(random): Fix indentation.
(progn, eval-when-compile, if, defconst, defvar, setq, let, flet)
(labels, let*, function, defmacro, quote): Protect as special
operators by raising error if invoked as a function.
* module/language/elisp/compile-tree-il.scm: Import "(ice-9 format)".
Export compile-%function.
(lexical-binding, handle-var-def, defun, valid-symbol-list-arg?)
(process-options!): Remove.
(reference-variable): Adjust functions passed to access-variable.
(global?): Drop module parameter, use value-slot instead.
(ensure-globals!, set-variable!, parse-body-1, parse-lambda-list)
(compile-lambda, defconst, defvar, let, let*, compile-pair): Refactor.
(reference-function): Use '(elisp-functions) instead of function-slot.
(bind-lexically?): Drop module parameter, simplify.
(make-dynlet): Switch from using make-primcall to make-call.
(find-operator): Switch from using resolve-interface/resolve-module
to using function-slot.
(if, defconst, defvar, let, let*, flet, labels, guile-ref)
(guile-private-ref, guile-primitive, defmacro, `, quote, %funcall)
(%set-lexical-binding-mode): Add error checking.
(setq): Pass in args to report-error.
(function): Simplified, now calling %function.
(%function): New function, based on prior "function". Refactor, including
adding support for matching against a closure.
(%set-lexical-binding-mode): Switch from using fluid-set! to
set-lexical-binding-mode.
(special-operators): New variable. Build from following for-each
statement.
(compile-tree-il): Drop call to "process-options!"
* module/language/elisp/lexer.scm: Import "(language elisp runtime)".
(lex): Switch from using "list->string" to "make-lisp-string".
* module/language/elisp/runtime.scm: Use modules "(ice-9 format)",
"(system base compile)".
Remove from export list list, removing ensure-fluid!, symbol-fluid!,
set-symbol-fluid!. Add to export list ensure-dynamic!, symbol-name,
symbol-plist, set-symbol-plist!, bind-symbol, symbol-desc, proclaim-symbol!
special? emacs! unbound, lexical-binding?, set-lexical-binding-mode,
log!, eval-elisp, local-eval-elisp, make-lisp-string, lisp-string?
(make-list-string, lisp-string?) New function aliases.
(value-slot-module, function-slot-module): Adjust module resolution.
(nil_, t_): New variables.
(ensure-fluid!, symbol-fluid, set-symbol-fluid!): Removed.
(lexical-binding, unbound): New variables.
(lexical-binding?, set-lexical-binding-mode, unbound, dynamic?)
(make-dynamic, dynamic-ref, dynamic-set!, dynamic-unset!)
(dynamic-bound?, dynamic-bind, ensure-present!, ensure-desc!)
(schemify, symbol-name, symbol-desc, ensure-dynamic!, symbol-dynamic)
(set-symbol-plist!, special?, proclaim-special!, emacs!, eval-elisp)
(make-string): New procedures.
(symbol-value): Use dynamic-ref! instead of fluid-ref!.
(set-symbol-value!): Use dynamic-set! instead of fluid-set!.
(symbol-function, set-symbol-function!, symbol-bound?)
(symbol-fbound?, makunbound!, fmakunbound!): Refactor, including
adjusting how module resolution is being done.
* module/language/elisp/spec.scm: Import module "(system vm vm)".
Setup elisp-symbols, elisp-functions, elisp-plists.
Use "set-default-vm-engine!" and "set-vm-engine!" to be set to
'debug.
(elisp): Comment out joiner.
* module/language/elisp/boot.el (integerp, wholenump): Call `integer?'
before `exact?' so that these predicates return nil for non-numbers
instead of signalling an error.
* module/language/elisp/boot.el (%catch): New variable.
(catch): Bind `%catch' to `t' during the evaluation of `body'. Call
`throw' instead of signalling an exception directly.
(throw): Signal a `no-catch' error if there is no `catch' to throw to.
* module/language/elisp/boot.el (throw): Define an `error-conditions'
property for this symbol.
(catch): Define in terms of `condition-case' instead of using Guile
exceptions directly.
(throw): Signal a `throw' condition instead of throwing a Guile
exception directly.
* module/language/elisp/boot.el (error, wrong-type-argument, no-catch,
invalid-function): Define `error-conditions' properties for these
standard error symbols.
* module/language/elisp/boot.el (signal): Accept only two arguments, and
throw an `elisp-condition' exception instead of an `elisp-error'
exception.
(condition-case): New macro.
* module/language/elisp/boot.el (lexical-let, lexical-let*): New macros.
* module/language/elisp/compile-tree-il.scm (bind-lexically?): Remove
the check for a `lexical' flag, since `lexical-let' and `lexical-let*'
are no longer special operators.
(compile-lexical-let, compile-lexical-let*): Remove.
* module/language/elisp/runtime/function-slot.scm: Update module
definition.
* module/language/elisp/boot.el (prog1, cond, or, catch): Use `let' with
`lexical' declarations instead of `lexical-let'.
(%plist-put): Use `let' instead of `lexical-let', since "boot.el" now
uses lexical binding by default.
* module/language/elisp/boot.el (null, consp, listp, car, cdr)
(make-symbol, signal): Use `%funcall' instead of `funcall' or `fset'.
(symbolp, symbol-function, eval): Use `%funcall', since `funcall' now
calls these functions.
(functionp, %indirect-function): New functions.
(funcall): Define in terms of `%funcall' and `%indirect-function'.
(apply): New function. Previously defined in
"module/language/elisp/runtime/subrs.scm".
(fset): If `definition' is not a function, set the function cell of
`symbol' to an falias for `definition'.
* module/language/elisp/falias.scm: New file.
* module/language/elisp/subrs.scm: Remove file.
(apply): Remove. Now defined in "boot.el".
* module/language/elisp/runtime/function-slot.scm: Update module
definition.
* module/Makefile.am: Update.
* module/language/elisp/runtime/macros.scm: Remove.
(macro-lambda, macro-prog1, macro-prog2, macro-cond, macro-and,
macro-or, macro-catch, macro-unwind-protect): Rewrite in Elisp and
move to...
* module/language/elisp/boot.el (lambda, prog1, prog2, cond, and, or,
catch, unwind-protect): ...here.
(eval-and-compile): New macro.
(funcall, fset, null, consp, listp, car, cdr, make-symbol-signal):
Wrap definitions in an `eval-and-compile' form so that they can be
used by the rewritten macros.
* module/language/elisp/runtime.scm: Remove `built-in-macro'.
* module/language/elisp/Makefile.am: Remove
module/language/elisp/runtime/macros.scm from `ELISP_LANG_SOURCES'.