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

580 commits

Author SHA1 Message Date
Andy Wingo
f95f82f8e1 compilation enviroments are always modules; simplifications & refactorings
* module/ice-9/boot-9.scm (make-fresh-user-module): New public function,
  makes an anonymous beautified module.

* module/language/objcode/spec.scm: We used to have some things in here
  that allowed lexical variable names and values to be a part of the
  environment, but no more. Now an environment is just a module. If you
  want to "inject" free variables into code, just use lambda.

* module/language/scheme/compile-tree-il.scm (compile-tree-il): Same
  here. Also, rely on the fact that an environment *will* be a module --
  because (system base compile) guarantees that for us.

* module/language/scheme/spec.scm (scheme): In the reader, rely on the
  environment being a module. Define a #:make-default-environment
  handler, which returns a beautified module, augmented with a fresh
  definition for current-reader, so that side effects to current-reader
  are restricted to the compilation unit.

* module/language/tree-il/analyze.scm
  (report-possibly-unbound-variables):
* module/language/tree-il/compile-glil.scm (compile-glil):
* module/language/tree-il/optimize.scm (optimize!): The environment will
  be a module.

* module/system/base/language.scm (<language>): New field,
  `make-default-environment'. Defaults to `make-fresh-user-module'.
  (default-environment): New accessor, returns a default environment for
  a language.

* module/system/repl/common.scm (repl-compile): Always compile relative
  to the current module, because a module is always acceptable as an
  environment.

* module/system/base/compile.scm (compile-file, compile-and-load): Both
  of these have a new keyword argument, #:env. For `compile-file', it
  defaults to the default environment of the source language, and for
  `compile-and-load', to the current module.
  (read-and-compile): If there are no expressions read, pass the joiner
  its default environment (via `default-environment joint').
2009-10-16 15:33:32 +02:00
Andy Wingo
40867c9776 no more *compilation-environment* fluid
* module/system/base/compile.scm (current-compilation-environment):
  Remove, as the only thing that needed it (language readers) now get
  the environment as an argument.
  (read-and-compile, compile): Rework for no *compilation-environment*,
  and default the environment using the define* mechanism.

* module/language/tree-il/analyze.scm (env-module): Hack around the lack
  of a current compilation module. Will fix this in the next commit so
  that the environment is always valid.
2009-10-16 14:04:42 +02:00
Andy Wingo
4b2afc6258 language-readers receive environment as an arg
* module/language/assembly/spec.scm:
* module/language/brainfuck/spec.scm:
* module/language/bytecode/spec.scm:
* module/language/ecmascript/spec.scm:
* module/language/glil/spec.scm:
* module/language/scheme/spec.scm:
* module/language/tree-il/spec.scm: Language-readers now take two
  arguments: the port and the environment. This should allow for
  compile-environment-specific reader behavior.

* module/system/base/compile.scm (read-and-compile):
* module/system/repl/common.scm (repl-read): Pass the environment to the
  language-reader.

* module/system/repl/repl.scm (meta-reader, prompting-meta-read):
* module/system/repl/command.scm (define-meta-command): Use the second
  argument to repl-reader, so we avoid frobbing current-reader.
2009-10-16 13:39:24 +02:00
Andy Wingo
a58b7fbb7e repl-reader accepts optional "read" argument
* module/ice-9/boot-9.scm (repl-reader): Accept an optional second
  argument, the reader to use. If it is given, use it instead of
  dereferencing the current-reader fluid.

* guile-readline/ice-9/readline.scm (activate-readline): Make our
  replacement definition of repl-reader compatible with boot-9.
2009-10-16 13:30:52 +02:00
Andy Wingo
27c8177fe4 remove GHIL, Elisp, and R5RS languages
GHIL is obsolete, and it's about time we got rid of it. Elisp and R5RS
were unmodified since their import from Guile-VM, so we ditch them too.

R5RS compilation is supported via compiling Scheme within an R5RS
environment.

