summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* elisp: boot: Replace removed FRAME-PROCEDURE with FRAME-PROCEDURE-NAME.wip-elispRicardo Wurmus2020-05-191-8/+2
| | | | | | | 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.
* loader: Handle interned constants as well as plain bytevectors.Ricardo Wurmus2020-05-171-6/+15
| | | | | | | This is a follow-up to commit b04e79283ada9a6af05552dda6446a0934c0fbe2. * libguile/loader.c (scm_load_thunk_from_memory): Extract constants only if the object is a pair.
* temporarily disable elisp exception testsRobin Templeton2020-04-041-3/+3
| | | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * test-suite/tests/elisp-compiler.test ("catch without exception" test) ("catch and throw" test, "unwind-protect" test): Switch from pass-if to expect-fail.
* ignore 'expect-fail' forms in elisp testsRobin Templeton2020-04-041-1/+3
| | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * test-suite/tests/elisp-compiler.test (compile-test): Update to support expect-fail.
* update cross-compilation testRobin Templeton2020-04-041-2/+2
| | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * test-suite/tests/cross-compilation.test (test-target): Update it.
* use standard evaluatorRobin Templeton2020-04-042-3/+1
| | | | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/compile-tree-il.scm: Remove import of "(language tree-il eval)". (defmacro): Use standard "eval". * module/language/elisp/runtime.scm: Remove import of "(language tree-il eval)".
* guile-backtrace functionRobin Templeton2020-04-041-2/+5
| | | | | | * module/language/elisp/boot.el (guile-backtrace): New function extracted from `backtrace'. (backtrace): Use it.
* use guile eval for elisp tree-ilRobin Templeton2020-04-043-9/+6
| | | | | | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/boot.el (eval): Update with simplified definition. * module/language/elisp/compile-tree-il.scm: Import "(language tree-il eval)". (eval-when-compile): Use eval-elisp. (defmacro): Use eval-tree-il. * module/language/elisp/runtime.scm: Import "(language tree-il eval)". (eval-elisp): Use "eval" to evaluate compiled form within current-module.
* deprecated eval-when situationsRobin Templeton2020-04-041-3/+6
| | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/compile-tree-il.scm (eval-when): Update.
* execute top level require formsRobin Templeton2020-04-041-0/+4
| | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/boot.el (require): New compiler macro.
* top level fixesRobin Templeton2020-04-041-2/+2
| | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/compile-tree-il.scm (compile-pair): Use compile-expr-1 instead of compile-expr.
* only evaluate top-level macro definitionsRobin Templeton2020-04-041-3/+4
| | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/compile-tree-il.scm (defmacro): Check to see whether toplevel? is true before compiling a macro.
* degenerate let formsRobin Templeton2020-04-041-6/+8
| | | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/compile-tree-il.scm (let): Conditionally invoke make-body within make-dynlet or just on its own depending on whether or not dynamic? is null?.
* eval-whenRobin Templeton2020-04-041-4/+41
| | | | | | | | | | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/compile-tree-il.scm (progn): Use compile-expr-1 instead of compile-expr. (toplevel?, compile-time-too?): New fluids. (eval-when): New special form. (compile-expr, compile-expr-1): compile-expr is renamed to compile-expr-1, and compile-expr is now a procedure which, if fulid-ref of toplevel? is true, will call compile-expr-1 with toplevel? fulid bound to #f. Otherwise, continue with compile-expr-1. (compile-tree-il): Set toplevel? and compile-time-too? fluids to #t during evaluation.
* fset macroRobin Templeton2020-04-041-0/+12
| | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/boot.el (fset): Update to handle macros.
* use defsubstRobin Templeton2020-04-041-5/+13
| | | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/boot.el (null, consp, listp, car, cdr): Update to use defsubst. (atom): New variable, using defsubst.
* defsubstRobin Templeton2020-04-041-0/+13
| | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/boot.el (defsubst): New macro.
* compiler macrosRobin Templeton2020-04-042-0/+24
| | | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/boot.el (%define-compiler-macro): New macro. * module/language/elisp/compile-tree-il.scm: New function. (compile-pair): Update to handle %compiler-macro condition.
* defconst, defvar: proclaim special at compile-timeRobin Templeton2020-04-041-0/+3
| | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/compile-tree-il.scm (defconst, defvar): Use proclaim-special!.
* elisp @@ macroRobin Templeton2020-04-041-0/+3
| | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/boot.el (@@): New macro.
* compile-elisp fnRobin Templeton2020-04-041-0/+5
| | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/runtime.scm (compile-elisp): New procedure.
* fix symbol-functionRobin Templeton2020-04-041-4/+4
| | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/runtime.scm (symbol-function): Adjust function.
* restore special operator handlingRobin Templeton2020-04-043-44/+7
| | | | | | | | | | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan 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!
* define-module for elisp special modulesRobin Templeton2020-04-041-3/+3
| | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/runtime.scm (value-slot-module) (function-slot-module, plist-slot-module): Update to set #:pure to #t.
* constant-interning fixRobin Templeton2020-04-041-1/+2
| | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/system/vm/assembler.scm (intern-constant): Switch from using vector-ref/immediate to make-short-immediate.
* defvar affects default valueRobin Templeton2020-04-041-2/+5
| | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/compile-tree-il.scm (defvar): Refactor appropriately.
* symbol default value proceduresRobin Templeton2020-04-041-1/+13
| | | | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/runtime.scm: (symbol-default-bound?, symbol-default-value, set-symbol-default-value!): New procedure aliases. Export their symbols. (emacs!): Update to accept new parameters dref, dset, dboundp.
* read nil/t as #nil/#tRobin Templeton2020-04-041-12/+18
| | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/elisp/lexer.scm (lex): Update to handle #nil / #t.
* elisp updatesRobin Templeton2020-04-046-263/+583
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan 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.
* guile-snarf fixRobin Templeton2020-04-041-1/+2
| | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * libguile/guile-snarf.in (modern_snarf): Adjusted.
* prefer compilers earlier in listRobin Templeton2020-04-041-2/+2
| | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/system/base/compile.scm (find-language-joint): Change order of cond.
* allow arbitrary constants in cpsRobin Templeton2020-04-041-2/+1
| | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/language/cps/types.scm (constant-type): No longer error if type not determined. Return &all-types instead.
* guile-private-refBT Templeton2020-04-042-0/+8
| | | | | * module/language/elisp/compile-tree-il.scm (compile-guile-private-ref): New special operator.
* multiple obarraysBT Templeton2020-04-042-16/+87
| | | | | | | | | * libguile/symbols.c (lookup_uninterned_symbol) (lookup_interned_latin1_symbol, lookup_interned_utf8_symbol) (scm_i_str2symbol): Take an `obarray' argument. All callers changed. (scm_make_obarray, scm_find_symbol, scm_intern, scm_unintern) (scm_obarray_for_each): New functions.
* check symbols constants uninternedRobin Templeton2020-04-041-1/+1
| | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * module/system/vm/assembler.scm (intern-constant, link-data): Update to check "symbol-interned?".
* intern arbitrary constantsRobin Templeton2020-04-045-16/+64
| | | | | | | | | | | | | | | | | | | | | | | | (Best-ability ChangeLog annotation added by Christopher Allan Webber.) * libguile/loader.c (load_thunk_from_memory): Refactor, adding "constants" argument and passing to "init" if appropriate. (load_thunk_from_file): Call "load-thunk-from-memory" with "constants" set to #f. (scm_load_thunk_from_memory): Instead of a bytevector, accept a cons of "(bytevector . constants)", where constants is either a vector or #f. Pass this into "load_thunk_from_memory". * module/language/bytecode/spec.scm: Adapt printer. * module/language/cps/compile-bytecode.scm (compile-bytecode): New variable. * module/system/repl/command.scm (disassemble): Adapt to expect pair which includes bytevector as its car. * module/system/vm/assembler.scm <asm>: Add "to-file?" slot. (fresh-block): New variable. (make-assembler): Adapt to expect "to-file?" keyword argument. (intern-constant): Support "asm-to-file?" in checks. (emit-init-constants, link-data): Likewise. (link-assembly): Update logic for handling "(bytevector . constants)" pair, as well as the expectations of its invocation by compile-bytecode.
* Remove CFLAGS from snarfcppopts.Robin Templeton2020-04-041-1/+1
| | | | libguile/Makefile.am (snarfcppopts): Remove CFLAGS
* Fix fixpoint computation in compute-significant-bitsAndy Wingo2020-03-231-2/+23
| | | | | | | | * module/language/cps/specialize-numbers.scm (preserve-eq?): New helper. (sigbits-union): Use the new helper. Fixes bugs.gnu.org/38486. Thanks to Zack Marvel for the bug report and Matt Wette for tracking it down.
* Revert "Fix build on platforms where the stack grows upwards."Andy Wingo2020-03-131-1/+1
| | | | This patch was only meant to apply to the 3.0 branch.
* Bump version for Guile 2.2.7.Ludovic Courtès2020-03-071-2/+2
| | | | | * GUILE-VERSION (GUILE_MICRO_VERSION): Increment. (LIBGUILE_INTERFACE_REVISION): Increment.
* Update NEWS.Ludovic Courtès2020-03-071-1/+56
| | | | * NEWS: Update.
* Bump user-visible copyright years to 2020Andy Wingo2020-03-072-4/+4
| | | | | * module/ice-9/command-line.scm (version-etc): * module/scripts/compile.scm (show-version): Bump to 2020.
* Actually run '00-repl-server.test'.Ludovic Courtès2020-03-071-1/+2
| | | | | | | | | | This is a followup to ddcab06f20525d975503d8d9611e02021fb0dff1. Until now the tests would always be marked as unresolved because TMPDIR was removed before the client and server had been started. * test-suite/tests/00-repl-server.test (call-with-repl-server): Remove initial call to 'rmdir'. Add calls to 'delete-file' and 'rmdir' in the unwind handler.
* Fix build on platforms where the stack grows upwards.John Paul Adrian Glaubitz2020-02-121-1/+1
| | | | | | | * libguile/continuations.c (scm_dynthrow): Fix missing mra parameter to grow_stack for SCM_STACK_GROWS_UP. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Handle GMP allocations through libgc and remove bignum finalizers.Ludovic Courtès2020-02-121-7/+12
| | | | | | | | | | | | | | | | This significantly speeds up loads that create lots of bignums, like (language cps slot-allocation) for files with many top-level definitions. Compiling such a file is typically 2.5 times faster. See <https://lists.gnu.org/archive/html/guile-devel/2020-02/msg00023.html>. * libguile/numbers.c (custom_gmp_malloc): Use 'scm_gc_malloc_pointerless' instead of 'scm_malloc'. (custom_gmp_realloc): Use 'scm_gc_realloc'. (custom_gmp_free): Remove call to 'free'. (make_bignum): Use 'scm_gc_malloc' instead of 'scm_gc_malloc_pointerless'. Call 'scm_i_set_finalizer' only when SCM_INSTALL_GMP_MEMORY_FUNCTIONS is false.
* Remove duplicate procedure in slot-allocation.scm.Ludovic Courtès2020-02-121-15/+12
| | | | | | * module/language/cps/slot-allocation.scm (add-live-slot) (kill-dead-slot, compute-slot): Move higher up in the file. (compute-shuffles): Remove duplicate 'add-live-slot' procedure.
* texinfo: Properly render @acronym in plain text.Ludovic Courtès2020-02-122-2/+31
| | | | | | | | | | | Fixes <https://bugs.gnu.org/37846>. Reported by Christopher Baines <mail@cbaines.net>. * module/texinfo/plain-text.scm (acronym): New procedure. (tag-handlers): Change 'acro' handle to ACRONYM, and add 'acronym' handler. * test-suite/tests/texinfo.plain-text.test ("stexi->plain-text") ["acronym", "recursive acronym"]: New tests.
* texinfo: Add '*line-width*' fluid to control line wrapping.Ludovic Courtès2020-02-124-5/+49
| | | | | | | | * module/texinfo/plain-text.scm (*line-width*): New variable. (wrap*): Honor it. * doc/ref/texinfo.texi (texinfo plain-text): Document it. * test-suite/tests/texinfo.plain-text.test: New file. * test-suite/Makefile.am (SCM_TESTS): Add it.
* Fix check for rl_get_keymapDaniel Llorens2020-02-122-7/+9
| | | | | | | | | | This lets Guile build on OS X (tested on 10.14) with the system-provided libreadline. * acinclude.m4 (GUILE_READLINE): Check for rl_get_keymap_name instead of rl_get_keymap. The system provided libreadline is an alias to libedit, which has _keymap but not _keymap_name, and Guile uses both. * guile-readline/readline.c: Adjust the include guard.
* 00-repl-server.test: don't use fixed path for socketRob Browning2020-01-221-4/+17
| | | | | * test-suite/tests/00-repl-server.test (make-tempdir): Add. (call-with-repl-server): Store socket in a make-tempdir dir.