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

13597 commits

Author SHA1 Message Date
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
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