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

12971 commits

Author SHA1 Message Date
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
Andy Wingo
9b29d60791 loop detection in the house
* libguile/vm-i-scheme.c (vector-ref, vector-set): Sync registers if we
  call out to C.

* module/language/tree-il/compile-glil.scm (flatten-lambda): Add an
  extra argument, the self-label, which should be the gensym under which
  the procedure is bound in a <fix> expression.
  (flatten): If we see a call to a lexical ref to the self-label in a
  tail position, rename and goto instead of goto/args, which will tear
  down the frame -- or will, in the future. It's a primitive form of
  loop detection.

* module/language/tree-il/primitives.scm (zero?): Expand to (= x 0).
2009-08-06 17:46:38 +02:00
Andy Wingo
80af116875 actually implement "fixing letrec"
* module/Makefile.am (SOURCES): Reorganize so GHIL is compiled last,
  along with ecmascript.

* module/language/scheme/spec.scm: Remove references to GHIL, as it's
  bitrotten and obsolete..

* module/language/tree-il.scm (make-tree-il-folder): Rework so that we
  only have down and up procs, and call down and up on each element.
* module/language/tree-il/analyze.scm (analyze-lexicals): Fix a thinko
  handling let-values.

* module/language/tree-il/fix-letrec.scm: Actually implement fixing
  letrec. The resulting code will perform better, but violations of the
  letrec restriction are not detected. This behavior is allowed by the
  spec, but it is undesirable. Perhaps that will be fixed later.

* module/language/tree-il/inline.scm (inline!): Fix a case in which
  ((lambda args foo)) would be erroneously inlined to foo. Remove empty
  let, letrec, and fix statements.

* module/language/tree-il/primitives.scm (effect-free-primitive?): New
  public predicate.
2009-08-06 16:01:24 +02:00
Andy Wingo
bca488f186 actually inline call-with-values to tree-il's <let-values>
* module/srfi/srfi-11.scm (let-values): In the one-clause case, avoid
  going through temporary variables.