Elisp will be supported when we merge in Daniel's work.
2009-10-16 12:20:06 +02:00
Andy Wingo
b0fae4ecaa bitvector tweaks
* libguile/arrays.c (scm_from_contiguous_typed_array):
* libguile/bytevectors.c (scm_uniform_array_to_bytevector): Error if the
  uniform element size is more than 8 bits, but not divisible by 8 --
  because our math could overflow in that case.

* module/ice-9/deprecated.scm (#\y): Indeed, #* is the valid bitvector
  syntax :)
2009-10-16 11:59:30 +02:00
Ludovic Courtès
cd48c32cf4 Fix compilation of literal bitvectors.
* libguile/arrays.c (scm_from_contiguous_typed_array): Fix BYTE_LEN
  sanity check for bitvectors.

* test-suite/tests/unif.test ("syntax")["bitvector is self-evaluating"]:
  New test.

* module/ice-9/deprecated.scm (#\y): Fix deprecation comment: `#*' is
  not a read syntax.
2009-10-15 23:29:50 +02:00
Ludovic Courtès
30e73c7698 Fix REPL environment for languages other than scheme.
* module/system/repl/common.scm (repl-compile): Use `#:env #f' for
  languages other than scheme.
2009-10-15 20:51:32 +02:00
Andy Wingo
1ab3976ef7 `load' autocompiles -- in the current module.
* module/ice-9/boot-9.scm (load): Pull `autocompiled-file-name' inside
  `load', and make it autocompile in the current module. Should fix
  Julian's issue noted in
  http://article.gmane.org/gmane.lisp.guile.devel/9483.
2009-10-15 15:48:14 +02:00
Andy Wingo
10fab72449 add back support for #y bitvector read syntax
* module/ice-9/deprecated.scm (#\y): Add deprecated support for
  #y(1 0 1 ...) bitvectors.
2009-10-15 15:05:36 +02:00
Ludovic Courtès
f67ddf9dbf Add compiler warning for possibly unbound variables.
* module/language/tree-il/analyze.scm (<toplevel-info>): New record
  type.
  (env-module, report-possibly-unbound-variables): New procedures.

* module/language/tree-il/compile-glil.scm (%warning-passes): Add
  `unbound-variable'.

* module/system/base/message.scm (%warning-types): Likewise.

* test-suite/tests/tree-il.test (read-and-compile, %opts-w-unbound):
  New.
  ("warnings")["unbound variable"]: New test prefix.
2009-10-06 23:41:39 +02:00
Ludovic Courtès
43eb8acada tree-il: Pass the environment to warning passes.
* module/language/tree-il/analyze.scm (report-unused-variables): Taken a
  new parameter, ENV.

* module/language/tree-il/compile-glil.scm (compile-glil): Pass E to
  individual warning passes.
2009-10-06 23:41:39 +02:00
Ludovic Courtès
d773ba231c Partially revert e5f5113c21.
The intent is to maintain the readability of `pmatch' invocations.

* module/language/assembly/disassemble.scm (disassemble-load-program):
  Don't use wildcards in `pmatch' invocations, even when the matched
  elements are unused.

* module/language/glil/decompile-assembly.scm (decompile-toplevel,
  decompile-load-program): Likewise.

* module/system/xref.scm (program-callee-rev-vars): Likewise.

* module/language/assembly.scm (byte-length): Likewise.

* module/language/tree-il/compile-glil.scm (flatten): Likewise.
2009-09-24 00:06:54 +02:00
Ludovic Courtès
e5f5113c21 Remove unused variables in system/language.
* module/language/assembly.scm (byte-length): Don't match unused
  record slots.

* module/language/tree-il.scm (tree-il->scheme, post-order!,
  pre-order!): Likewise.

* module/language/tree-il/analyze.scm (analyze-lexicals): Likewise.

* module/language/tree-il/compile-glil.scm (flatten): Likewise.

* module/language/assembly/disassemble.scm (disassemble-load-program):
  Don't match unused list elements.

* module/language/glil/decompile-assembly.scm (decompile-toplevel,
  decompile-load-program): Likewise.

* module/system/xref.scm (program-callee-rev-vars): Likewise.

* module/language/assembly/compile-bytecode.scm
  (write-bytecode)[write-sized-loader]: Remove.

* module/language/assembly/decompile-bytecode.scm (decode-load-program):
  Factorize `pad' variables.

* module/language/ecmascript/base.scm (object->value/string,
  object->value/number)[v]: Remove.

* module/language/ecmascript/tokenize.scm (read-slash)[c0]: Remove.

* module/language/objcode/spec.scm (decompile-value)[nargs]: Remove.

* module/system/repl/command.scm (time)[vms-start, vms-end]: Remove.

* module/system/repl/repl.scm (prompting-meta-read): Use `prompt'.
2009-09-21 00:36:31 +02:00
Ludovic Courtès
a2ca725212 Remove unused variables in ice-9/goops/srfi/scripts.
* module/ice-9/boot-9.scm (scm-style-repl)[-abort]: Remove.

* module/oop/goops.scm (class)[slot-defs]: Remove.
  (compute-slot-accessors)[name]: Remove.
  (compute-get-n-set)[env]: Remove.

* module/oop/goops/active-slot.scm (compute-get-n-set)[env, name]:
  Remove.

* module/oop/goops/dispatch.scm (cache-try-hash!)[max-misses]: Remove.

* module/oop/goops/save.scm (make-mapper)[dims]: Remove.

* module/scripts/autofrisk.scm (>>checks)[prog]: Remove.

* module/srfi/srfi-19.scm (priv:read-directives)[ireaderf, eireader4]:
  Remove.
2009-09-21 00:24:08 +02:00
Ludovic Courtès
f65e2b1ec5 Honor and confine expansion-time side-effects to `current-reader'.
* module/language/scheme/spec.scm (scheme)[#:reader]: Honor the
  compilation environment's `current-reader'.

* module/system/base/compile.scm (*compilation-environment*): New
  fluid.
  (current-compilation-environment): New procedure.
  (make-compilation-module): Provide a fresh `current-reader' fluid.
  (read-and-compile): Set `*compilation-environment*' appropriately.
  (compile): Likewise.

* test-suite/tests/compiler.test (read-and-compile): New.
  ("current-reader"): New test prefix.
2009-09-20 22:29:47 +02:00
Ludovic Courtès
60c6a74095 Fix copyright in `(srfi srfi-4 gnu)'. 2009-09-20 22:29:28 +02:00
Ludovic Courtès
87c595c757 Compile in a fresh module by default.
* module/system/base/compile.scm (make-compilation-module,
  language-default-environment): New procedures.
  (read-and-compile, compile): Have ENV default to
  `(language-default-environment from)'.
  (compile-and-load): Compile in `(current-module)'.

* module/system/repl/common.scm (repl-compile): Explicitly compile in
  the current module so that macro definitions are visible.

* libguile/load.c (kw_env): New variable.
  (do_try_autocompile): Call `compile-file' with `#:env (current-module)'.

* test-suite/tests/compiler.test ("psyntax")["compile uses a fresh module by
  default", "compile-time definitions are isolated"]: New tests.
  ["compile in current module"]: Specify `#:env (current-module)'.
  ["redefinition"]: Adjust.

* test-suite/tests/bytevectors.test (c&e): Explicitly compile in the
  current module so that its imports are visible.
2009-09-20 21:54:41 +02:00
Neil Jerram
f564f4784f Remove deprecation warnings from the build
* module/srfi/srfi-35.scm: Remove explicit use of (ice-9 syncase).

* test-suite/tests/r5rs_pitfall.test: Same again.

* test-suite/tests/syncase.test: Remove "(ice-9 syncase) loads" test;
  syncase is always loaded now.
2009-09-17 01:18:14 +01:00
Ludovic Courtès
0a9a6d1422 "Document" the `set-module-eval-closure!' weak hash table glitch.
* module/ice-9/boot-9.scm (set-module-eval-closure!): Add link to an
  explanation.

* test-suite/tests/gc.test ("gc")["Unused modules are removed"]:
  Increase the `cleanup' loop.
2009-09-15 22:31:45 +02:00
Ludovic Courtès
756e8a3acf Merge libguile-i18n' into libguile'.
* GUILE-VERSION (LIBGUILE_I18N_MAJOR, LIBGUILE_I18N_INTERFACE_CURRENT,
  LIBGUILE_I18N_INTERFACE_REVISION, LIBGUILE_I18N_INTERFACE_AGE,
  LIBGUILE_I18N_INTERFACE): Remove.

* doc/ref/api-i18n.texi (i18n Introduction): Don't mention
  `libguile-i18n'.

* libguile.h: Include "libguile/i18n.h".

* libguile/Makefile.am (lib_LTLIBRARIES): Remove `libguile-i18n-v*'.
  (libguile_la_SOURCES): Add `i18n.c'.
  (libguile_i18n_v_*_SOURCES, libguile_i18n_v_*_CFLAGS,
  libguile_i18n_v_*_LIBADD, libguile_i18n_v_*_LDFLAGS): Remove.

* libguile/i18n.c (scm_bootstrap_i18n): New function.

* libguile/i18n.h (scm_nl_langinfo, scm_init_i18n): Made internal.
  (scm_bootstrap_i18n): New declaration.

* libguile/init.c (scm_i_init_guile): Invoke `scm_bootstrap_i18n ()'.

* module/ice-9/i18n.scm: Load from `libguile' instead of
  `libguile-i18n-v-0'.
2009-09-14 00:42:25 +02:00
Ludovic Courtès
87e0037091 Add λ' macro as an alternative to lambda'.
* module/ice-9/boot-9.scm (λ): New macro.

* NEWS: Update.
2009-09-11 00:05:48 +02:00
Ludovic Courtès
6dc797eee9 Merge branch 'master' into boehm-demers-weiser-gc
Conflicts:
	libguile/gc_os_dep.c
2009-09-09 22:39:49 +02:00
Andy Wingo
eebff6d7f1 fix compile-time bug compiling (+ "foo" " bar")
* module/language/tree-il/primitives.scm (+, -): Avoid calling exact? on
  non-numeric args.
2009-09-06 14:15:45 +02:00
Andy Wingo
7f7b85cbf6 fix nontail loops within loops
* module/language/tree-il/compile-glil.scm (flatten): Fix compilation of
  loops within loops in non-tail positions. Will add a test case soon,
  but one way to reproduce it was with the following function:

(define (test)
  (let lp ()
    (pk 'zero)
    (let ((fk (lambda ()
                (let ((fk2 (lambda () (pk 'two))))
                  (let ((fk3 (lambda () (if #t (pk 'three) (fk2)))))
                    (if #t
                        (fk3)
                        (fk2)))))))
      (pk 'one)
      (fk))
    (lp)))

One would expect to see a sequence of "zero one three", but in fact zero
only showed once.

This should fix simplex as well.
2009-09-01 18:07:29 +02:00
Ludovic Courtès
7af531508c Merge branch 'master' into boehm-demers-weiser-gc
Conflicts:
	libguile/Makefile.am
	libguile/bytevectors.c
	libguile/gc-card.c
	libguile/gc-mark.c
	libguile/programs.c
	libguile/srcprop.c
	libguile/srfi-14.c
	libguile/symbols.c
	libguile/threads.c
	libguile/unif.c
	libguile/vm.c
2009-08-28 19:16:46 +02:00
Neil Jerram
639bf3e507 Merge branch 'ossau-gds-dev'
Conflicts:

	THANKS
2009-08-27 22:52:20 +01:00
Neil Jerram
ba5f8bf4b1 Incorporate ice-9-debugger-extensions properly
i.e. put the extensions where they need to be, and delete
ice-9-debugger-extensions.scm.

* doc/ref/api-debug.texi (Single Stepping through a Procedure's Code):
  Change mentions of (ice-9 debugging ice-9-debugger-extensions)
  module to whatever is appropriate now (or just remove them).

* module/Makefile.am (NOCOMP_SOURCES): Remove
  ice-9-debugger-extensions.scm.

* module/ice-9/debugger.scm (debug-trap): Move here from
  ice-9-debugger-extensions.scm.

* module/ice-9/debugger/command-loop.scm ("continue", "finish",
  "step", "next"): Move here from ice-9-debugger-extensions.scm.

* module/ice-9/debugger/commands.scm (assert-continuable, continue,
  finish, step, next): Move here from ice-9-debugger-extensions.scm.

* module/ice-9/debugging/breakpoints.scm: Don't use
  ice-9-debugger-extensions module.

* module/ice-9/debugging/ice-9-debugger-extensions.scm: Removed.

* module/ice-9/debugging/trace.scm, module/ice-9/debugging/traps.scm:
  Remove more old version code.

* module/ice-9/debugging/traps.scm (guile-trap-features): Hardcoded as
  '(tweaking).
2009-08-27 22:21:20 +01:00
Neil Jerram
248ee86a0b Remove superfluous ice-9-debugger-extensions code for old Guile versions
* module/ice-9/debugging/ice-9-debugger-extensions.scm: Remove all
  code checking for version < 1.7, and move code for versions >= 1.7
  up to top level.  Comment out dummy mutex definitions for now, as
  I'm not sure how to rewrite them correctly for psyntax.
2009-08-27 21:58:12 +01:00
Andy Wingo
3bcf189ba0 Revert "eval is actually compile"
This reverts commit afe5e6baa7.
2009-08-27 01:25:52 +02:00
Andy Wingo
c6a1380bde Merge commit 'origin/master'
Conflicts:
	libguile/unif.c
2009-08-25 21:43:00 +02:00
Andy Wingo
108e18b18a Merge wip-array refactor, up to cd43fdc5b7
Conflicts:
	NEWS
	libguile/print.c
2009-08-25 18:04:02 +02:00
Michael Gran
889975e51a Add full Unicode capability to ports and the default reader
Ports are given two additional properties: a character encoding and
a conversion failure strategy.  These properties have getters and setters.
The new properties are used to convert any locale text to/from the
internal representation of strings.

If unspecified, ports use a default value. The default value of these
properties is held in a fluid.  The default character encoding can be
modified by calling setlocale.

ISO-8859-1 is treated specially.  Since it is a native encoding of
strings, it can be processed more quickly.  Source code is assumed to be
ISO-8859-1 unless otherwise specified.  The encoding of a source code
file can be given as 'coding: XXXXX' in a magic comment at the top of a
file.

The C functions that deal with encoding often use a null pointer
as shorthand for the native Latin-1 encoding, for efficiency's sake.

* test-suite/tests/encoding-iso88591.test: new tests
* test-suite/tests/encoding-iso88597.test: new tests
* test-suite/tests/encoding-utf8.test: new tests
* test-suite/tests/encoding-escapes.test: new tests
* test-suite/tests/numbers.test: declare 'binary' encoding
* test-suite/tests/ports.test: declare 'binary' encoding
* test-suite/tests/r6rs-ports.test: declare 'binary' encoding

* module/system/base/compile.scm (compile-file): use source-code
  file's self-declared encoding when compiling files

* libguile/strports.c: store string ports in locale encoding
  (scm_strport_to_locale_u8vector, scm_call_with_output_locale_u8vector)
  (scm_open_input_locale_u8vector, scm_get_output_locale_u8vector):
  new functions

* libguile/strings.h: new declaration for scm_i_string_contains_char

* libguile/strings.c (scm_i_string_contains_char): new function
  (scm_from_stringn, scm_to_stringn):  use NULL for Latin-1
  (scm_from_locale_stringn, scm_to_locale_stringn): respect character
  encoding of input and output ports

* libguile/read.h: declaration for scm_scan_for_encoding

* libguile/read.c:
  (read_token): now takes scheme string instead of C string/length
  (read_complete_token): new function
  (scm_read_sexp, scm_read_number, scm_read_mixed_case_symbol)
  (scm_read_number_and_radix, scm_read_quote, scm_read_semicolon_comment)
  (scm_read_srfi4_vector, scm_read_bytevector, scm_read_guile_bit_vector)
  (scm_read_scsh_block_comment, scm_read_commented_expression)
  (scm_read_extended_symbol, scm_read_sharp_extension, scm_read_shart)
  (scm_read_expression): use scm_t_wchar for char type, use read_complete_token
  (scm_scan_for_encoding): new function to find a file's character encoding
  (scm_file_encoding): new function to find a port's character encoding

* libguile/rdelim.c: don't unpack strings

* libguile/print.h: declaration for modified function
  scm_i_charprint

* libguile/print.c: use locale when printing characters and
  strings
  (scm_i_charprint): input parameter is now scm_t_wchar
  (scm_simple_format): don't unpack strings

* libguile/posix.h: new declaration for scm_setbinary.

* libguile/posix.c (scm_setlocale): set default and stdio port
  encodings based on the locale's character encoding
  (scm_setbinary): new function

* libguile/ports.h (scm_t_port): add encoding and failed
  conversion handler to port type.  Declarations for new or modified
  functions scm_getc, scm_unget_byte, scm_ungetc,
  scm_i_get_port_encoding, scm_i_set_port_encoding_x,
  scm_port_encoding, scm_set_port_encoding_x,
  scm_i_get_conversion_strategy, scm_i_set_conversion_strategy_x,
  scm_port_conversion_strategy, scm_set_port_conversion_strategy_x.

* libguile/ports.c: assign the current ports to zero on startup so
  we can see if they've been set.
  (scm_current_input_port, scm_current_output_port,
  scm_current_error_port): return #f if the port is not yet
  initialized
  (scm_new_port_table_entry): set up a new port's encoding and
  illegal sequence handler based on the thread's current defaults
  (scm_i_remove_port): free port encoding name when port is removed
  (scm_i_mode_bits_n): now takes a scheme string instead of a c
  string and length.  All callers changed.
  (SCM_MBCHAR_BUF_SIZE): new const
  (scm_getc): new function, since the scm_getc in inline.h is now
  scm_get_byte_or_eof.  This pulls one codepoint from a port.
  (scm_lfwrite_substr, scm_lfwrite_str): now uses port's encoding
  (scm_unget_byte): new function, incorportaing the low-level functionality
  of scm_ungetc
  (scm_ungetc): uses scm_unget_byte

* libguile/numbers.h (scm_t_wchar): compilation order problem with
  scm_t_wchar being use in functions in multiple headers.  Forward
  declare scm_t_wchar.

* libguile/load.c (scm_primitive_load): scan for file encoding at
  top of file and use it to set the load port's encoding

* libguile/inline.h (scm_get_byte_or_eof): new function
  incorporating most of the functionality of scm_getc.

* libguile/fports.c (fport_fill_input): now returns scm_t_wchar

* libguile/chars.h (scm_t_wchar): avoid compilation order problem
  with declaration of scm_t_wchar
2009-08-25 07:54:37 -07:00
Andy Wingo
afe5e6baa7 eval is actually compile
* module/ice-9/boot-9.scm (eval): Here at the tail of boot-9, replace
  the root definition of `eval' with a procedure that will call
  `compile'.

* test-suite/tests/syntax.test ("top-level define"):
  ("internal define"): Run unmemoization tests in the interpreter, using
  primitive-eval.
2009-08-20 18:52:51 +02:00
Andy Wingo
12136c7148 define @bind using syntax-case
* module/ice-9/boot-9.scm (@bind): Define a VM-compatible syntax
  definition for this old evaluator primitive.

* test-suite/tests/dynamic-scope.test: Change the expected error
  messages.
2009-08-20 18:52:50 +02:00
Andy Wingo
b7946e9ec6 push new frame on stack before procedure & args
* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump

* libguile/vm-engine.c (vm_engine): Push a frame corresponding to the
  mv-call.

* libguile/vm-i-system.c: Renumber ops.
  (new-frame): New op, pushes a frame.
  (call, mv-call): No need to shuffle args, though we do need to pop the
  frame in the non-vm call case.
  (goto/args): Inconsequential tweaks.
  (call/cc): Push a frame if needed.

* module/language/tree-il/compile-glil.scm (flatten): Emit `new-frame'
  as appropriate.

* test-suite/tests/tree-il.test: Fix to expect new-frame.
2009-08-20 18:52:50 +02:00
Michael Gran
f8ba2bb911 Rename string-width to string-bytes-per-char
* libguile/strings.h: rename scm_string_width to scm_string_bytes_per_char

* libguile/strings.c (scm_string_width): renamed to scm_string_bytes_per_char
  (scm_string_bytes_per_char): renamed from scm_string_width

* module/language/assembly/compile-bytecode.scm (write-bytecode): string-width
  -> string-bytes-per-char

* module/language/glil/compile-assembly.scm (dump-object): string-width
  -> string-bytes-per-char
2009-08-19 22:15:22 -07:00
Andy Wingo
7f171dbfa0 remove (ice-9 lineio)'s dependency on (ice-9 readline)
* module/ice-9/lineio.scm: Use (ice-9 rdelim) instead of (ice-9
  readline) to remove readline dependency.
2009-08-18 17:52:46 +02:00
Andy Wingo
9591a2b016 `load' autocompiles
* libguile/load.h:
* libguile/load.c (scm_sys_warn_autocompilation_enabled): New primitive,
  not exported. Since `load' autocompiles now, it should warn in the
  same way that the bits hardcoded into C warn.
  (scm_try_autocompile): Use scm_sys_warn_autocompilation_enabled.

* module/ice-9/boot-9.scm (autocompiled-file-name): New helper.
  (load): Try autocompiling the argument, if appropriate. Will
  autocompile files passed on Guile's command line. `primitive-load' is
  unaffected.
2009-08-18 11:06:04 +02:00
Ludovic Courtès
fbb857a472 Merge branch 'master' into boehm-demers-weiser-gc
Conflicts:
	lib/Makefile.am
	libguile/Makefile.am
	libguile/frames.c
	libguile/gc-card.c
	libguile/gc-freelist.c
	libguile/gc-mark.c
	libguile/gc-segment.c
	libguile/gc_os_dep.c
	libguile/load.c
	libguile/macros.c
	libguile/objcodes.c
	libguile/programs.c
	libguile/strings.c
	libguile/vm.c
	m4/gnulib-cache.m4
	m4/gnulib-comp.m4
	m4/inline.m4
2009-08-18 00:06:45 +02:00
Ludovic Courtès
54b38caf19 Add proper --help' and --version' for `guile-tools compile'.
* configure.ac: Produce `meta/guile-tools'.

* meta/Makefile.am (EXTRA_DIST): Add `guile-tools.in'.
  (bin_SCRIPTS): Remove `guile-tools'.

* meta/uninstalled-env.in (PATH): Add "${top_builddir}/meta".

* module/scripts/compile.scm (%options): Add `--version'.
  (parse-args): Show the offending option name upon error.
  (show-version): New.
  (compile): Use `%guile-bug-report-address'.
2009-08-15 14:18:57 +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
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
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
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
Michael Gran
aa131e9e67 Merge commit 'origin/master' 2009-08-08 02:35:08 -07:00