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

17263 commits

Author SHA1 Message Date
Andy Wingo
361d0de285 Stack traces skip RTL boot frames
* libguile/frames.c (frame-previous)
* libguile/stacks.c (make-stack): Skip RTL boot frames.
2013-10-17 23:25:01 +02:00
Andy Wingo
9d87158fdb RTL engine can apply smobs and applicable structs w/o stack VM
* libguile/vm-engine.c (rtl_vm_engine): Allow the RTL VM to handle the
  dispatch for SMOBs and applicable structs.
2013-10-17 23:24:16 +02:00
Andy Wingo
8d23c43641 Fix subr-call
* libguile/vm-engine.c (subr-call): Fix for locals count including the
  procedure.
2013-10-17 23:21:29 +02:00
Andy Wingo
e93c0430fa Fix tail-apply bugs
* libguile/vm-engine.c (tail-apply): Fix for old change that made
  the procedure indexed 0 instead of -1.
2013-10-17 23:20:32 +02:00
Andy Wingo
73c3db6669 Better vm.c support for RTL programs
* libguile/vm.c (scm_c_vm_run): Directly dispatch to the RTL VM for RTL
  programs.
  (scm_bootstrap_vm): Initialize the RTL program stubs early, and mark
  the RTL boot program with the boot flag.
2013-10-17 23:20:32 +02:00
Andy Wingo
ac37196321 Procedure traps work with RTL programs.
* module/system/vm/traps.scm (frame-matcher): Work with RTL programs.
2013-10-17 23:20:32 +02:00
Andy Wingo
342370bd56 minimal RTL program support in (system xref)
* module/system/xref.scm (procedure-sources*): Work with RTL programs.
2013-10-17 23:20:32 +02:00
Andy Wingo
1d94a35d69 (system vm coverage) works with RTL programs
* module/system/vm/coverage.scm (hashq-proc, assq-proc)
  (program-sources*, closed-over-procedures, coverage-data->lcov): Work
  with RTl procedures.
2013-10-17 23:20:32 +02:00
Andy Wingo
0bd6b1cae1 Statprof works better with RTL programs
* module/statprof.scm (get-call-data, procedure=?): Work with RTL
  programs.
2013-10-17 23:20:32 +02:00
Andy Wingo
234155e336 bind-rest works in the optional-and-rest-arg case.
* libguile/vm-engine.c (bind-rest): If the sp is below the dst reg,
  alloc the frame to ensure there is enough space, and to fill in
  intermediate values with SCM_UNDEFINED.
2013-10-17 23:20:26 +02:00
Ludovic Courtès
c61be45084 'scm_c_read' goes through the fast path with ISO-8859-1 unbuffered ports.
Discussed in <http://bugs.gnu.org/15368>.

* libguile/ports.c (scm_c_read): Enter the 'swap_buffer' case when
  pt->encoding is "ISO-8859-1".
2013-10-14 22:59:28 +02:00
Ludovic Courtès
aaa9ef33d8 doc: Update the section on SMOBs and memory management.
* doc/ref/libguile-smobs.texi (Describing a New Type): Only list 'print'
  and 'equalp' as compulsory.  Explain why 'mark' and 'free' are
  optional.
  (Creating Smob Instances): Remove paragraphs about allocations that
  might fail etc.  Use 'scm_gc_malloc_pointerless' for the pixel
  buffer.
  (Garbage Collecting Smobs): Explain when the 'mark' and 'free'
  functions are needed.
  (Garbage Collecting Simple Smobs): Remove.
2013-10-14 22:59:28 +02:00
Andy Wingo
99511cd0ab Refactor vm_abort
* libguile/vm.c (vm_abort):
* libguile/vm-i-system.c (abort): Refactor abort interface so that it is
  more amenable to the RTL VM.
2013-10-14 17:32:16 +02:00
Andy Wingo
5bd4b6585b Reify call-thunk/no-inline.
* module/language/cps/reify-primitives.scm (reify-primitives): Remove
  call-thunk/no-inline in this late phase.
2013-10-14 16:43:42 +02:00
Andy Wingo
8d59d55e86 RTL: Compile prompts
* libguile/vm-engine.c (prompt): Adapt to explicitly set the saved SP so
  we know how many incoming values the handler will receive, and to make
  escape-only? a flag.

* module/language/cps/compile-rtl.scm (emit-rtl-sequence): $prompt
  should only be found in a "seq" context, as it just pushes on a prompt
  and doesn't bind any values.  On the other hand it should emit
  appropriate code for the handler to bind its values, so do that.

