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

11737 commits

Author SHA1 Message Date
Andy Wingo
acf04ab462 update NEWS for 1.9.2
* NEWS: Update.
2009-08-15 12:49:55 +02:00
Ludovic Courtès
7577d1c4ba Update `.gitignore' for GNU Global. 2009-08-15 12:06:28 +02:00
Ludovic Courtès
c1a15f3dd7 Switch from guile-1.8.pc' to guile-2.0.pc'.
* configure.ac: Produce guile-2.0*.pc.

* meta/Makefile.am (EXTRA_DIST): Rename guile-1.8*.pc.in to
  guile-2.0*.pc.in.
  (pkgconfig_DATA): Update accordingly.

* meta/guile-config (guile-module): Likewise.
2009-08-15 12:05:36 +02:00
Ludovic Courtès
e3c9c676ae Uncomment run-time objcode alignment check.
This should now work thanks to the changes in
28b119ee3d ("make sure all programs are
8-byte aligned").  This commit is a follow-up to
ec99fe8ecb ("Add FIXMEs about misaligned
objcode-metas.").

* libguile/objcodes.c (scm_c_make_objcode_slice): Uncomment assertion
  that checks for proper alignment of PTR.

* module/language/assembly/compile-bytecode.scm (write-bytecode): Update
  comment about META's alignment.
2009-08-13 23:59:51 +02:00
Ludovic Courtès
b3ce13b667 Remove deprecated semi-public memoizers.
* libguile/eval.c (scm_m_expand_body, scm_macroexp, scm_unmemocar):
  Remove.
  (scm_m_undefine): Make `static'.

* libguile/eval.h (scm_m_undefine, scm_m_expand_body, scm_unmemocar,
  scm_macroexp): Remove declarations.
2009-08-13 23:36:46 +02:00
Ludovic Courtès
4d0949ea45 Make the evaluator's memoizers private.
* libguile/eval.c (macroexp): Move upwards.
  (scm_m_quote, scm_m_begin, scm_m_if, scm_m_set_x, scm_m_and, scm_m_or,
  scm_m_case, scm_m_cond, scm_m_lambda, scm_m_letstar, scm_m_do,
  scm_m_quasiquote, scm_m_delay, scm_m_generalized_set_x,
  scm_m_define, scm_m_letrec, scm_m_let, scm_m_at, scm_m_atat,
  scm_m_apply, scm_m_cont, scm_m_nil_cond, scm_m_atfop,
  scm_m_atbind, scm_m_atslot_ref, scm_m_atslot_set_x,
  scm_m_at_call_with_values, scm_m_eval_when): New static
  declarations; definitions made static.
  (s_atslot_ref, s_atslot_set_x): New, from `goops.c'.

* libguile/eval.h (scm_m_quote, scm_m_begin, scm_m_if, scm_m_set_x,
  scm_m_vref, scm_m_vset, scm_m_and, scm_m_or, scm_m_case, scm_m_cond,
  scm_m_lambda, scm_m_letstar, scm_m_do, scm_m_quasiquote, scm_m_delay,
  scm_m_generalized_set_x, scm_m_future, scm_m_define, scm_m_letrec,
  scm_m_let, scm_m_at, scm_m_atat, scm_m_apply, scm_m_cont,
  scm_m_nil_cond, scm_m_atfop, scm_m_atbind, scm_m_atslot_ref,
  scm_m_atslot_set_x, scm_m_atdispatch, scm_m_at_call_with_values,
  scm_m_eval_when): Remove public declarations.

* libguile/goops.c (s_atslot_ref, s_atslot_set_x): Remove.
2009-08-13 23:30:49 +02:00
Ludovic Courtès
d785171115 compiler.test: Enforce evaluation order.
* test-suite/tests/compiler.test ("psyntax")["redefinition", "compile in
  current module", "compile in fresh module"]: Use `begin' to enforce
  evaluation order.  Thanks Andy!
