1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 03:40:34 +02:00
Commit graph

17564 commits

Author SHA1 Message Date
Robin Templeton
15ca78482a temporarily disable elisp exception tests
(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.
2016-03-25 12:00:14 -07:00
Robin Templeton
a005046c59 ignore 'expect-fail' forms in elisp tests
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* test-suite/tests/elisp-compiler.test (compile-test): Update to support
  expect-fail.
2016-03-25 12:00:14 -07:00
Robin Templeton
898e00b6cf update cross-compilation test
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* test-suite/tests/cross-compilation.test (test-target): Update it.
2016-03-25 12:00:14 -07:00
Robin Templeton
e3d13813aa use standard evaluator
(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)".
2016-03-25 12:00:14 -07:00
Robin Templeton
03dfb00880 guile-backtrace function
* module/language/elisp/boot.el (guile-backtrace): New function
  extracted from `backtrace'.
  (backtrace): Use it.
2016-03-25 12:00:13 -07:00
Robin Templeton
02bb985c98 use guile eval for elisp tree-il
(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.
2016-03-25 12:00:13 -07:00
Robin Templeton
7bfd2ba132 deprecated eval-when situations
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* module/language/elisp/compile-tree-il.scm (eval-when): Update.
2016-03-25 12:00:13 -07:00
Robin Templeton
4455381dc7 execute top level require forms
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* module/language/elisp/boot.el (require): New compiler macro.
2016-03-25 12:00:13 -07:00
Robin Templeton
b5701278c9 top level fixes
(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.
2016-03-25 12:00:13 -07:00
Robin Templeton
93b8b53c65 only evaluate top-level macro definitions
(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.
2016-03-25 12:00:13 -07:00
Robin Templeton
4c6ef2b4cb degenerate let forms
(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?.
2016-03-25 12:00:13 -07:00
Robin Templeton
d9284d3bcd eval-when
(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.
2016-03-25 12:00:13 -07:00
Robin Templeton
3587fb1a9e fset macro
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* module/language/elisp/boot.el (fset): Update to handle macros.
2016-03-25 12:00:12 -07:00
Robin Templeton
9f316dd753 use defsubst
(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.
2016-03-25 12:00:12 -07:00
Robin Templeton
69b80315b5 defsubst
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* module/language/elisp/boot.el (defsubst): New macro.
2016-03-25 12:00:12 -07:00
Robin Templeton
bf142ba6af compiler macros
(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.
2016-03-25 12:00:12 -07:00
Robin Templeton
bfc3ffe7d5 defconst, defvar: proclaim special at compile-time
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* module/language/elisp/compile-tree-il.scm (defconst, defvar): Use
  proclaim-special!.
2016-03-25 12:00:12 -07:00
Robin Templeton
1d2aa4a9cf elisp @@ macro
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* module/language/elisp/boot.el (@@): New macro.
2016-03-25 12:00:12 -07:00
Robin Templeton
cd809c8937 compile-elisp fn
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* module/language/elisp/runtime.scm (compile-elisp): New procedure.
2016-03-25 12:00:12 -07:00
Robin Templeton
7c1b42e826 fix `nil?' type inference
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* module/language/cps/type-fold.scm (nil?): Removed.
2016-03-25 12:00:12 -07:00
Robin Templeton
31afd07744 fix symbol-function
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* module/language/elisp/runtime.scm (symbol-function): Adjust function.
2016-03-25 12:00:12 -07:00
Robin Templeton
ee48df0ec1 restore special operator handling
(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!
2016-03-25 12:00:11 -07:00
Robin Templeton
54eec21dda define-module for elisp special modules
(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.
2016-03-25 12:00:11 -07:00
Robin Templeton
8a90afb9ee constant-interning fix
(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.
2016-03-25 12:00:11 -07:00
Robin Templeton
efc4163b56 defvar affects default value
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* module/language/elisp/compile-tree-il.scm (defvar): Refactor appropriately.
2016-03-25 12:00:11 -07:00
Robin Templeton
f162edd28d symbol default value procedures
(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.
2016-03-25 12:00:11 -07:00
Robin Templeton
e4464967f7 read nil/t as #nil/#t
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* module/language/elisp/lexer.scm (lex): Update to handle #nil / #t.
2016-03-25 12:00:11 -07:00
Robin Templeton
707376055c elisp updates
(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.
2016-03-25 12:00:11 -07:00
Robin Templeton
ca0e317e5b guile-snarf fix
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* libguile/guile-snarf.in (modern_snarf): Adjusted.
2016-03-25 12:00:11 -07:00
Robin Templeton
e97833382e prefer compilers earlier in list
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* module/system/base/compile.scm (find-language-joint): Change order of cond.
2016-03-25 12:00:11 -07:00
Robin Templeton
4a14b7f7d8 allow arbitrary constants in cps
(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.
2016-03-25 12:00:10 -07:00
BT Templeton
d3dabad7e9 guile-private-ref
* module/language/elisp/compile-tree-il.scm (compile-guile-private-ref):
  New special operator.
2016-03-25 12:00:10 -07:00
BT Templeton
217be36b24 multiple obarrays
* 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.
2016-03-25 12:00:10 -07:00
Robin Templeton
175b64aed2 check symbols constants uninterned
(Best-ability ChangeLog annotation added by Christopher Allan Webber.)

* module/system/vm/assembler.scm (intern-constant, link-data):
  Update to check "symbol-interned?".
2016-03-25 12:00:10 -07:00
Robin Templeton
d808027782 intern arbitrary constants
(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.
2016-03-25 12:00:10 -07:00
Robin Templeton
ca61f7515b Remove CFLAGS from snarfcppopts.
libguile/Makefile.am (snarfcppopts): Remove CFLAGS
2016-03-25 12:00:10 -07:00
Andy Wingo
43a038f6e1 Fix lower-bound saturation in type inference
* module/language/cps/types.scm (type-entry-saturating-union): Fix range
  saturation in the negative direction.  Previously we were artificially
  truncating negative range ends to zero.
2016-03-14 11:17:08 +01:00
Andy Wingo
d236022eb0 Release v2.1.2
* GUILE-VERSION (GUILE_MICRO_VERSION): Bump to 2.1.2.
2016-02-03 09:11:01 +01:00
Andy Wingo
486b322fd5 Fix frame-call-representation for change to <binding>.
* module/system/vm/frame.scm (frame-call-representation): Fix for change
  to <binding>.
2016-02-02 11:09:00 +01:00
Andy Wingo
a653271f98 Document new VM instructions
* doc/ref/vm.texi (Stack Layout): Add a note about unboxed values.
  (Instruction Set): Update for new instructions.
2016-02-01 21:21:38 +01:00
Andy Wingo
5fceaed5e1 Update NEWS.
* NEWS: Update.
2016-02-01 15:32:03 +01:00
Andy Wingo
8998f1539f Update statprof documentation; deprecate `with-statprof'
* module/statprof.scm: Remove most of the commentary, as it was
  duplicated in the manual and was getting out of date.
  (stats): Remove self-secs-per-call and cum-secs-per-call fields as
  they can be computed from the other fields.
  (statprof-call-data->stats): Adapt.
  (statprof-stats-self-secs-per-call):
  (statprof-stats-cum-secs-per-call): New functions.
  (statprof-display/flat): Don't print the seconds-per-call fields, as
  we are no longer stopping the clock around call counters.  Anyway
  these times were quite misleading.
  (with-statprof): Deprecate.  It took its keyword arguments at the
  beginning; very complicated!  Better to use the `statprof' function.
  (`statprof' was introduced after `with-statprof' and then
  `with-statprof' was adapted to use it.)

* doc/ref/statprof.texi (Statprof): Port this documentation away from
  the automatically generated text and update it for the new interfaces
  like #:display-style.

* module/system/base/syntax.scm (record-case): Remove comment that
  referenced with-statprof.  Add comment indicating that record-case
  should be replaced.

* doc/ref/scheme-using.texi (Profile Commands): Update to mention
  keyword arguments and to link to the statprof documentation.
2016-02-01 15:12:36 +01:00
Andy Wingo
4066ee3192 Better call-counting profiles in statprof
* module/statprof.scm: Update commentary.
  (count-call): Don't bother stopping and starting the timer.  The
  overhead of call counting perturbs timing too much already, and
  somewhat paradoxically stopping and starting the timer takes too much
  time.
  (skip-count-call): New function.
  (stack-samples->procedure-data, stack-samples->callee-lists): If we
  are counting calls, skip any part of the stack that is inside
  count-call.
2016-02-01 11:27:14 +01:00
Andy Wingo
cd0b61a04e Frame <binding> objects capture frame, can ref value directly
* module/system/repl/debug.scm (print-locals): Adapt to
  frame-binding-ref change.

* module/system/vm/frame.scm (<binding>): Add `frame' field.
  (available-bindings): Capture the frame.
  (binding-ref, binding-set!): New functions, accessing a local variable
  value directly from a frame.
  (frame-binding-ref, frame-binding-set!): Remove.  As these are very
  low-level debugging interfaces introduced in 2.0, never documented,
  and quite tied to the VM, we feel comfortable making this change.
  (frame-call-representation): Adapt to available-bindings change.
  (frame-environment, frame-object-binding): Adapt to binding-ref
  interface change.

* doc/ref/vm.texi (Stack Layout): Mention that slots can be re-used.
  Update disassembly in example.

* doc/ref/api-debug.texi (Frames): Remove documentation for
  frame-local-ref, frame-local-set!, and frame-num-locals.  Replace with
  documentation for frame-bindings, binding accessors, and binding-ref /
  binding-set!.
2016-01-31 11:15:58 +01:00
Andy Wingo
67e8aa85e8 Remove frame-local-ref, frame-local-set!
* libguile/frames.h (scm_frame_num_locals, scm_frame_local_ref)
  (scm_frame_local_set_x): Remove.  As long as we are changing the
  interface in a backward-incompatible way, we might as well remove
  these.
* libguile/frames.c (scm_frame_num_locals, scm_frame_local_ref)
  (scm_frame_local_set_x, scm_init_frames_builtins, scm_init_frames):
  Arrange to make frame-local-ref et al private to frames.scm.

* module/system/vm/frame.scm: Load scm_init_frames_builtins extensions.
  (frame-instruction-pointer-or-primitive-procedure-name): New public
  function.
  (frame-binding-ref, frame-binding-set!): Allow binding objects as
  vars.

* module/system/repl/debug.scm (print-locals): Pass binding directly to
  frame-binding-ref.

* module/statprof.scm (sample-stack-procs, count-call): Use new
  frame-instruction-pointer-or-primitive-procedure-name function.
2016-01-31 10:45:02 +01:00
Andy Wingo
ffc9bc9149 Dist the prebuilt .go files
* prebuilt/i686-pc-linux-gnu/Makefile.am:
* prebuilt/mips-unknown-linux-gnu/Makefile.am:
* prebuilt/x86_64-unknown-linux-gnu/Makefile.am: Actually dist the .go
  files.
2016-01-29 10:36:32 +01:00
Andy Wingo
9eb841c2d8 Fix uniform vector compilation to foreign byte orders.
* module/system/vm/assembler.scm (define-byte-order-swapper): New
  helper.
  (byte-swap/2!, byte-swap/4!, byte-swap/8!): New functions.
  (link-data): Swap bytes in uniform vectors on foreign byte orders.
2016-01-29 10:24:40 +01:00
Andy Wingo
eccdeb6cc6 Distribute prebuilt bootstraps for common hosts
* am/bootstrap.am: New file, factored out of bootstrap/Makefile.am.
* bootstrap/Makefile.am: Use bootstrap.am.

* prebuilt/Makefile.am:
* prebuilt/i686-pc-linux-gnu/Makefile.am:
* prebuilt/mips-unknown-linux-gnu/Makefile.am:
* prebuilt/x86_64-unknown-linux-gnu/Makefile.am: New files.

* configure.ac: Output the prebuilt/ makefiles.
* Makefile.am: Descend into prebuilt/ when making dist.

* meta/uninstalled-env.in: Arrange to put prebuilt/ in the beginning of
  the GUILE_LOAD_COMPILED_PATH.  Also fix a case where bootstrap/ wasn't
  being correctly added to the load path.
2016-01-29 10:21:44 +01:00
Andy Wingo
e4be4aea34 Fix cross-compilation of immediates to targets with different word sizes
* module/system/vm/assembler.scm (immediate-bits): Rename from
  immediate?, and return the bits.  Take asm argument so that we measure
  what's an immediate not on the host but for the target.  Adapt all
  callers.
  (write-immediate): Take bits instead of SCM object.  Adapt callers.
  (write-placeholder): New helper, to write bits for #f.  Adapt callers
  that wrote #f to use write-placeholder.
2016-01-29 09:50:32 +01:00
Andy Wingo
f61870979c Fix type inference of integer division
* module/language/cps/types.scm (define-binary-result!): Fix inference
  of integer division.
2016-01-17 16:58:36 +01:00