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

13597 commits

Author SHA1 Message Date
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
c5f171027d fix bug in string array implementation type mask
* libguile/strings.c (SCM_ARRAY_IMPLEMENTATION): The mask for the string
  array implementation should be 0x7f, without masking out 0x2.
  Otherwise numbers were being thought to be vectors!

* test-suite/tests/unif.test: Add test.

* libguile/vectors.c (SCM_ARRAY_IMPLEMENTATION): Only register one
  implementation, because weak vectors can be checked with the mask &
  ~2, and the functions are the same.
2009-12-29 13:29:02 +01:00
Michael Gran
a1dcb961a6 Add documentation for scm_c_upcase et al
* doc/ref/api-data.texi: document scm_c_upcase, scm_c_downcase,
  scm_c_titlecase, and scm_t_wchar
2009-12-28 15:26:10 -08: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
b597129782 Merge branch 'read-fix' 2009-12-28 17:36:44 +01:00
Andy Wingo
b521d265b1 Fix bugs reading long tokens
The commit "don't take string-write mutex in read.c:read_token", from
8b0d7b9d94, had a number of bugs. Not sure
how I missed these before.

* libguile/read.c (read_token): Remove a couple of bogus
  scm_i_string_stop_writing () calls, now that we no longer take the
  string-write mutex.
  (read_complete_token): read_token really needs a fresh buffer, which
  was not the case when we are reading long tokens and thus hit the
  overflow case. Fixes fractions.test.
2009-12-28 17:35:48 +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
Michael Gran
b349875146 Incorrect indexing into character name list
When converting a character into a character name, an incorrect
character name could theoretically have been returned.

* libguile/chars.c (scm_i_charname): used wrong index into
  scm_alt_charnames
2009-12-27 18:44:29 -08:00
Neil Jerram
3323ec063c Automatic manual updates following libguile docstring changes
Affecting the following procedures:

* doc/ref/api-compound.texi (Uniform Numeric Vectors):
  uniform-array-read!

* doc/ref/api-data.texi (Complex): make-rectangular, string=?,
  string<?, string<=?, string>?, string>=?, string-ci=?, string-ci<?,
  string-ci<=?, string-ci>?, string-ci>=?, string-append/shared

* doc/ref/api-evaluation.texi (Reader Extensions): read-hash-extend

* doc/ref/api-procedures.texi (Procedures with Setters): procedure,
  macro?, macro-type

* doc/ref/api-undocumented.texi: module-import-interface,
  %method-more-specific?

* doc/ref/new-docstrings.texi: uniform-array->bytevector,
  %start-stack, guardian-destroyed?, guardian-greedy?,
  destroy-guardian!, gc-dump, gc-disable, gc-enable,
  make-generalized-vector, set-primitive-generic!, nl-langinfo,
  %warn-autocompilation-enabled, make-syncase-macro,
  make-extended-syncase-macro, syncase-macro-type,
  syncase-macro-binding, memoize-expression, unmemoize-expression,
  memoized-expression-typecode, memoized-expression-data,
  memoized-typecode, memoize-variable-access!, module-local-variable,
  module-variable, eval-closure-module, module-transformer,
  module-public-interface, define!, module-reverse-lookup, cddr,
  make-promise, %get-stack-size, %string-dump, %symbol-dump,
  string-bytes-per-char, uniform-vector-element-type,
  uniform-vector-element-size, canonicalize-path, getrlimit, setrlimit

* doc/maint/guile.texi: Corresponding tracking updates.
2009-12-27 23:24:09 +00:00
Neil Jerram
211a5b0425 Doc for getsid
* NEWS: Note new getsid primitive.

* doc/ref/posix.texi (Processes): Document getsid.
2009-12-27 18:44:41 +00:00
Neil Jerram
3e5aed1c3b Add support for getsid
* configure.ac: Check availability of getsid() C library call.

* libguile/posix.c (scm_getsid): New primitive.

* libguile/posix.h: Declaration for new primitive.
2009-12-27 16:59:54 +00:00
Julian Graham
0ca3a342d1 Support for Unicode general categories
* libguile/chars.c, libguile/chars.h (scm_char_general_category): New function.
* test-suite/tests/chars.test: Unit tests for `char-general-category'.
* doc/ref/api-data.texi (Characters): Documentation for
  `char-general-category'.
