1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-18 10:10:23 +02:00
Commit graph

12610 commits

Author SHA1 Message Date
Andy Wingo
fbea69ad42 fix source location reporting for compiled code
* module/system/repl/repl.scm (default-catch-handler): Cosmetic
  improvements on VM error backtraces.

* module/system/vm/frame.scm (print-frame): Cosmetic improvements.
  (frame-line-number): source:line operates on the handle, not the cdr.
  (print-frame-chain-as-backtrace): Cosmetic improvements.
2008-08-09 13:41:23 +02:00
Andy Wingo
29711eb918 heapify the bootstrap program
* src/vm_engine.c (vm_run):
* src/programs.c (scm_c_make_program): If the holder is #f, malloc *and*
  copy the bytecode.

* module/system/vm/frame.scm (bootstrap-frame?): Now that we actually
  heapify the bootstrap program, we can check for `halt' in the bytecode.
2008-08-08 17:05:41 +02:00
Andy Wingo
e15f47740b More relevant VM backtrace
* module/system/repl/repl.scm: Remove a useless print in the backtrace
  handler.

* module/system/vm/debug.scm (vm-backtrace): s/reverse!/reverse/

* module/system/vm/frame.scm (bootstrap-frame?): A heuristic to see if a
  frame is a bootstrap frame, the one allocated on the stack in
  vm_engine.c; need to have a better solution for this.
  (make-frame-chain): Don't include bootstrap frames, they add no
  information.
  (print-frame-chain-as-backtrace): Remove a pk.

* src/vm_engine.c (vm_run): Add a fixme about the bootstrap prograp.
2008-08-08 13:19:49 +02:00
Andy Wingo
d0168f3da8 improve source loc info in nonlocal exits and backtraces
* module/system/il/compile.scm (codegen): The currently-executing
  instruction is actually the one right before the instruction pointer;
  so for purposes of assv to find a source location for an ip, put the
  source after the code, as it was before.

* module/system/vm/debug.scm (vm-backtrace): Move more code to frame.scm.

* module/system/vm/frame.scm (make-frame-chain): Include all frames, even
  the bootstrap one. For a reentrant backtrace we'll have boostrap
  programs anyway. Probably should check for objcode[2] == scm_op_halt,
  to not show those frames in the trace.
  (frame-line-number, frame-file): New helpers.
  (print-frame): Print out the line number too.
  (frame-call-representation): Code from print-frame-call moved here.
  (print-frame-chain-as-backtrace): A backtrace printer, yays.
  (program-name): Check link validity before calling frame-address on it.

* module/system/vm/program.scm (source:addr, source:line, source:column)
  (source:file): New accessors for the elements of program-sources.

* module/system/vm/vm.scm (vm:last-ip): New export.
  (vm-last-frame-chain): Use vm:last-ip in making the frame chain.

* src/vm.h (struct scm_vm):
* src/vm.c (make_vm, scm_vm_last_ip, scm_vm_save_stack): Save the last
  instruction pointer when saving the stack. Really though, we should be
  saving all of the stack data on a spaghetti stack.

* src/vm_system.c (late-variable-ref): Pointless s/REGISTER/BEFORE_GC/.
2008-08-08 12:55:57 +02:00
Andy Wingo
81aae20202 fix bug in variable-set instruction; ,x prints out program metadata
* module/system/vm/disasm.scm (disassemble-program, disassemble-meta):
  Disassemble program meta information too, if it's there.

* src/vm_system.c (variable-set): Don't try to proxy name information;
  maybe we can do this later, but the code as it was was calling SCM_CAR
  on a variable, which is for the lose.
2008-08-08 00:26:17 +02:00
Neil Jerram
5ea8e76e85 Fix build failure on Debian hppa architecture (bad stack growth detection)
* configure.in (SCM_I_GSC_STACK_GROWS_UP): Remove use of
	AC_CACHE_CHECK, which was inadvertently causing
	SCM_I_GSC_STACK_GROWS_UP _always_ to be 0.
2008-08-07 23:24:31 +02:00
Andy Wingo
17d1b4bffd fix stack corruption on vm-save-stack; more robust with nonlocal exits
* module/system/repl/command.scm: Coerce rationals to floats.

* module/system/vm/program.scm (program-documentation): Fix a typo, doh!

* src/vm.c (vm_reset_stack, struct vm_unwind_data): Add unwind handler to
  reset vp->sp, vp->fp, and vp->this_frame when performing a nonlocal
  exit from a vm_run.
  (vm_heapify_frames_1): Don't repack the stack, it causes stack
  corruption. I think we need spaghetti stacks to handle continuations,
  not separate heap frames. I don't think call/cc is working now.
  (vm-save-stack): Don't call heapify_frames, that modifies the stack
  that we're copying. Instead call its helper, heapify_1.

* src/vm_engine.c (vm_run): Set up the vm_reset_stack unwind handler.

* src/vm_engine.h (IP_REG, SP_REG, FP_REG): If we got through all of the
  checks without having these macros defined, define them as empty.
  Happens on x86-64.

* src/vm_system.c (halt): End the dynwind before we return from the VM.

* src/vm_scheme.c (REL): Sync the regs before calling scm_lt_p et al,
  cause they can do a nonlocal exit.
2008-08-07 19:04:25 +02:00
Andy Wingo
68a2e18a04 vm backtrace improvements
* module/system/repl/repl.scm (default-pre-unwind-handler): Save the VM
  stack in addition to the interpreter stack. At some point these
  functions should know about each other, I guess.
  (default-catch-handler): Show the VM stack too. Needs a bit of work.

* module/system/vm/frame.scm: Export make-frame-chain.

* module/system/vm/vm.scm: Export vm-save-stack.

* src/vm.c (scm_vm_save_stack): New function, heapifies the current
  stack, saving it to vm->last_frame.

* src/vm_engine.c (vm_run:vm_error): Don't heapify frames here, because
  nonlocal exits avoid this code entirely. Instead rely on the user
  saving the stack with a pre-unwind handler, as the repl does.
2008-08-07 13:51:45 +02:00
Andy Wingo
d0927dde97 build fixes
* benchmark/measure.scm: Update for module changes.

* module/system/vm/Makefile.am: Update the set of modules needing
  compilation.

* src/guile-vm.c: Bootstrap the VM, now that we have a function for it.

* testsuite/Makefile.am:
* testsuite/run-vm-tests.scm: Update to fix make check, broken since we
  merged with Guile.
2008-08-07 13:29:15 +02:00
Andy Wingo
07e56b27a1 big reorg of scheme modules -- e.g. programs.c -> (system vm program)
This reorganization kills the ugly module-export-all hacks in
bootstrap.scm and core.scm. In fact, it gets rid of core.scm entirely,
breaking out its functionality into separate files.

* module/system/vm/trace.scm:
* module/system/vm/profile.scm:
* module/system/vm/disasm.scm:
* module/system/vm/debug.scm:
* module/system/vm/conv.scm:
* module/system/vm/assemble.scm:
* module/system/repl/repl.scm:
* module/system/repl/common.scm:
* module/system/base/compile.scm:
* module/system/repl/command.scm: Update for changes, and fix a bug in
  procedure-documentation.

* module/system/vm/bootstrap.scm: Just call scm_bootstrap_vm, which
  handles setting load-compiled for us.

* module/system/vm/core.scm: Removed, functionality folded into other
  modules.

* module/system/vm/frame.scm: Export the C frame procedures here; also
  move scheme functions from core.scm here.

* module/system/vm/instruction.scm: New file, exports procedures from
  instructions.c.

* module/system/vm/objcode.scm: New file, exports procedures from
  objcodes.c.

* module/system/vm/program.scm: New file, exports procedures from
  programs.c, and some scheme functions originally from core.scm.

* module/system/vm/vm.scm: New file, from vm.c and core.scm.

* src/Makefile.am (libguile_vm_la_SOURCES): Add bootstrap.h.

* src/bootstrap.h: New file, prototypes scm_bootstrap_vm (), which the
  scm_init_* functions call.

* src/frames.h:
* src/frames.c (scm_init_frames):
* src/frames.c (scm_bootstrap_frames):

* src/vm.h:
* src/instructions.h:
* src/instructions.c (scm_init_instructions):
* src/instructions.c (scm_bootstrap_instructions):
* src/objcodes.h:
* src/objcodes.c (scm_bootstrap_objcodes):
* src/objcodes.c (scm_init_objcodes):
* src/programs.h:
* src/programs.c (scm_bootstrap_programs):
* src/programs.c (scm_init_programs):
* src/vm.c (scm_bootstrap_vm):
* src/vm.c (scm_init_vm): Call scm_bootstrap_vm() before doing anything
  in an init function. Bootstrap_vm will call bootstrap_instructions(),
  etc to initialize types, then set load-compiled to point to
  load-compiled/vm.

* src/vm.c (scm_load_compiled_with_vm): Code to load .go files, if
  they're present.
2008-08-07 13:11:27 +02:00
Andy Wingo
1865ad5680 sync registers before calling c functions, really
* src/vm_loader.c:
* src/vm_scheme.c: Use SYNC_REGISTER, although it's the same as
  SYNC_BEFORE_GC. A style issue?

* src/vm_system.c (call, tail-call): Explicitly do a SYNC_REGISTER, not
  relying on POP_LIST to do it for us, because POP_LIST won't do it if
  there are 0 arguments. The way that this manifested itself to me was
  badness after the second (read) call in a repl session. I wish I
  understood more about this problem.
2008-08-06 00:13:31 +02:00
Andy Wingo
6287726adc save vm's state before calling out to c procedures
* .gitignore: Ignore .go files.

* src/vm_loader.c:
* src/vm_scheme.c:
* src/vm_system.c: Sync the VM's state before calling out to C
  procedures that might cons or cause a nonlocal exit.
2008-08-05 23:08:58 +02:00
Andy Wingo
d507b25f1f disable trampoline "optimizations"
* src/vm_system.c: Disable those trampoline "optimizations", as they
  actually slowed down benchmark/measure.scm '(fibo 30)'. They were
  edifying, in that now I have an appreciation of the need for
  SYNC_ALL().
2008-08-05 21:56:29 +02:00
Andy Wingo
659b4611b6 re-enable computed goto; fix ,help in the repl; subr dispatch optimizations
* m4/labels-as-values.m4: New file, checks for computed goto.

* configure.in: Use AC_C_LABELS_AS_VALUES.

* module/system/repl/command.scm (procedure-documentation): Extend the
  core's procedure-documentation in an ad-hoc way, so that ,help works.

* module/system/vm/core.scm (program-properties): New function.
  (program-documentation): New function.

* src/vm_engine.h (DROP, DROPN): Decrement sp before checking for
  underflow.

* src/vm_system.c (call, tail-call): Add some optimized dispatch for some
  C functions, so that we can avoid consing and the interpreter if
  possible. However currently it seems that I'm always getting the
  scm_call_* trampolines back.
2008-08-05 01:03:17 +02:00
Andy Wingo
fbde2b915b Add docstring support
* module/language/scheme/translate.scm (translate): Adapt to lambda
  having a `meta' slot now.
  (primitive-syntax-table, parse-lambda-meta): Parse out a docstring from
  lambda forms, putting in the <ghil-lambda>'s meta slot.