* module/language/cps/slot-allocation.scm ($cont-allocation): Add a note
  that proc-slot is used by prompts as well.
  (allocate-slots): Compute the allocation of a prompt handler's args.

* module/language/tree-il/compile-cps.scm (convert): Use "unwind"
  instead of the nonexistent "pop-prompt".

* module/system/vm/disassembler.scm (code-annotation): Adapt to change
  in prompt VM op.
2013-10-14 16:13:57 +02:00
Andy Wingo
82f4bac420 RTL VM: receive-values has allow-extra? flag
* libguile/vm-engine.c (receive-values): Add an ALLOW-EXTRA? flag in
  unused bits of the third word.  Without it, receive-values will check
  for the exact number of incoming values.

* libguile/vm.c (vm_error_wrong_number_of_values): New error case.

* module/language/cps/compile-rtl.scm (emit-rtl-sequence): Adapt to add
  the ALLOW-EXTRA? flag.
2013-10-14 16:09:43 +02:00
Andy Wingo
c6cd692f08 Add SCM_F_DYNSTACK_PROMPT_PUSH_NARGS prompt flag
* libguile/dynstack.h (scm_t_dynstack_prompt_flags): New flag,
  SCM_F_DYNSTACK_PROMPT_PUSH_NARGS, set if the continuation expects the
  number of args to be pushed on the top of the stack.

* libguile/control.c (scm_c_abort): Only push nargs if requested.

* libguile/eval.c (eval):
* libguile/throw.c (pre_init_catch):
* libguile/vm-i-system.c (prompt): Set
  SCM_F_DYNSTACK_PROMPT_PUSH_NARGS.
2013-10-14 16:05:45 +02:00
Andy Wingo
b7f10defe6 call-with-prompt always compiles to CPS $prompt
* module/language/tree-il/compile-cps.scm (convert): For prompts without
  inline handlers, eta-convert the handler.
2013-10-14 12:20:58 +02:00
Andy Wingo
545d776ef6 Put the readline extension in the extensionsdir
* GUILE-VERSION:
* acinclude.m4:
* guile-readline/LIBGUILEREADLINE-VERSION:
* guile-readline/Makefile.am: Rename libguile-readline-v-18.so to
  guile-readline.so, and install it to the extensions dir instead of the
  libdir.

* guile-readline/ice-9/readline.scm: Load guile-readline instead of
  libguile-readline-v-18.
2013-10-14 11:33:52 +02:00
Andy Wingo
649f6043de More precise dead-after-use? for loop variables
* module/language/cps/dfg.scm (dead-after-use?):
  (dead-after-branch?): A symbol defined in the header block of a loop
  is still within the same loop.
2013-10-12 16:36:28 +02:00
Andy Wingo
b8da548fba RTL slot allocation: Don't kill variables that flow into loops
* module/language/cps/dfg.scm (dead-after-use?): Don't kill a variable
  if it was defined outside the current loop.
  (dead-after-branch?): Likewise, but I don't think this helper is
  correct yet :/
2013-10-12 16:22:45 +02:00
Andy Wingo
0e2446d4db Compute post-dominators
* module/language/cps/dfg.scm ($block): Add pdom and pdom-level fields,
  for post-dominators.
  (reverse-post-order, convert-predecessors): Arrange to work either
  way: for dominators or for post-dominators.
  (analyze-control-flow!): Compute post-dominators.
  (dominates?): Refactor.
  (post-dominates?): New helper.
2013-10-12 16:11:36 +02:00
Andy Wingo
96b8027cc4 Identify loops
* module/language/cps/dfg.scm (compute-dom-edges)
  (compute-join-edges, compute-reducible-back-edges)
  (compute-irreducible-dom-levels, compute-nodes-by-level)
  (mark-loop-body, mark-irreducible-loops, identify-loops): Identify
  loops.  Irreducible loops are TODO.

* test-suite/tests/rtl-compilation.test ("contification"): Add an
  irreducible loop test.
2013-10-12 15:19:20 +02:00
Andy Wingo
366eb4d764 DFG refactorings
* module/language/cps/dfg.scm ($block): Add "irreducible" field, format
  TBD.
  (reverse-post-order): Return a vector directly.
  (convert-predecessors, compute-dom-levels, compute-idoms):
  (analyze-control-flow!): Factor out control flow analsysis a bit
  better.
  (identify-loops): New helper.  Currently a NOP.
  (visit-fun): Adapt to compute-dominator-tree rename to
  analyze-control-flow!.