2009-12-24 11:55:47 -05: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
8b0d7b9d94 don't take string-write mutex in read.c:read_token
* libguile/read.c (read_token): Don't take the string-write mutex when
  reading a token into a buffer, because it's assumed that the buffer is
  fresh (not seen by other threads), and a soft port can call a
  procedure that needs the string-write mutex.
2009-12-21 22:12:31 +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
86fd6dff2a add scm_call_n, scm_c_run_hookn
* libguile/eval.h:
* libguile/eval.c (scm_call_n): New function, applies a function to an
  array of args.

* libguile/hooks.h:
* libguile/hooks.c (scm_c_run_hookn): New function, runs a hook with an
  array of args.
2009-12-21 21:06:27 +01:00
Andy Wingo
700908288c remove "module system quirks" from the manual
* doc/ref/api-modules.texi (Module System Quirks): Remove this outdated
  section.
2009-12-21 11:54:48 +01:00
Neil Jerram
3ce5e1304b Placeholders for expected remaining Intro sections
* doc/ref/intro.texi (Introduction): Add menu entries and sections for
  `Guile and the GNU Project', `Interactive Programming' and
  `Supporting Multiple Languages'.
2009-12-21 01:09:43 +00:00
Neil Jerram
c6c8e7e06d More intro text on combining with C code
* doc/ref/intro.texi (Combining with C): New paragraph.
2009-12-21 01:02:56 +00: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
500f6a47e2 add test suites 2009-12-21 00:01:50 +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
c66fe8a9a0 version.h depends on config.status
* libguile/Makefile.am (version.h): Depend on config.status, so if we
  reconfigure we make sure to regenerate the version.
2009-12-20 23:26:42 +01:00
Andy Wingo
7d94e4af98 handle interrupts in mv-call, return/values
* libguile/vm-i-system.c (mv-call, return/values): Interrupt before
  entering and leaving MV frames as well as normal frames.
2009-12-20 23:24:39 +01:00
Andy Wingo
d5f9864ffc remove scm_add_method
* libguile/goops.h:
* libguile/goops.c (scm_add_method): Remove this function. It didn't
  work, and even if we fixed it to work it wouldn't be as good as using
  Scheme's `add-method!'.
2009-12-20 15:34:19 +01:00
Andy Wingo
31c944228c guile-config depends on config.status
* meta/Makefile.am (guile-config): Depend on config.status, so that if
  $prefix changes, guile-config gets rebuilt.
2009-12-20 15:34:19 +01:00
Andy Wingo
3c98a49cbd in the load path, look in library-dir before site-dir
* libguile/load.c (scm_init_load_path): Search first in Guile's
  version-specific path (the library path), *then* in the site dir. This
  should allow us to import some of Guile-lib's modules into Guile,
  perhaps customizing them with Guile-version-specific foo, without
  accidentally falling back to system-installed guile-lib in the
  sitedir. Also should reduce the number of stats by half, in the common
  case.
2009-12-20 15:34:19 +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
Neil Jerram
84d86e7453 Typo and formatting
* doc/ref/intro.texi (Introduction): "onScheme" -> "on Scheme".  Add
  blank lines around @itemize block - looks better in Info.
2009-12-19 23:49:23 +00:00
Neil Jerram
cdda4e0a3d Remove obsolete and empty Tcl/Tk file
* doc/ref/Makefile.am (guile_TEXINFOS): Remove tcltk.texi.

* doc/ref/tcltk.texi: Deleted.
2009-12-19 23:37:28 +00:00
Neil Jerram
ebb6158f23 More about Guile's relationship to Scheme standards
Also continue adding a bit more structure to the introductory "what is
Guile" material.

* doc/ref/intro.texi (Introduction): Split `What is Guile?' (which is
  a bad heading, since we've already answered that...) into `Guile and
  Scheme' and `Combining with C'.  Further splits will follow, to
  cover the other toplevel bullet points.

  (Guile and Scheme): Remove `packaged for use in a wide variety of
  environments', as I don't see what this can mean to the reader at
  this point.  Add text about R6RS and SRFIs.
2009-12-19 23:32:22 +00:00