* module/system/il/compile.scm (optimize, codegen): Passthrough for the
  `meta' slot to the <glil-asm> object.

* module/system/il/ghil.scm (<ghil-lambda>): Add meta slot.

* module/system/il/glil.scm (<glil-asm>): Add meta slot.
  (unparse): Unparse meta.

* module/system/vm/assemble.scm (preprocess): Pass through the meta slot.
  (codegen): So, set the bytespec's meta slot as a list: bindings, source
  info, then the tail is the meta-info, which should be an alist.
  Currently the only defined key is `documentation', but `name' could
  come in the future.

* module/system/vm/core.scm (program-sources): Sources are now in the
  cadr...
  (program-property): And here we have access to the cddr.
2008-08-03 14:33:02 +02:00
Andy Wingo
96969dc1d6 fix recording of source locations
* module/language/scheme/translate.scm (translate, trans)
  (make-pmatch-transformers): When recursing into subexpressions, get the
  appropriate source location information.
  (location): Include the source filename in the location information.

* module/system/il/compile.scm (codegen): Record source locations in more
  cases. (This information ends up being part of the procedure metadata,
  not the actual codepath.)

* module/system/il/glil.scm (unparse): Don't destructure the source
  locations (it's a vector now).
2008-08-03 14:03:47 +02:00
Neil Jerram
76dae88158 Fix misleading output from `(help rationalize)'
* numbers.c (scm_rationalize): Update docstring to match the
	manual (which is more correct).  Change argument "err" to "eps",
	also to match the manual.
2008-08-03 00:27:32 +01:00
Andy Wingo
427d4a0c51 only pass symbols to module-ref & c
* module/language/scheme/translate.scm: Make sure that we're actually
  passing symbols to module-ref et al.
2008-08-02 12:46:14 +02:00
Andy Wingo
75e03dee5b add compile-toplevel and evaluate conditions to eval-case
* ice-9/boot-9.scm (eval-case): Define two more conditions:
  compile-toplevel and evaluate, as common lisp and chez scheme do.
  (defmacro, define-option-interface, define-macro, define-syntax-macro)
  (define-module, use-modules, use-syntax, define-public)
  (defmacro-public, export, re-export): Add `compile-toplevel' to all
  uses of eval-case.
2008-08-02 12:30:03 +02:00
Andy Wingo
99f20fb622 make has-suffix? use string-suffix?
* ice-9/boot-9.scm (has-suffix?): Use the core / srfi-13's
  string-suffix?.
2008-08-02 12:29:54 +02:00
Andy Wingo
6b1a13744b Support loading of compiled syncase macros
* ice-9/syncase.scm (current-eval-closure): New procedure.
  (env->eval-closure): Don't default to the root module: if we have no
  environment, we default to the current module via the logic in
  current-eval-closure. This is because psyntax's compilation mode
  doesn't know about guile modules, and thus won't dump the code to
  twiddle the current eval closure.
  (putprop, getprop, guile-macro): Use `current-eval-closure'.
  At the end, leave the expansion-eval-closure set to #f.
2008-08-02 12:29:44 +02:00
Andy Wingo
2b70bf0eb3 support thunks as prompts, as readline does.
* ice-9/boot-9.scm (repl-reader): Support thunks as prompts.
2008-08-02 12:29:33 +02:00
Andy Wingo
d28d59933c make readline's `repl-reader' impl check the current-reader fluid
* guile-readline/ice-9/readline.scm (activate-readline): Use the current
  binding of the current-reader fluid, if it is available.
2008-08-02 12:29:07 +02:00
Andy Wingo
d351811347 Fixes to make guile-vm compile in guile source tree
* INSTALL: Updated.
* m4/gnulib-cache.m4: Regenerated.

* Makefile.am: Spelling fix.

* guilec.mk:
* src/Makefile.am:
* src/vm.c: Update to actually work inside a guile source tree.

* libguile/Makefile.am: Don't error on warnings in the flex-generated
  c-tokenize function.
2008-08-02 12:17:27 +02:00
Andy Wingo
e610dc3851 merge guile-vm to guile
An attempt to pull in the original history from guile-vm into guile itself.
2008-08-02 11:40:32 +02:00
Neil Jerram
091baf9edf Single stepping through code from Emacs
When you use GDS to evaluate Scheme code from Emacs, you can now use
`C-u' to indicate that you want to single step through that code. See
`Evaluating Scheme Code' in the manual for more details.

	* scheme-using.texi (Evaluating Scheme Code): Document use of
        `C-u' prefix with evaluation commands.

        * gds-scheme.el (gds-eval-region, gds-eval-expression)
        (gds-eval-defun, gds-eval-last-sexp): Support `C-u' prefix,
        meaning that user wants to single step through the code.

        * gds-client.scm (handle-nondebug-protocol): Add support for
        setting a trap on code that is about to be evaluated.
2008-07-17 23:05:57 +01:00
Neil Jerram
0d751d4720 ChangeLog for "Improve stack direction test" 2008-07-17 22:27:34 +01:00
Neil Jerram
2b3df509f6 ChangeLog for "Improved MIPS/Linux gc_os_dep.c definitions" 2008-07-17 22:26:41 +01:00
Ludovic Courtès
450be18dff Handle lack of struct dirent64' and readdir64_r ()' on HP-UX 11.11. 2008-07-17 00:20:31 +02:00
Neil Jerram
4696a66693 Improve stack direction test
* configure.in: Update stack direction test to be like that in
	Autoconf _AC_LIBOBJ_ALLOCA and Gnulib; specifically in involving a
	function calling itself.
2008-07-12 19:33:29 +01:00
Neil Jerram
c0a658c4db Improved MIPS/Linux gc_os_dep.c definitions
From Thiemo Seufer <ths@networkno.de>:

	* gc_os_dep.c (CPP_WORDSZ, ALIGN_DOUBLE, DATAEND,
	DYNAMIC_LOADING): Added #defines.
	(_fdata, _end): Added declarations.
	(DATASTART): Use _fdata instead of __data_start.
	(STACKBOTTOM): Changed from 0x80000000 to 0x7fff8000.
2008-07-12 19:33:21 +01:00
Ludovic Courtès
8722d99a45 Use `-q' when running standalone tests. 2008-07-06 23:58:38 +02:00
Ludovic Courtès
61c8bf343c Update `INSTALL'. 2008-07-06 19:55:18 +02:00
Ludovic Courtès
4bdc8fb5ac Update to Autoconf 2.61. 2008-07-06 19:53:49 +02:00
Ludovic Courtès
3d8c00e725 Update Gnulib files. 2008-07-05 20:24:51 +02:00
Ludovic Courtès
071bb6a840 Add `scm_c_symbol_length ()'. 2008-07-05 20:16:12 +02:00
Ludovic Courtès
b6137ed741 Don't declare scm_i_locale_mutex' as SCM_INTERNAL'. 2008-07-04 22:22:06 +02:00
Ludovic Courtès
a572acb2c2 Update `THANKS'. 2008-07-04 22:03:08 +02:00
Ludovic Courtès
3e28462ffb Fix `SCM_INTERNAL' with GCC 4.3. 2008-07-04 22:02:56 +02:00
Ludovic Courtès
7b28af22c0 Add `NEWS' entry for SRFI-18. 2008-06-30 19:48:50 +02:00
Julian Graham
e68f492a43 srfi-modules.texi (SRFI-18): New sections.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2008-06-30 19:47:21 +02:00
Ludovic Courtès
47871d5a16 Modernize Automake files. 2008-06-28 22:15:52 +02:00
Ludovic Courtès
c8779dde04 Fix doc typo regarding `use-syntax' and "syntax transformers". 2008-06-28 20:37:21 +02:00
Ludovic Courtès
994e8417d2 Fix harmless typo in SRFI-19. 2008-06-28 20:32:17 +02:00
Ludovic Courtès
95c6523b03 Disable type-checking of `SCM_UNPACK' for the broken HP compilers. 2008-06-28 20:31:01 +02:00
Ludovic Courtès
83bd8c1223 Update `THANKS'. 2008-06-02 21:47:53 +02:00
Ludovic Courtès
589d9eb814 guile-config: Show -L$libdir' before -lguile'. 2008-06-02 21:47:41 +02:00
Ludovic Courtès
6eadcdab98 Work around `#define except' on Tru64. 2008-06-02 21:43:07 +02:00
Ludovic Courtès
fcbc08686c Support systems whose <inttypes.h> doesn't define `PRIiMAX'. 2008-06-02 21:34:57 +02:00
Ludovic Courtès
e36280cb28 Fix SRFI-88 URL in the manual. 2008-06-01 13:09:36 +02:00