1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-01 20:30:28 +02:00
Commit graph

4577 commits

Author SHA1 Message Date
Andy Wingo
ecdf15573b show args to subr calls in backtraces
* module/system/vm/frame.scm (frame-arguments): For subrs, we don't get
  names in the lambda-list, we get #f instead. But still, parse out the
  args in that case, assuming they are on the stack in that order.
2010-01-10 23:10:24 +01:00
Andy Wingo
913ddf0574 slight tweak to stack narrowing in the debugger
* module/system/vm/debug.scm: Really narrow two frames and not by
  function, so it works in the evaluator.
2010-01-09 21:53:04 +01:00
Andy Wingo
37e9bc8ae4 Narrow one more frame in debug.scm:debug-pre-unwind-handler
* module/system/vm/debug.scm (debug-pre-unwind-handler): Narrow two
  frames instead of stack-reffing past one. The second frame is
  necessary, now that make-stack itself is on the stack.
2010-01-09 20:40:36 +01:00
Andy Wingo
391d29029d print the error more nicely when we enter the debugger
* module/system/vm/debug.scm (debug-pre-unwind-handler): Nicer printing
  of the error.
2010-01-09 20:31:35 +01:00
Andy Wingo
8217c9251a make backtraces prettier
* module/system/vm/debug.scm (print-frames): Clean up a bit, reverting
  part of the previous change. (The problem was that in the else branch
  of the conditional, it didn't consume an arg.)

  In the future I would like to preserve the clean look of the
  backtraces. It's easier to read that way.
2010-01-09 20:21:37 +01:00
Andy Wingo
6f16379e9a allocate free variables inline to closures
* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump.

* libguile/programs.h (SCM_PROGRAM_FREE_VARIABLES)
  (SCM_PROGRAM_FREE_VARIABLE_REF, SCM_PROGRAM_FREE_VARIABLE_SET)
  (SCM_PROGRAM_NUM_FREE_VARIABLES):
* libguile/programs.c (scm_make_program, scm_program_num_free_variables)
  (scm_program_free_variable_ref, scm_program_free_variable_set_x):
  Allocate free variables inline with programs, instead of being in a
  vect. Should improve locality, and require fewer local variables in
  the VM.

* libguile/vm-engine.c (vm_engine): Remove free_vars and free_vars_count
  variables.

* libguile/vm-engine.h (CACHE_PROGRAM): No need to muck with free_vars
  and free_vars_count.
  (CHECK_FREE_VARIABLE): Update for inline free vars.

* libguile/vm-i-system.c (FREE_VARIABLE_REF): Update for inline free
  vars.
  (make-closure, fix-closure): Take the closure vals as separate stack
  args, and copy or fix them inline into the appropriate closure.

* module/language/objcode/spec.scm (program-free-variables): Define a
  local version of this removed function.

* module/language/tree-il/compile-glil.scm (flatten): Adjust to not make
  a vector when making closures.

* module/system/vm/program.scm: Export program-num-free-variables,
  program-free-variable-ref, program-free-variable-set!, and remove
  program-free-variables.

* test-suite/tests/tree-il.test ("lambda"): Update to not make vectors
  when making closures.
2010-01-09 16:43:26 +01:00
Ludovic Courtès
a589525d4e Fix frame printing in the debugger.
* module/system/vm/debug.scm (location-string): New procedure.
  (print-frames): Use it.  This fixes cases where LINE is #f and makes a
  distinction between FILE = stdin and FILE is unknown.
2010-01-08 16:12:12 +01:00
Ludovic Courtès
795ab688ee Factorize the location stack handling in warning analyses.
* module/language/tree-il/analyze.scm (analyze-tree)[traverse]: New
  argument UPDATE-LOCS.  Update users.
  [keep-locs, extend-locs, shrink-locs]: New procedures.
  (<binding-info>, <toplevel-info>): Remove `locs' field.
  (unused-variable-analysis, unbound-variable-analysis): Update
  accordingly.
2010-01-08 12:02:00 +01:00
Ludovic Courtès
c5e05a1c70 Use HORIZONTAL ELLIPSIS' when available in truncated-print'.
* module/ice-9/pretty-print.scm (truncated-print): Set
  `%default-port-encoding' to the encoding of PORT.  Choose either
  U+2026 or "..." depending on PORT's encoding.

* test-suite/tests/print.test ("truncated-print")[tprint]: New ENCODING
  argument.  Update existing tests accordingly. Add UTF-8 tests.

* doc/ref/misc-modules.texi (Pretty Printing): Mention the possible use
  of U+2026.
2010-01-08 10:57:32 +01:00
Andy Wingo
6f3b0cc29e tc7 tags for vm-related data
* libguile/tags.h (scm_tc7_frame, scm_tc7_objcode, scm_tc7_vm)
  (scm_tc7_vm_cont): Take more tc7s for VM-related data structures.

* libguile/evalext.c (scm_self_evaluating_p):
* libguile/gc.c (scm_i_tag_name):
* libguile/goops.c (scm_class_of, create_standard_classes):
* libguile/print.c (iprin1): Add cases for the new tc7s.

* libguile/frames.c:
* libguile/frames.h:
* libguile/objcodes.c:
* libguile/objcodes.h:
* libguile/vm.c:
* libguile/vm.h: Desmobify.

* libguile/vm.c (scm_vm_apply): Export to Scheme, because VM objects are
  no longer applicable.

* module/system/repl/command.scm (profile):
* module/system/vm/trace.scm (vm-trace):
* module/system/vm/vm.scm (vm-load): Call vm-apply to run a program in a
  VM instead of treating the VM as applicable.
2010-01-07 23:42:41 +01:00
Andy Wingo
6c498233a1 inline srfi-4 vector accessors
* module/language/tree-il/primitives.scm
  (*interesting-primitive-names*): Inline srfi-4 vector accessors.
2010-01-07 23:40:59 +01:00
Andy Wingo
a268973767 reimplement srfi-4 vectors on top of bytevectors
* libguile/srfi-4.h:
* libguile/srfi-4.c (scm_make_srfi_4_vector): New function, exported by
  (srfi srfi-4 gnu).
* libguile/srfi-4.i.c: Removed.
* module/srfi/srfi-4.scm:
* module/srfi/srfi-4/gnu.scm: Reimplement srfi-4 vectors on top of
  bytevectors. The implementation is mostly in Scheme now.

* test-suite/tests/unif.test: Update to use (srfi srfi-4 gnu).

* libguile/bytevectors.c (bytevector_ref_c32, bytevector_ref_c64)
  (bytevector_set_c32, bytevector_set_c64): Fix some embarrassing bugs.
  Still need to do an upper bounds check.

* libguile/deprecated.h: Remove deprecated array functions:
  scm_i_arrayp, scm_i_array_ndim, scm_i_array_mem, scm_i_array_v,
  scm_i_array_base, scm_i_array_dims, and the deprecated macros:
  SCM_ARRAYP, SCM_ARRAY_NDIM, SCM_ARRAY_CONTP, SCM_ARRAY_MEM,
  SCM_ARRAY_V, SCM_ARRAY_BASE, SCM_ARRAY_DIMS.
* libguile/deprecated.c (scm_uniform_vector_read_x)
  (scm_uniform_vector_write, scm_uniform_array_read_x)
  (scm_uniform_array_write): Newly deprecated functions.

* libguile/generalized-arrays.c (scm_array_type): Remove the bytevector
  hack.

* libguile/objcodes.c (scm_bytecode_to_objcode, scm_objcode_to_bytecode):
  Rework to operate on bytevectors, as scm_make_u8vector now causes a
  module lookup, which can't be done e.g. when loading the VM boot
  program for psyntax-pp.go on a fresh bootstrap.

* libguile/objcodes.h (SCM_F_OBJCODE_IS_BYTEVECTOR):
  (SCM_OBJCODE_IS_BYTEVECTOR): s/U8VECTOR/BYTEVECTOR/.

* module/ice-9/boot-9.scm (the-scm-module): A terrible hack to pull in
  (srfi srfi-4), as the bindings are primarily there now. We'll worry
  about this later.
2010-01-07 22:06:56 +01:00
Andy Wingo
e809758a7e clean up macros.[ch]
There are some incompatible changes here, but only to interfaces that
were introduced earlier in 1.9, or interfaces which have been broken
since early in 1.9.

* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump, as the macro
  changes affect the interface that is called by psyntax-generated macro
  definitions.

* libguile/inline.h (scm_words): New function, allocates a variable
  number of contiguous scm_t_bits locations, with a given value in the
  0th word, and 0 in the rest of the words.

* libguile/macros.h: Rework interface to correspond more closely, and
  minimally, to the needs of memoize.c and psyntax.
  (SCM_ASSYNT, SCM_MACRO_TYPE_BITS, SCM_MACRO_TYPE_MASK)
  (SCM_F_MACRO_EXTENDED, SCM_MACROP, SCM_MACRO_TYPE)
  (SCM_MACRO_IS_EXTENDED, SCM_BUILTIN_MACRO_P, SCM_SYNCASE_MACRO_P)
  (SCM_MACRO_CODE, scm_tc16_macro): Remove CPP macros related to the
  representation of Scheme macros.
  (scm_i_make_primitive_macro): Renamed from scm_i_makbimacro.
  (scm_i_macro_primitive): New accessor so that memoize.c can get to the
  primitive syntax transformer.
  (scm_make_syncase_macro, scm_make_extended_syncase_macro)
  (scm_syncase_macro_type, scm_syncase_macro_binding): Removed these
  functions, replaced by make-syntax-transformer and its accessors.
  (scm_macro_binding): New accessor, the same as what
  scm_syncase_macro_binding was.

* libguile/macros.c: All representation details of syntax transformers
  are private to this file now.
  (macro_print): Print macros as #<syntax-transformer ...>, or
  #<primitive-syntax-transformer ...> if psyntax has not attached a
  transformer of its own.
  (scm_i_make_primitive_macro): Represent macros as 5-word smobs.
  (scm_make_syntax_transformer): New constructor for syntax transformers
  (macros), exported to scheme. Takes a name, and looks it up in the
  current module to determine the previous primitive transformer, if
  any.
  (scm_macro_type): Instead of returning 'builtin-macro!, etc, return
  the type as set by psyntax, or #f if it's a primitive.
  (scm_macro_name): Return the stored macro name.
  (scm_macro_transformer): Return the psyntax-set syntax transformer.
  Hacky, but should help introspection somewhat.

* libguile/memoize.c (memoize_env_ref_transformer): Use the new
  scm_i_macro_primitive, and adapt to other macro API changes.

* module/ice-9/psyntax.scm (put-global-definition-hook)
  (get-global-definition-hook, chi-install-global): Call (and generate
  calls to) the new macro constructors and accessors.

* module/ice-9/psyntax-pp.scm: Doubly regenerated.

* module/ice-9/debugging/traps.scm (trap-here): Comment out this
  definition and export, while it's not working.
2010-01-05 15:33:46 +01:00
Andy Wingo
a5bbb22e83 rename goto/args and friends to tail-call, tail-apply, etc
* libguile/vm-i-system.c (tail-call, tail-call/nargs, tail-apply)
  (tail-call/cc): Rename these back to tail-* from goto/*. We should
  reserve the rename-then-goto name for when you actually do a rename
  and goto, not when you shuffle the stack.

* doc/ref/vm.texi:
* module/language/glil/decompile-assembly.scm:
* module/language/tree-il/compile-glil.scm:
* test-suite/tests/tree-il.test: Adapt all callers and documentation.
2010-01-03 14:49:40 +01:00
Andy Wingo
441891f376 cleanups to debugger
* module/system/vm/debug.scm (debugger-repl): Remove the `bindings'
  command, it is superseded by `locals'.
  Update the TODO.
  (debug-pre-unwind-handler): Remove scary "beta" warning. Already being
  able to bt #:width 1000 #:full? #t is quite useful...
2009-12-29 21:26:48 +01:00
Andy Wingo
0c2a05c321 debugger's backtrace implemented in scheme
* module/system/vm/debug.scm (print-locals): Factor out to a function.
  (collect-frames, print-frames): Implement the guts of `backtrace' in
  Scheme.
  (debugger-repl): Add #:width and #:full? options to `backtrace'.
  Backtrace uses the backtrace code implemented in scheme.
2009-12-29 21:19:05 +01:00
Andy Wingo
9274c3dd40 ~:@y allows for truncation to an absolute maximum width
* module/ice-9/format.scm (format): Allow ~:@y to interpret the width as
  the maximum width, inclusive of whatever else has already been output.
* doc/ref/misc-modules.texi (Formatted Output): Document this.
2009-12-29 21:15:08 +01:00
Andy Wingo
2d8c757cf1 integers at debugger select frames
* module/system/vm/debug.scm (debugger-repl): Fix implementation of
  frame-at-index. Allow integers as commands, as a shorthand for "frame
  N".
2009-12-29 14:35:10 +01:00
Andy Wingo
1c5e812258 clean up (system vm frames), add locals command to debugger
* libguile/frames.c (scm_init_frames): No need to bootstrap the VM here,
  it should be already bootstrapped by init.c.
  (scm_bootstrap_frames): No need to register an extension, as
  scm_init_frames is called by init.c.

* module/system/vm/frame.scm: Don't load the scm_init_frames extension,
  as the primitives from frames.c are loaded by Guile's init.
  (frame-bindings): Change to return bindings, as can be accessed by the
  binding: accessors from program.scm.
  (frame-lookup-binding): Revive and make this one work with current
  code.
  (frame-binding-set!):
  (frame-binding-ref): Use the new frame-lookup-binding. Perhaps these
  should handle boxing and unboxing, though.
  (frame-source): New accessor, returns a source object.
  (frame-call-representation): Change to return a full list, as
  truncated-print can truncate for us.
  (frame-environment, frame-object-binding, frame-object-name): Update
  not to take an address, as the address is part of the frame.
  (frame-variable-exists?, frame-variable-ref, frame-variable-set!)
  (frame-local-variables, frame-program-name, print-frame)
  (print-frame-chain-as-backtrace, frame-file, frame-line-number)
  (make-frame-chain, bootstrap-frame?, frame-number, frame-address):
  Remove these outdated functions.

* module/system/vm/debug.scm (debugger-repl): Use
  frame-call-representation, and ~@y.
  (locals): New command, prints local variables in a frame.
2009-12-29 14:09:50 +01:00
Andy Wingo
b8596c08ac add ~@y truncated printing directive to format
* doc/ref/misc-modules.texi (Formatted Output): Add documentation for
  the new ~@y format directive.
  (Pretty Printing): Add documentation for truncated-write.

* module/ice-9/format.scm (format): Add ~@y, for doing a truncated
  print. Also, allow both ~y variants to take a width parameter.
2009-12-29 13:29:02 +01:00
Andy Wingo
8c6eea2f1a add truncated-print to (ice-9 pretty-print)
* module/ice-9/pretty-print.scm (pretty-print): Rework so "port" is the
  kwarg, and "port*" is the optional arg. #:port is still the keyword.

  (truncated-print): Add a printer that will ensure that the output
  stays within a certain width. It could use genwrite but it doesn't
  because it seems nice to allow breadth-first allocation of screen
  space, and it's also nice to balance some delimiters (e.g. #< and >).
2009-12-29 13:29:02 +01:00
Andy Wingo
c1ff4aa786 pretty-print is a lambda*
* module/ice-9/pretty-print.scm (pretty-print): Fix to always be a
  define*. Shouldn't change behavior, but it will be more
  introspectible.
2009-12-28 17:41:50 +01:00
Andy Wingo
9a9d82c28c fix bug bindings lexical vars within optargs initializers
* module/language/tree-il/analyze.scm (analyze-lexicals): Fix bug in
  which variables bound within inits were being improperly allocated.
* module/language/tree-il/compile-glil.scm (vars->bind-list): More
  detail in terrible debugging clause.
* test-suite/tests/optargs.test ("lambda* inits"): Add tests for binding
  vars within inits.
2009-12-28 17:41:50 +01:00
Andy Wingo
aac006ddec fix defmacro*
* module/ice-9/optargs.scm (defmacro*): Fix implementation -- defmacro*
  takes Lisp-like arguments.
  (defmacro*-public): Fix also, expanding into defmacro*.

* THANKS: Thanks to Tristan Colgate for the report.

* test-suite/tests/optargs.test: Add defmacro* tests.
2009-12-28 11:50:45 +01:00
Andy Wingo
a927454d25 (syntax foo) -> #'foo in boot-9
* module/ice-9/boot-9.scm: Change instances of (syntax foo) to use the
  reader macro #'.
2009-12-28 11:44:06 +01:00
Andy Wingo
d7a4096d25 implement up, down, frame, and bindings in the repl
* module/system/vm/debug.scm (debugger-repl): Implement up, down, frame,
  and bindings using the new command infrastructure.
2009-12-24 14:20:41 +01:00
Andy Wingo
f6fe5fe26b rewrite debugger command loop
* module/system/vm/debug.scm: Rewrite the command loop to have better
  introspection and argument handling.
2009-12-24 08:28:59 +01:00
Andy Wingo
f6a8e79197 keyword arg errors throw to 'keyword-argument-error
* libguile/vm-engine.c (VM_NAME): Keyword arg errors are now thrown to
  'keyword-argument-error.

* libguile/vm.c: Define sym_keyword_argument_error, and statically
  allocate some other symbols.

* module/ice-9/optargs.scm (parse-lambda-case): Throw to
  'keyword-argument-error in kwarg error cases.

* module/ice-9/psyntax.scm (build-lambda-case): Remove a couple
  workarounds for the old memoizer. Throw to 'wrong-number-of-args if
  the lambda-case fails to parse.

* module/ice-9/psyntax-pp.scm: Regenerated.

* test-suite/tests/optargs.test: Update expected exceptions.
2009-12-23 22:59:12 +01:00
Andy Wingo
1ad7fef524 implement a silly debugger
* module/system/vm/debug.scm: Implement the skeleton of a debugger. Not
  very useful yet.

* module/system/repl/repl.scm (call-with-backtrace): Have the pre-unwind
  hook drop the user into the debugger. Hopefully we can have something
  better within a couple weeks.
2009-12-22 23:38:06 +01:00
Andy Wingo
0dfe0e7588 fix warning-caught bug in boot-9
* module/ice-9/boot-9.scm: Fix bug caught by warnings.
2009-12-22 22:52:48 +01:00
Julian Graham
dca14012bd Complete support for version information in Guile's `module' form.
* module/ice-9/boot-9.scm (try-load-module, try-module-autoload): Check
  for version argument and use `find-versioned-module' if present.
* module/ice-9/boot-9.scm (find-versioned-module, version-matches?)
  (module-version, set-module-version!, version-matches?): New
  functions.
* module/ice-9/boot-9.scm (module-type, make-module, resolve-module)
  (try-load-module, process-define-module, make-autoload-interface)
  (compile-interface-spec): Add awareness and checking of version
  information.
* doc/ref/api-modules.texi (R6RS Version References): New subsubsection.
  (General Information about Modules): Explain differences in search
  process when version references are used.
  (Using Guile Modules) (Creating Guile Modules): Document `#:version'
  keyword.
2009-12-22 20:34:55 +01:00
Julian Graham
78c22f5edc Support for renaming bindings on module export.
* module/ice-9/boot-9.scm (module-export!, module-replace!)
  (module-re-export!): Allow members of export list to be pairs, mapping
  internal names to external ones.

* doc/ref/api-modules.texi (Creating Guile Modules): Update
  documentation for `#:export', `#:export-syntax', `#:replace',
  `#:re-export', `#:re-export-syntax', `export', and `re-export' to
  reflect new format for arguments.
2009-12-22 20:34:50 +01:00
Julian Graham
820f33aaed Improved support for Unicode title case in Guile's string and character APIs.
* doc/ref/api-data.texi (Characters): Documentation for `char-titlecase'.
* doc/ref/api-i18n.texi (Character Case Mapping): Documentation for
  `char-locale-titlecase' and `string-locale-titlecase'.

* libguile/chars.c, libguile/chars.h (scm_char_titlecase, scm_c_titlecase): New
  functions.

* libguile/i18n.c, libguile/i18n.h (chr_to_case, scm_char_locale_titlecase,
  str_to_case, scm_string_locale_titlecase): New functions.
* libguile/i18n.c (scm_char_locale_downcase, scm_char_locale_upcase,
  scm_string_locale_downcase, scm_string_locale_upcase): Refactor to share code
  via chr_to_case and str_to_case, as appropriate.
* module/ice-9/i18n.scm (char-locale-title-case, string-locale-titlecase): New
  functions.

* libguile/srfi-13.c (string_titlecase_x): Use uc_totitle instead of uc_toupper.

* test-suite/tests/chars.test: Tests for `char-titlecase'.
* test-suite/tests/i18n.test: Tests for `char-locale-titlecase' and
  `string-locale-titlecase'.
* test-suite/tests/srfi-13.test: Tests for `string-titlecase'.
2009-12-22 00:19:56 -05:00
Andy Wingo
9b5a0d8460 untabify boot-9.scm
* module/ice-9/boot-9.scm: Untabify.
2009-12-22 00:58:12 +01:00
Andy Wingo
737caee88d tracing at repl
* module/system/repl/command.scm (option, trace): Integrate tracing (via
  ,trace or ,tr).
2009-12-21 23:13:05 +01:00
Andy Wingo
9eaa8fef80 (system vm trace) sorta working
* module/system/vm/trace.scm: Update to work with the current VM and its
  tracing infrastructure.
2009-12-21 23:03:43 +01:00
Andy Wingo
7656f19446 rework vm tracing
* libguile/vm-engine.c (VM_NAME): Engines take the VM itself (not the
  vp), so they can pass the VM to hooks. No more hook args, we dispatch
  without them.

* libguile/vm-engine.h (RUN_HOOK): Dispatch the hook if the trace level
  is positive (instead of if the hook is there). Don't cache registers
  on return from the dispatch.

* libguile/vm.h:
* libguile/vm.c (vm_dispatch_hook): Don't bother with a dynwind; instead
  decrement the trace level when going into a hook, and if we have a
  nonlocal exit, the trace level never gets incremented again. Worse is
  better.
  (make_vm, scm_vm_trace_level, scm_set_vm_trace_level_x): New concept,
  trace level. If positive, we run the hooks, otherwise we don't. Should
  work. Removed scm_vm_trace_frame, I don't think that was the right way
  to do it.

* module/system/vm/vm.scm: Replace vm-trace-frame with vm-trace-level
  and set-vm-trace-level!; the hooks actually get the frame as an
  argument now.
2009-12-21 21:57:20 +01:00
Andy Wingo
a6dc56a71e poor man's statprof integration with the repl: ,pr
* module/system/repl/command.scm (profile): Add a very poor integration
  of statprof with the repl.
2009-12-21 00:08:18 +01:00
Andy Wingo
c55cb58ac1 integrate guile-lib docs 2009-12-21 00:01:49 +01:00
Andy Wingo
05c29c5abc texinfo fixes
* module/texinfo.scm (parser-error): Throw to 'parser-error, as ssax's
  input-parse does.
  (texi-command-depth): Fix docstring so as not to confuse emacs.
  (parse-table-args): Fix parser-error call to include port.
2009-12-21 00:01:49 +01:00
Andy Wingo
c165c50d07 tweaks to statprof
* module/statprof.scm (make-call-data): Change so that call-data holds
  the proc, not its name. Remove set-call-data-name!.
  (get-call-data): Adapt caller.
  (sample-stack-procs): Always sample procedures on the stack, even
  anonymous ones.
  (profile-signal-handler): Fix stack cutting to work with compiled
  statprof.scm.
  (count-call): Always count calls, even to anonymous procedures.
  (statprof-call-data->stats): Use call-data-printable for printing the
  call data.
  (statprof-display-anomolies): Fix a couple longstanding bugs caught by
  compiler warnings.
2009-12-21 00:01:49 +01:00
Andy Wingo
47f3ce525e import statprof, sxml, and texinfo from guile-lib
* module/Makefile.am (LIB_SOURCES): Add statprof, sxml, and texinfo to
  the build.
  (NOCOMP_SOURCES): Reindent, and add the upstream SSAX files.

* module/statprof.scm:
* module/sxml/apply-templates.scm:
* module/sxml/fold.scm:
* module/sxml/simple.scm:
* module/sxml/ssax.scm:
* module/sxml/ssax/input-parse.scm:
* module/sxml/transform.scm:
* module/sxml/upstream/COPYING.SSAX:
* module/sxml/upstream/SSAX.scm:
* module/sxml/upstream/SXML-tree-trans.scm:
* module/sxml/upstream/SXPath-old.scm:
* module/sxml/upstream/assert.scm:
* module/sxml/upstream/input-parse.scm:
* module/sxml/xpath.scm:
* module/texinfo.scm:
* module/texinfo/docbook.scm:
* module/texinfo/html.scm:
* module/texinfo/indexing.scm:
* module/texinfo/plain-text.scm:
* module/texinfo/reflection.scm:
* module/texinfo/serialize.scm:
* module/texinfo/string-utils.scm: Add files from guile-lib to Guile.
  It's only Richard, Andreas, Rob, and myself that have copyright on
  these, and we have all assigned to the FSF. SSAX itself is in the
  public domain.
2009-12-21 00:01:13 +01:00
Andy Wingo
fd5985271f psyntax's labels and marks now unique over a read/write boundary
* module/ice-9/psyntax.scm (gen-label, new-mark): Labels and marks need
  to be unique across read/write boundaries -- it's not sufficient for
  them to simply be unique within a process by virtue of (string #\i)
  constructing a new object. This used to mostly work before, because
  the collapsing of duplicate constants didn't catch many syntax-object
  cases -- but for some reason the attached test case brings out the
  problem. So switch to use gensyms. Potentially more costly, but it's
  what upstream psyntax does now.

  This bug took me fully two days to figure out.

* module/ice-9/psyntax-pp.scm: Regenerated.

* test-suite/tests/syncase.test ("serializable labels and marks"): Add
  test case.
2009-12-20 15:30:32 +01:00
Ludovic Courtès
eb80072df0 Change the Elisp compiler from GPLv2+ to LGPLv3+.
* module/language/elisp/bindings.scm, module/language/elisp/lexer.scm,
  module/language/elisp/parser.scm, module/language/elisp/runtime.scm,
  module/language/elisp/runtime/function-slot.scm,
  module/language/elisp/runtime/macro-slot.scm,
  module/language/elisp/runtime/value-slot.scm: Switch from GPLv2+ to
  LGPLv3+; fix copyright year.
2009-12-15 19:10:48 +01:00
Andy Wingo
9331f91cc4 primitive-eval passes first N args on stack directly, not via apply
* libguile/memoize.c (MAKMEMO_CALL): Memoize in the number of arguments
  at the call site.
  (memoize, scm_m_cond, memoize_named_let, unmemoize):
* libguile/eval.c (eval): Adapt to changes in call memoization.

* module/ice-9/eval.scm (primitive-eval): For calls, pass the first N
  arguments directly on the stack, and only the rest as a consed
  argument list to apply. Currently N is 4.
2009-12-13 17:19:59 +01:00
Andy Wingo
4abb824cdb interpreted closures cons less.
* module/ice-9/eval.scm (primitive-eval): When making a closure with N
  formals, actuall return a closure with N formals, if N is less than
  *max-static-argument-count*, which currently is 8. If N is greater
  than 8, do the arg-parsing loop as we did before. Requires some
  macrology, but should reduce unnecessary consing for interpreted
  closures.

* test-suite/tests/goops.test:
* test-suite/tests/hooks.test: Now that checks like (thunk? foo) are
  going to work as a for interpreted code, remove some (throw
  'unresolved).
2009-12-13 16:18:39 +01:00
Andy Wingo
492e7efe6d lame tweak to the inliner
* module/language/tree-il/inline.scm: Tweak to avoid a (if #t #t #f).
  Yes, it's lame.
2009-12-12 00:10:35 +01:00
Ludovic Courtès
2cf7ff2e79 SRFI-1: Use the built-in optional argument support.
* module/srfi/srfi-1.scm (iota, unfold, unfold-right, alist-delete,
  alist-delete!): Use `define*' and optional arguments instead of rest
  arguments.
2009-12-11 15:20:12 +01:00
Ludovic Courtès
dd902692fd Fix expansion of `(+ 1 x)'.
* module/language/tree-il/primitives.scm (+): Fix typo.
2009-12-11 14:56:49 +01:00
Ludovic Courtès
fe258c43a1 SRFI-9: Make accessors inlinable.
* module/srfi/srfi-9.scm (define-inlinable): New macro.
  (define-record-type): Use it.
2009-12-11 13:03:46 +01:00