2009-08-13 16:16:08 +02:00
Ludovic Courtès
16f451f308 Allow fresh modules to be passed to `compile'.
* module/ice-9/boot-9.scm (module-name): When making MOD non-anonymous,
  bind it in the `(%app modules)' name space.

* test-suite/tests/compiler.test ("psyntax")["compile in current
  module", "compile in fresh module"]: New tests.

* test-suite/tests/modules.test ("foundations")["modules don't remain
  anonymous"]: New test.
2009-08-13 15:57:01 +02:00
Ludovic Courtès
b9434165b6 Allow redefinitions in compiled code as in `(define round round)'.
* module/ice-9/psyntax-pp.scm: Regenerate.

* module/ice-9/psyntax.scm (chi-top)[define-form]: If a same-named
  imported variable exists, take its value instead of `#f'.

* test-suite/tests/compiler.test ("psyntax")["redefinition"]: New tests.
2009-08-13 15:50:37 +02:00
Andy Wingo
98850fd727 update docs for recent vm/compiler work
* doc/ref/compiler.texi:
* doc/ref/vm.texi: Update for recent changes.
* module/language/assembly/disassemble.scm (disassemble-load-program):
  Don't print nops, they are distracting.
2009-08-12 23:38:05 +02:00
Andy Wingo
aaae0d5ab3 "fix" <let>-bound lambda expressions too
* module/language/tree-il/compile-glil.scm (compile-glil): Compute
  warnings before optimizing, as unreferenced variables will be
  optimized out.

* libguile/_scm.h: Fix C99 comment.

* module/language/tree-il/fix-letrec.scm (partition-vars): Also analyze
  let-bound vars.
  (fix-letrec!): Fix a bug whereby a set! to an unreffed var would be
  called for value, not effect. Also "fix" <let>-bound lambda
  expressions -- really speeds up pmatch.

* test-suite/tests/tree-il.test ("lexical sets", "the or hack"): Update
  to take into account the new optimizations.
2009-08-12 21:29:08 +02:00
Michael Gran
eca29b0202 Don't include libunistring headers in Guile public headers
This requres the creation of a new type
scm_t_string_failed_conversion_handler to replace libunistring's
enum iconveh_ilseq_handler.

* libguile/strings.h: don't include <uniconv.h>
(scm_t_string_failed_conversion_handler): new enum type
(SCM_FAILED_CONVERSION_ERROR, SCM_FAILED_CONVERSION_QUESTION_MARK):
(SCM_FAILED_CONVERSION_ESCAPE_SEQUENCE): new enum type values

* libguile/strings.c (scm_to_stringn): now takes type
scm_t_string_failed_conversion_handler.  All callers changed.

* libguile/print.c: include <uniconv.h>

* libguile/ports.c (scm_lfwrite_substr): use
scm_t_string_conversion_handler's constants

* libguile/gen-scmconfig.c (SCM_ICONVEH_ERROR):
(SCM_ICONVEH_QUESTION_MARK, SCM_ICONVEH_ESCAPE_SEQUENCE): store
iconveh_ilseq_hander constants as #define's
2009-08-12 09:21:55 -07:00
Michael Gran
3c7cf7f5c0 Regression, scm_string fails to test for circular lists
* libguile/string.c (scm_string): Restores the functionality
  where scm_string tests for circular lists

* test-suite/tests/strings.test: add test for circular lists
2009-08-12 09:21:37 -07:00
Michael Gran
bd4911efd2 Some signed/unsigned comparison and conversions
* libguile/ports.c (scm_lfwrite_str, scm_lfwrite_substr): signed/unsigned
  conversion and comparison

* libguile/strings.c (scm_string_append): signed/unsigned comparison
2009-08-12 08:50:45 -07:00
Andy Wingo
94ff26b96b rework the vm support for wide strings
* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump.

* libguile/vm-engine.c (vm_error_bad_wide_string_length): New error
  case.

* libguile/vm-i-loader.c (load-unsigned-integer, load-integer)
  (load-keyword): Remove these instructions. The former two are
  obsoleted by make-int64/make-uint64, the latter via make-keyword.
  (load-string): Only handle narrow strings.
  (load-symbol): Only handle narrow symbols. The wide case is handled
  via make-symbol.
  (load-wide-string): New instruction, for wide strings.

* libguile/vm-i-system.c (define): Move here from loaders.c, as now it
  just takes a sym on the stack.
  (make-keyword, make-symbol): New instructions.

* module/language/assembly.scm: Remove removed instructions. No more
  width byte in load-string etc.

* module/language/assembly/compile-bytecode.scm (write-bytecode): Adapt
  to change in instruction set.

* module/language/glil/compile-assembly.scm (glil->assembly): Compile
  define by pushing the sym then emitting (define).
  (dump-object): Dump narrow and wide strings differently. Use
  make-keyword and make-symbol as appropriate.

* module/language/tree-il/compile-glil.scm (flatten): When compiling a
  ref to a primitive (not a call), first see if the primitive is
  actually bound in the root module. (That's not the case with e.g.
  bytevector-u8-ref).

* module/system/xref.scm (program-callee-rev-vars): Don't parse out
  "nexts".

* test-suite/tests/asm-to-bytecode.test ("compiler"): Adapt to bytecode
  format change.
2009-08-12 16:34:05 +02:00
Michael Gran
6cf4830798 Fix disassembly of strings and symbols
* module/language/assembly/decompile-bytecode.scm (decode-bytecode):
  fix disassembly of strings, symbols, keywords, and defines
2009-08-12 00:26:12 -07:00
Michael Gran
744c8724a7 Quiet signed/unsigned comparison warnings in chars.[ch]
* libguile/chars.h (SCM_MAKE_CHAR): quiet signed/unsigned
  comparison warnings

* libguile/chars.c (scm_i_charname):
  (scm_i_charname_to_char): quiet signed/unsigned comparison
  warnings
2009-08-11 22:56:18 -07:00
Michael Gran
9909c3956a Avoid unitialized and unused warnings in scm_string_append
* libguile/strings.c (scm_string_append): avoid warnings
2009-08-11 22:12:22 -07:00
Michael Gran
4cd00cc6b2 Revert to locale-dependent toupper and tolower
To avoid leaving Guile in a broken state, the conversion
from locale-dependent case modification to Unicode case modification
should be an atomic commit

* libguile/chars.c (scm_c_upcase): revert to locale-dependent
  toupper and tolower
2009-08-11 21:27:20 -07:00
Michael Gran
30a6b9caa9 Only pass ints to tolower and toupper
* libguile/strings.c (unistring_escapes_to_guile_escapes): cast
  tolower's parameter to int

* libguile/read.c (CHAR_DOWNCASE): cast tolower's parameter to int
2009-08-11 21:12:52 -07:00
Andy Wingo
eb1482ac46 debitrot the ecmascript compiler
* module/Makefile.am (ECMASCRIPT_LANG_SOURCES):
* module/language/ecmascript/compile-ghil.scm:
* module/language/ecmascript/compile-tree-il.scm: SOURCES): Replace the
  GHIL compiler with a ->tree-il compiler. Not fully functional, but the
  basics work.

* module/language/ecmascript/spec.scm: Only include the tree-il compiler.

* module/language/ecmascript/tokenize.scm (read-punctuation): Avoid
  mutating a constant.
2009-08-12 00:14:44 +02:00
Andy Wingo
6e5c02b8a3 make the fallback path look less like line noise
* libguile/_scm.h:
* libguile/load.c: Rework to only include the relevant pieces in the
  fallback path.
2009-08-11 21:16:05 +02:00
Andy Wingo
86cfb42d56 include objcode cookie in the fallback path
* libguile/_scm.h (SCM_OBJCODE_COOKIE): Move the objcode cookie define
  here, so that load.c can use it. This is a private header.

* libguile/load.c (FALLBACK_DIR): Include the objcode cookie in the
  fallback path. Should fix problems when objcode changes incompatibly
  during the 1.9 series.

* libguile/objcodes.c: Adapt to SCM_OBJCODE_COOKIE move.

This should fix http://article.gmane.org/gmane.lisp.guile.devel/9059.
2009-08-11 20:25:44 +02:00
Michael Gran
f5d7662fc8 More string and symbol tests
* test-suite/tests/strings.test: more tests

        * test-suite/tests/symbols.test: more tests
2009-08-10 23:05:52 -07:00
Michael Gran
88ed5759cd Fix %string-dump and %symbol-dump fields
* libguile/strings.c (scm_sys_string_dump): don't print
        stringbuf. Print read-only status.
        (scm_sys_symbol_dump): don't print stringbuf.  Print interned
        status.
2009-08-10 23:05:38 -07:00
Ludovic Courtès
dab1ed3767 Change `defined?' to accept a module as its second argument.
Reported by Daniel Kraft <d@domob.eu>.

* doc/ref/api-binding.texi (Binding Reflection): Update documentation of
  `defined?'.

* libguile/evalext.c (scm_defined_p): Expect a module as the second
  argument, not a lexical environment.
2009-08-10 19:24:34 +02:00
Michael Gran
32be5735cd Make scm_charprint and scm_i_string_wide_chars SCM_INTERNAL.
Also, scm_charprint is renamed to scm_i_charprint.

        * libguile/strings.h: make scm_i_string_wide_chars internal.

        * libguile/print.h: rename scm_charprint to scm_i_charprint.  Make
        internal.

        * libguile/print.c (scm_i_charprint): renamed from scm_charprint
        (scm_charprint): renamed to scm_i_charprint. All callers changed.
2009-08-10 05:51:05 -07:00
Michael Gran
6ce6923b68 Improve %string-dump and %symbol-dump
%string-dump and %symbol-dump are modified to return assocation lists
of string and symbol attributes instead of printing to stderr.  They
are no longer conditional on SCM_DEBUG.

        * libguile/strings.c (scm_sys_string_dump)
        (scm_sys_symbol_dump): now returns alist of properties.  No longer
        require that SCM_DEBUG be defined.
        (scm_sys_stringbuf_hist): now conditional on
        SCM_STRING_LENGTH_HISTOGRAM

        * libguile/strings.h: scm_sys_string_dump and scm_sys_symbol dump
        are now declared as API
2009-08-10 00:09:33 -07:00
Michael Gran
50b1996f1b More comments for string functions
* libguile/strings.c: comments
2009-08-09 18:06:59 -07:00
Michael Gran
4847dc172f Missing parentheses in SCM_MAKE_CHAR macro
* libguile/chars.h (SCM_MAKE_CHAR): missing parentheses
2009-08-09 16:58:14 -07:00
Michael Gran
b07992900b Port position macros shouldn't require enclosing braces
The port position macros incorrectly required enclosing braces
when used within if statements.

        * libguile/ports.h (SCM_INCLINE, SCM_ZEROCOL, SCM_INCCOL)
        (SCM_DECCOL, SCM_TABCOL): enclose macro in do/while

        * libguile/ports.c (update_port_lf): remove extra braces
2009-08-09 16:58:14 -07:00
Ludovic Courtès
9af080f720 Use a linker version script for libguile.
* libguile/Makefile.am (libguile_la_LDFLAGS)[HAVE_LD_VERSION_SCRIPT]:
  Use `libguile.map'.
  (EXTRA_DIST): Add `libguile.map'.

* libguile/libguile.map: New file.
2009-08-09 23:40:11 +02:00
Ludovic Courtès
25361e4b25 Use Gnulib's `lib-symbol-versions' module.
* m4/gnulib-cache.m4: Add `lib-symbol-versions'.
2009-08-09 23:05:37 +02:00
Ludovic Courtès
18c73f8e2b Remove bogus `configure' test for GNU libunistring.
* configure.ac: Remove explicit test for libunistring, which conflicted
  with Gnulib's own test.  This fixes commit
  f4863880f5.
2009-08-09 20:21:41 +02:00
Neil Jerram
3d8e6eb82e Misc GOOPS chapter updates
* doc/ref/goops-tutorial.texi: Update intro text.  Fix `an' typo.

* doc/ref/goops.texi: Update quick start intro text.  Simplify
  example that uses `format'.
2009-08-09 15:05:17 +01:00
Neil Jerram
8d9cb14e61 Use #:keyword syntax in preference to :keyword
because that is Guile's default.
2009-08-09 15:05:02 +01:00
Neil Jerram
aba0dff5f7 In general, use @lisp in preference to @smalllisp
because it looks better in the DVI output.  Exceptions are

- wide examples, which would cause overfull hboxes if they
  used the bigger @lisp font

- very large examples, which may look too big at the @lisp size.
2009-08-09 15:04:08 +01:00
Neil Jerram
f618f4363d Use @result{} instead of -->
* doc/ref/goops.texi: Use @result{} instead of -->.
2009-08-09 11:40:01 +01:00
Neil Jerram
9e7ec8d16c Update GOOPS Getting Started section
* doc/ref/goops.texi (Getting Started): Renamed `Quick Start', to fit
  better with following Tutorial.  Also add a bit more text to the
  Methods subsection.
2009-08-09 10:53:14 +01:00
Neil Jerram
cdb8625899 Minor textual improvements to slot sections 2009-08-08 19:41:10 +01:00
Neil Jerram
326b551b75 Move tutorial sections on slots before inheritance
* doc/ref/goops-tutorial.texi (Instance creation and slot access, Slot
  description): Move to before Inheritance.
2009-08-08 19:10:59 +01:00
Neil Jerram
d4a9d8759c Change <complex> to <my-complex> in GOOPS tutorial
* doc/ref/goops-tutorial.texi (Class Definition): Minor text
  improvements.  Change the class being defined to <my-complex>, to
  reduce the confusion with the built in <complex> class.
2009-08-08 19:05:06 +01:00
Neil Jerram
e946b0b955 Start updating/merging GOOPS getting started / tutorial text
* doc/ref/goops-tutorial.texi (Introduction): Merge this subsection's
  non-duplicate text into the introductory text of the whole section,
  then remove this subsection.

  (Tutorial): Textual updates to introductory text.

  (Class definition and instantiation): Rename `Class definition',
  since that's all it covers.  Remove unnecessary footnote about
  loading (oop goops) module.

  (All @nodes): Remove explicit up, next and prev nodes.  (They make
  the document harder to change.)

* doc/ref/goops.texi (Tutorial): Move from the end of the GOOPS
  chapter to the beginning of it.

  (Running GOOPS): Removed; useful text merged into containing
  section.
2009-08-08 17:07:11 +01:00
Neil Jerram
0ac8a9aeab Remove page break after heading of Chapter 6 (Modules)
This brings this chapter into line with the others, which do not have
page breaks before the first section.
2009-08-08 16:26:58 +01:00
Neil Jerram
769be03f33 Use GOOPS Introduction as intorudctory text for the whole GOOPS chapter 2009-08-08 15:55:44 +01:00
Michael Gran
aa131e9e67 Merge commit 'origin/master' 2009-08-08 02:35:08 -07:00
Michael Gran
9c44cd4559 Add Unicode strings and symbols
This adds full Unicode strings as a datatype, and it adds some
minimal functionality.  The terminal and port encoding is assumed
to be ISO-8859-1.  Non-ISO-8859-1 characters are written or
input as string character escapes.

The string character escapes now have 3 forms: \xXX \uXXXX and
\UXXXXXX, for unprintable characters that have 2, 4 or 6 hex digits.

The process for writing to strings has been modified.  There is now a
function scm_i_string_start_writing that does the copy-on-write
conversion if necessary.

To compile strings that may be wide, the VM storage of strings and
string-likes has changed.

Most string-using functions have not yet been updated and may break
when used with wide strings.


        * module/language/assembly/compile-bytecode.scm (write-bytecode):
        use variable width string bytecode format

        * module/language/assembly.scm (byte-length): use variable width
        bytecode format

        * libguile/vm-i-loader.c (load-string, load-symbol):
        (load-keyword, define): use variable-width bytecode format

        * libguile/vm-engine.h (FETCH_WIDTH): new macro

        * libguile/strings.h: new declarations

        * libguile/strings.c (make_wide_stringbuf): new function
        (widen_stringbuf): new function
        (scm_i_make_wide_string): new function
        (scm_i_is_narrow_string): new function
        (scm_i_string_wide_chars): new function
        (scm_i_string_start_writing): new function
        (scm_i_string_ref): new function
        (scm_i_string_set_x): new function
        (scm_i_is_narrow_symbol): new function
        (scm_i_symbol_wide_chars, scm_i_symbol_ref): new function
        (scm_string_width): new function
        (unistring_escapes_to_guile_escapes): new function
        (scm_to_stringn): new function
        (scm_i_stringbuf_free): modify for wide strings
        (scm_i_substring_copy): modify for wide strings
        (scm_i_string_chars, scm_string_append): modify for wide strings
        (scm_i_make_symbol, scm_to_locale_stringn): modify for wide strings
        (scm_string_dump, scm_symbol_dump, scm_to_locale_stringbuf):
        (scm_string, scm_i_deprecated_string_chars): modify for wide strings
        (scm_from_locale_string, scm_from_locale_stringn): add null test

        * libguile/srfi-13.c: add calls for scm_i_string_start_writing for
        each call of scm_i_string_stop_writing
        (scm_string_for_each): modify for wide strings

        * libguile/socket.c: add calls for scm_i_string_start_writing for each
        call of scm_i_string_stop_writing

        * libguile/rw.c: add calls for scm_i_string_start_writing for each
        call of scm_i_string_stop_writing

        * libguile/read.c (scm_read_string): allow reading of wide strings

        * libguile/print.h: add declaration for scm_charprint

        * libguile/print.c (iprin1): print wide strings and add new string
        escapes
        (scm_charprint): new function

        * libguile/ports.h: new declarations for scm_lfwrite_substr and
        scm_lfwrite_str

        * libguile/ports.c (update_port_lf): new function
        (scm_lfwrite): use update_port_lf
        (scm_lfwrite_substr): new function
        (scm_lfwrite_str): new function

        * test-suite/tests/asm-to-bytecode.test ("compiler"): add string
        width byte to sting-like asm tests
2009-08-08 02:35:00 -07:00
Andy Wingo
d97b69d9cd lambda, the ultimate goto
* module/language/tree-il/analyze.scm (analyze-lexicals): Rework to
  actually determine when a fixed-point procedure may be allocated as a
  label.
* module/language/tree-il/compile-glil.scm (emit-bindings): Always emit
  a <glil-bind>. Otherwise it's too hard to pair with unbindings.
  (flatten-lambda): Consequently, here we only `bind' if there are any
  vars to bind. This doesn't make any difference, given that lambdas
  don't have trailing unbind instructions, but it does keep the GLIL
  output the same for thunks -- no extraneous (bind) instructions. Keeps
  tree-il.test happy.
  (flatten): Some bugfixes. Yaaay, it works!!!
2009-08-07 19:06:15 +02:00
Andy Wingo
230cfcfb3e implement compilation of label-allocated lambda expressions
* module/language/tree-il/compile-glil.scm (flatten-lambda, flatten):
  Implement compilation of label-allocated lambda expressions. Quite
  tricky, we'll see if this works when the new analyzer lands.
2009-08-07 17:44:02 +02:00
Andy Wingo
9059993fe0 add label alist to lambda allocations in tree-il->glil compiler
* module/language/tree-il/analyze.scm: Add some more comments about
  something that will land in a future commit: compiling fixpoint
  lambdas as labels.
  (analyze-lexicals): Reorder a bit, and add a label alist to procedure
  allocations. Empty for now.

* module/language/tree-il/compile-glil.scm (flatten): Adapt to the free
  variables being in the cddr of the allocation, not the cdr.
2009-08-07 15:35:53 +02:00