2013-10-12 15:19:16 +02:00
Andy Wingo
238ef4cf44 Replace conservatively-dominates? with a precise dominator lookup
* module/language/cps/dfg.scm (dominates?): Use the dominator tree
  instead of the scope tree.
2013-10-11 14:10:19 +02:00
Andy Wingo
3aee6cfdd7 Compute a dominator tree
* module/language/cps/dfg.scm (reverse-post-order, for-each/enumerate)
  (convert-predecessors, finish-idoms, compute-dominator-tree): Compute
  a dominator tree.  We don't use it yet.
2013-10-11 13:35:43 +02:00
Andy Wingo
f22979db66 DFG refactor to allow dominator tree construction
* module/language/cps/dfg.scm: Refactor so that we can think about
  building a dominator tree.  Split continuations out of use maps and
  put them in a separate table, which will have more flow information.
  (visit-fun): Mark clauses as using their bodies.
  (lookup-predecessors, lookup-successors): New exports.
  (find-defining-expression): Add an exception for clauses, now that
  clauses are in the flow graph.
  (continuation-bound-in?): Rename from variable-bound-in?, as it can
  currently only be used for continuations.

* module/language/cps/contification.scm (contify): Adapt to use
  lookup-predecessors and continuation-bound-in?.
2013-10-10 12:42:50 +02:00
Andy Wingo
6b71a76713 A couple of fixes when no source info is available
* module/system/vm/assembler.scm (link-debug): If there was no debugging
  info, reset the file register to 0 from its default value of 1 before
  adding the final row.

* module/system/vm/dwarf.scm (line-prog-scan-to-pc): If we rescanned
  from the beginning and still found no source info for this pc, return
  #f instead of the default value of the file register (1).
2013-10-10 12:22:20 +02:00
Andy Wingo
4a6d351979 Fix peval bug with inlining and optional argument initializers
* module/language/tree-il/peval.scm (peval): Fix a bug whereby inlined
  function applications with default argument initializers were putting
  the initializers in the wrong scope.

* test-suite/tests/peval.test ("partial evaluation"): Add a test.
2013-10-10 11:19:19 +02:00
Andy Wingo
61c7264fcc Fix slot allocation bug
* module/language/cps/slot-allocation.scm (allocate-slots): Fix
  dead-after-use computation to use the expression's label and not its
  continuation.
2013-10-05 15:57:54 +02:00
Andy Wingo
f8fb13ef8c better RTL debugging
* libguile/frames.c (scm_frame_source, scm_frame_instruction_pointer):
  Fix to work with RTL programs.

* module/system/vm/debug.scm (find-debug-context): Allow for the
  possibility of there being no ELF image.
  (find-program-debug-info, find-program-arities)
  (program-minimum-arity, find-program-docstring)
  (find-program-properties, find-source-for-addr)
  (find-program-die, find-program-sources): Don't bail if we couldn't
  get the debug context.

* module/system/vm/frame.scm (frame-next-source)
  (frame-call-representation): Allow RTL programs.

* module/system/vm/program.scm (program-arguments-alist): Placeholder
  implementation for RTL programs.
  (program-arguments-alists): Don't bail if we couldn't get the
  arities.
2013-10-04 19:55:12 +02:00
Andy Wingo
fea115c33f Fix nested contification bugs
* module/language/cps/contification.scm (contify): Exhaustively replace
  contified tail continuations, to fix a bug in nested tail-recursive
  contifications.  Likewise, call lookup-return-cont when searching for
  common return continuations.
2013-10-04 18:03:29 +02:00
Andy Wingo
c648869346 Fix variable-bound-in?
* module/language/cps/dfg.scm (variable-bound-in?): Fix to look up
  correct variable.
2013-10-04 17:30:59 +02:00
Andy Wingo
25833e807d Fix verify-cps
* module/language/cps/verify.scm (verify-cps): Fix visiting functions.
2013-10-04 16:36:17 +02:00
Andy Wingo
e9588e7032 Disassembling RTL prints source information.
* module/system/vm/disassembler.scm (disassemble-buffer): Print source
  information.
2013-10-04 15:28:40 +02:00
Andy Wingo
e0230913e9 add contification test
* test-suite/tests/rtl-compilation.test ("contification"): Add
  contification test where non-recursive call is not in tail position
  relative to the letrec.
2013-10-04 15:09:31 +02:00
Andy Wingo
7ea00e230a Contify functions in the scope of their continuation.
* module/language/cps/contification.scm (contify): Fix to contify
  functions in the scope of their continuation.