* module/language/tree-il/inline.scm (inline!): Add another case:
  (call-with-values (lambda () ...) (lambda ... ...) -> let-values.

* module/language/tree-il/compile-glil.scm (flatten): Fix a bug
  compiling applications in "vals" context.

* module/language/tree-il/analyze.scm (analyze-lexicals): Fix a couple
  bugs with let-values and rest arguments.
2009-08-06 11:48:16 +02:00
Neil Jerram
5e328915a1 Include GOOPS pictures in the distribution 2009-08-06 09:41:32 +01:00
Andy Wingo
4dcd84998f let-values in terms of syntax-case, add make-tree-il-folder
* module/language/tree-il.scm (tree-il-fold): Fix for let-values case.
  (make-tree-il-folder): New public macro, makes a multi-valued folder
  specific to the number of seeds that the user wants.
* module/language/tree-il/optimize.scm (optimize!): Reverse the order of
  inline! and fix-letrec!, as the latter might expose opportunities for
  the former.
* module/srfi/srfi-11.scm (let-values): Reimplement in terms of
  syntax-case, so that its expressions may reference hygienically bound
  variables. See the NEWS for the rationale.
  (let*-values): An empty let*-values still introduces a local `let'
  binding contour.
* module/system/base/syntax.scm (record-case): Yukkkk. Reimplement in
  terms of syntax-case. Ug-ly, but see the NEWS again: "Lexical bindings
  introduced by hygienic macros may not be referenced by nonhygienic
  macros."
2009-08-05 21:35:30 +02:00
Andy Wingo
c21c89b138 add <fix> tree-il construct, and compile it
* libguile/vm-i-system.c (fix-closure): New instruction, for wiring
  together fixpoint procedures.

* module/Makefile.am (TREE_IL_LANG_SOURCES): Add fix-letrec.scm.

* module/language/glil/compile-assembly.scm (glil->assembly): Reindent
  the <glil-lexical> case, and handle 'fix for locally-bound vars.

* module/language/tree-il.scm (<fix>): Add the <fix> tree-il type and
  accessors, for fixed-point bindings. This IL construct is taken from
  the Waddell paper.
  (parse-tree-il, unparse-tree-il, tree-il->scheme, tree-il-fold)
  (pre-order!, post-order!): Update for <fix>.

* module/language/tree-il/analyze.scm (analyze-lexicals): Update for
  <fix>. The difference here is that the bindings may not be assigned,
  and are not marked as such. They are not boxed.
  (report-unused-variables): Update for <fix>.

* module/language/tree-il/compile-glil.scm (flatten): Compile <fix> to
  GLIL.

* module/language/tree-il/fix-letrec.scm: A stub implementation of
  fixing letrec -- will flesh out in a separate commit.

* module/language/tree-il/inline.scm: Fix license, it was mistakenly
  added with LGPL v2.1+.

* module/language/tree-il/optimize.scm (optimize!): Run the fix-letrec!
  pass.
2009-08-05 17:52:27 +02:00
Andy Wingo
dab0f9d55d add a brain-dead inliner
* module/Makefile.am (TREE_IL_LANG_SOURCES):
* module/language/tree-il/inline.scm: Add a brain-dead inliner, to
  inline ((lambda () x)) => x.

* module/language/tree-il/optimize.scm (optimize!): Invoke the inliner.
2009-08-05 16:17:20 +02:00
Andy Wingo
7382f23e58 add1 and sub1 instructions
* libguile/vm-i-scheme.c: Add add1 and sub1 instructions.
* module/language/tree-il/compile-glil.scm: Compile 1+ and 1- to add1
  and sub1.

* module/language/tree-il/primitives.scm (define-primitive-expander):
  Add support for `if' statements in the consequent.
  (+, -): Compile (- x 1), (+ x 1), and (+ 1 x) to 1- or 1+ as
  appropriate.
  (1-): Remove this one. Seems we forgot 1+ before, but we weren't
  compiling it nicely anyway.

* test-suite/tests/tree-il.test ("void"): Fix expected compilation of (+
  (void) 1) to allow for add1.
2009-08-05 11:55:42 +02:00
Andy Wingo
f4863880f5 perform gmp/unistring compile checks with AC_LIB_HAVE_LINKFLAGS
* configure.ac: Rework gmp and unistring checks to use
  AC_LIB_HAVE_LINKFLAGS, so that the compilation checks run with the
  right -L/-l flags.

* libguile/Makefile.am (libguile_la_LIBADD): Adapt to need to add
  $(LIBGMP) and $(LIBUNISTRING) here.

Hopefully this solves
http://article.gmane.org/gmane.lisp.guile.bugs/4288.
2009-08-04 21:16:32 +02:00
Andy Wingo
45cc8a3877 rename configure.in to configure.ac
* configure.ac:
* guile-readline/configure.ac: Rename from configure.in, as recommended
  by the autoconf manual.
2009-08-04 20:46:20 +02:00
Andy Wingo
ee0ddd2121 fix buffer overrun reading partial numbers: 1.0f, 1.0/, and 1.0+
* libguile/numbers.c (mem2decimal_from_point, mem2ureal, mem2complex):
  Fix a number of cases where, for invalid numbers, we could read past
  the end of the buffer. This happened in e.g. "1.0+", "1/" and "1.0f".
  But I couldn't figure out how to test for these, given that the
  behavior depended on the contents of uninitialized memory in the
  reader buffer. We'll just have to be happy with this.

Thanks to Kjetil S. Matheussen for the report.
2009-08-04 20:29:09 +02:00
Neil Jerram
11b4e1a59c Git-Ignore effective-version.texi 2009-08-04 12:11:49 +01:00
Neil Jerram
45867c2ace Fix overfull hboxes 2009-08-04 12:10:16 +01:00
Neil Jerram
650ecada5e Typos 2009-08-04 12:08:25 +01:00
Neil Jerram
22b5f518f6 Add an effective version variable for the manual 2009-08-04 12:08:02 +01:00
Neil Jerram
d99832a24b Add copyright statements to goops.texi and goops-tutorial.texi 2009-08-04 11:49:26 +01:00
Daniel Kraft
157ffbd797 Merge branch 'master' of git://git.savannah.gnu.org/guile into elisp 2009-08-04 09:37:50 +02:00
Daniel Kraft
1b1195f29b Abstracted dynamic binding a little off the fluids.
* module/language/elisp/compile-tree-il.scm: Move dynamic binding to one place
  and changed names that refer to `fluids' for dynamic binding.
* module/language/elisp/bindings.scm: Changed names referring to `fluids'.
2009-08-04 09:23:02 +02:00
Neil Jerram
eb12b40182 Move GOOPS documentation into the main manual
Nothing editorial here, just the minimum to move the GOOPS documentation
into the main manual, and then still have everything build properly.
2009-08-03 23:29:45 +01:00
Daniel Kraft
f4dc86f137 Implement catch and unwind-protect as macros.
* module/language/elisp/compile-tree-il.scm: Remove catch and unwind-protect.
* module/language/elisp/runtime/macro-slot.scm: Re-implement them here.
2009-08-03 18:22:12 +02:00
Neil Jerram
ce2612cd88 Move `Continuation Barriers' to the section that covers continuations
Since continuation barriers protect against non-local exits, it makes
better sense to document them in the same section as continuations and
exceptions.
2009-08-03 13:21:33 +01:00
Neil Jerram
1021bb7a8d Review/update sections on arbiters and asyncs 2009-08-03 12:04:08 +01:00
Neil Jerram
31c73458db Miscellaneous small updates
- Typos
- Minor changes to texinfo markup
- Minor wording changes
2009-08-03 11:27:51 +01:00
Neil Jerram
a7c5a2e5fd Remove the idea of a separate manual edition number
I don't believe this has ever been useful, and I doubt that we've
consistently incremented it in the past.  The reality is that the
manual evolves with the rest of Guile, so Guile's version number
should apply to the manual too.  It is conceivable that we might
one day revise the manual for an existing Guile release, so we keep
a REVISION number to cover that.
2009-08-03 11:25:10 +01:00
Michael Gran
a876e7dcea Don't doubly define scm_t_wchar
* libguile/chars.h: don't define scm_t_wchar
        * libguile/numbers.h: define scm_t_wchar here
2009-08-01 11:21:46 -07:00
Michael Gran
f7118e3552 Fix coding style compliance for recent 32-bit char changes
* libguile/print.c (iprin1): extra braces

        * libguile/chars.h (SCM_IS_UNICODE_CHAR): coding style
2009-08-01 11:04:43 -07:00
Michael Gran
4c402b889e Don't use GNU extensions for SCM_MAKE_CHAR macro
Since the contents of SCM_MAKE_CHAR are evaluated more than once,
don't use it in situations where this could cause side-effects.

        * libguile/vm-i-system.c (make-char8): avoid side-effects with
        SCM_MAKE_CHAR call

        * libguile/chars.h (SCM_MAKE_CHAR): modified
2009-08-01 10:15:20 -07:00
Michael Gran
64bad3f5a8 Make charname declarations module-level and GCS
Charname array declarations are corrected for style and
are made module-level.  Array list length variables are
replaced with macros.

        * libguile/chars.c: variable declaration fixes
2009-08-01 08:12:15 -07:00
Michael Gran
5adcdb6519 Update NEWS for charname changes
* NEWS: updated
2009-08-01 08:05:55 -07:00
Daniel Kraft
dfbc6e9d54 Allow lexical binding of lambda arguments.
* module/language/elisp/compile-tree-il.scm: Rework lambda compiler to allow
  opional lexical binding of (some) lambda arguments.
* test-suite/tests/elisp-compiler.test: Check this.
2009-08-01 13:00:27 +02:00
Daniel Kraft
c808c926fd Compiler option to always bind certain symbols lexically.
Affects so far let-bound symbols, lambda arguments to come in the future.

* module/language/elisp/README: Document it.
* module/language/elisp/compile-tree-il.scm: Add :always-lexical option.
* test-suite/tests/elisp-compiler.test: Test it.
2009-07-31 18:00:01 +02:00
Daniel Kraft
a43df0ae47 Merge branch 'master' of git://git.savannah.gnu.org/guile into elisp 2009-07-31 17:18:34 +02:00