2013-10-04 14:08:52 +02:00
Andy Wingo
d51fb1e67b dfg: variable-free-in?, add variable-bound-in?
* module/language/cps/dfg.scm (variable-free-in?): Rename from
  variable-used-in?, to match CWCC language.
  (variable-bound-in?): New interface.

* module/language/cps/contification.scm (contify): Adapt caller.  Add
  more comments.
2013-10-04 14:07:36 +02:00
Mark H Weaver
d360671c1c Fix edge case in 'ash'.
* libguile/numbers.c (left_shift_exact_integer): Fix edge case where
  N is -1 and count is SCM_I_FIXNUM_BIT-1 to return the most negative
  fixnum.  Previously this result was returned as a bignum.

* test-suite/tests/numbers.test (ash): Add tests.
2013-10-03 19:08:24 -04:00
Mark H Weaver
1ea0803e9e Revert "Fix edge case in 'ash'."
This reverts commit 8df68898b9.
2013-10-03 19:08:23 -04:00
Andy Wingo
b43e81dc60 anonymous RTl functions print with source info
* module/system/vm/debug.scm (find-program-sources): If there is no
  source location before the low-pc of the procedure we're grovelling
  for, we were skipping the source loc info.  Fix that.

* module/system/vm/program.scm (write-program): Get source info for
  anonymous RTL functions.
  (program-sources, program-sources-pre-retire): Provide program
  counters relative to the beginning of the procedure.
2013-10-03 22:48:17 +02:00
Andy Wingo
7c54029740 program-source / program-sources works with RTL programs
* libguile/programs.c (scm_program_sources): Define as %program-sources,
  and let Scheme export the program-sources proper.
  (scm_program_source): Call out to Scheme.

* module/system/vm/program.scm: Convert to use match instead of pmatch.
  Adapt existing callers.
  (program-sources, program-source): New Scheme implementations of these
  functions.
  (program-sources-pre-retire): Add RTL program case.
2013-10-03 22:31:37 +02:00
Andy Wingo
d7928d7c61 Merge remote-tracking branch 'origin/stable-2.0'
Conflicts:
	libguile/deprecated.h
	libguile/programs.c
	libguile/programs.h
2013-10-03 21:35:21 +02:00
Andy Wingo
d7794a9d07 Deprecate scm_c_program_source, as it has no internal users.
* libguile/programs.c:
* libguile/programs.h:
* libguile/deprecated.h:
* libguile/deprecated.c (scm_c_program_source): Deprecate.
2013-10-03 20:37:48 +02:00
Mark H Weaver
8df68898b9 Fix edge case in 'ash'.
* libguile/numbers.c (scm_ash): Fix (ash -1 SCM_I_FIXNUM_BIT-1) to
  return a fixnum instead of a bignum.

* test-suite/tests/numbers.test (ash): Add tests.
2013-10-03 14:25:51 -04:00
Andy Wingo
ae07b8e70b Add source location test
* test-suite/tests/dwarf.test: New test, testing that source location
  information survives the round-trip through the compiler, back out to
  the (system vm debug) interfaces.
2013-10-03 16:14:33 +02:00
Andy Wingo
c0ada5a766 Add (system vm debug) interface to source location information
* module/system/vm/debug.scm (<source>, source-pre-pc)
  (source-post-pc, source-file, source-line, source-column)
  (source-line-for-user): New data type for source location
  information.
  (find-source-for-addr, find-program-sources): New procedures to get
  source location information for a particular address.
2013-10-03 16:14:29 +02:00
Andy Wingo
1ed81e0229 Add interface to read .debug_line data
* module/system/vm/dwarf.scm (die-line-prog):
  (line-prog-advance, line-prog-scan-to-pc): New public interfaces,
  allowing clients to interpret the "statement programs" from
  .debug_line DWARF sections.
  (<meta>, elf->dwarf-context): Record the bounds of the .debug_line
  section.
2013-10-03 16:14:25 +02:00
Andy Wingo
d56ab5a913 Serialize source positions into .debug_line
* module/system/vm/assembler.scm (link-debug): Generate a correct DWARF2
  line program.  Tests come next.
2013-10-03 16:14:20 +02:00
Andy Wingo
0a7340ac98 Emit a placeholder .debug_line section.
* module/system/vm/assembler.scm (link-debug): Emit a .debug_line
  section also.
  (link-objects): Expect .debug_line.
2013-09-30 21:49:12 +02:00