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

6509 commits

Author SHA1 Message Date
No Itisnt
a572fc95f9 Use AM_SILENT_RULES to pare down build output, ignore auto-generated files
* .gitignore: Ignore extra gnulib headers.
* am/snarf: Silent SNARF command
* am/guilec: Silent GUILEC command
* configure.ac: Use AM_SILENT_RULES when available
* guile-readline/Makefile.am:
* libguile/Makefile.am:
* srfi/Makefile.am:
* test-suite/standalone/Makefile.am: Silence snarf output
2010-06-18 11:15:18 +02:00
U-Cain\Mike
24deb6d018 DAY_1 nl_langinfo constants don't require <nl_types.h>
There is an incorrect conditional compilation requirement that
<nl_types.h> be present for DAY_1 to be defined.  This doesn't
agree with the LSB and causes make check to fail on Cygwin.

* libguile/i18n.c [HAVE_NL_TYPES_H]: modify conditional compilatiion
2010-06-17 13:31:28 -07:00
Andy Wingo
826373a25d psyntax, primitive expander, and memoizer support for letrec*
* libguile/expand.c (expand_letrec_helper): Factor out common code.
  (expand_letrec): Use expand_letrec_helper.
  (expand_letrec_star): New primitive syntax: letrec*.

* libguile/memoize.c (memoize): Add memoizer support for in-order letrec
  (letrec*).

* module/ice-9/psyntax.scm (build-letrec): Another arg, `in-order?'.
  (chi-body): Adapt to build-letrec change. We don't yet use letrec* for
  internal definitions.
  (letrec): Adapt to build-letrec change.
  (letrec*): New expander.

* module/ice-9/psyntax-pp.scm: Regenerated.
2010-06-17 13:43:26 +02:00
Andy Wingo
fb6e61ca21 beginnings of letrec* support in the expander
* libguile/expand.h (SCM_EXPANDED_LETREC_IN_ORDER_P)
  (SCM_MAKE_EXPANDED_LETREC): Add a new field to letrec, in-order?. Will
  be used to support letrec*.

* libguile/expand.c (LETREC, expand_named_let, expand_letrec): Adapt
  code.

* module/language/elisp/compile-tree-il.scm (compile-pair):
* module/ice-9/psyntax.scm (build-named-let, build-letrec): Pass #f for
  in-order? to `make-letrec'.

* module/ice-9/psyntax-pp.scm: Regenerate.

* module/language/tree-il.scm: Add letrec-in-order? accessor.
  (parse-tree-il, unparse-tree-il): Parse and unparse an in-order?
  letrec as `letrec*'.
  (tree-il->scheme): Serialize letrec*.
2010-06-17 13:43:26 +02:00
Andy Wingo
f238862e9e fix bug in memoize
* libguile/memoize.c (memoize): Fix a bug where LETREC was being
  accessed as LET, and it just happened to coincide.
2010-06-17 13:43:25 +02:00
Thien-Thi Nguyen
cd53bd3668 Add tmpfile(3) to libguile.
* libguile/posix.c (scm_tmpfile): New primitive.
* libguile/posix.h (scm_tmpfile): New func decl.

* doc/ref/posix.texi (File System): Document `tmpfile'.
2010-06-15 23:06:00 +02:00
Andy Wingo
5a8fc758b0 expt / integer-expt fixes
* libguile/numbers.c (scm_integer_expt): Validate the first arg as a
  number.
  (scm_expt): Delegate to scm_integer_expt iff x is exact. Fixes
  fractions.test, which I broke recently

* test-suite/tests/numbers.test ("integer-expt"): Add test for
  (integer-expt #t 0).
2010-06-10 18:14:02 +02:00
Andy Wingo
162125af16 fix build error with Compaq C V6.3-025
* libguile/hashtab.c: Re-arrange functions to avoid the need for
  pre-declaring character arrays with no length. Fixes compilation on
  Compaq C V6.3-025. Thanks to Jay Krell for the report.
2010-06-09 23:27:33 +02:00
Andy Wingo
a4082ab57e fix (expt #t 0)
* libguile/numbers.c (scm_expt): Fix check regarding when to dispatch to
  integer-expt.

* test-suite/tests/numbers.test ("expt"): Add test.
2010-06-07 23:27:55 +02:00
Andy Wingo
f42d8bd8ff simplify macro representation in the wake of module hygiene changes
* module/ice-9/psyntax.scm (chi-install-global, chi-macro)
  (eval-local-transformer): Now that we handle module hygiene through
  syntax objects, there is no more need to record the current module
  when installing syntax transformers.

* module/ice-9/psyntax-pp.scm: Regenerated (trickily).

* libguile/_scm.h: Bump objcode version for macro representation change.

* libguile/macros.c (scm_macro_transformer): Adapt to change in macro
  representation.
2010-06-06 13:39:44 +02:00
Ludovic Courtès
98f1f9a51a Remove unused symbols.
* libguile/debug.c (scm_sym_procname, scm_sym_dots): Remove.
2010-06-01 22:56:49 +02:00
Andy Wingo
07d22c0259 rename (rnrs bytevector) to (rnrs bytevectors)
* module/rnrs/bytevectors.scm: Rename to (rnrs bytevectors), from (rnrs
  bytevector), to match the name from the R6RS.

* benchmark-suite/benchmarks/bytevectors.bm:
* doc/ref/api-data.texi:
* doc/ref/api-foreign.texi:
* libguile/bytevectors.c:
* module/6/rnrs.scm:
* module/language/assembly.scm:
* module/language/assembly/compile-bytecode.scm:
* module/language/assembly/decompile-bytecode.scm:
* module/language/glil/compile-assembly.scm:
* module/language/tree-il/primitives.scm:
* module/srfi/srfi-4.scm:
* module/srfi/srfi-4/gnu.scm:
* module/system/foreign.scm:
* test-suite/standalone/test-ffi:
* test-suite/tests/asm-to-bytecode.test:
* test-suite/tests/bytevectors.test:
* test-suite/tests/foreign.test:
* test-suite/tests/r6rs-ports.test: Update all referrers.
2010-06-01 13:26:11 +02:00
Ludovic Courtès
1b68d62762 Fix `VM_VALIDATE_BYTEVECTOR' macro wrt. trailing semicolons.
* libguile/vm-i-scheme.c (VM_VALIDATE_BYTEVECTOR): Enclose in "do { }
  while (0)".
2010-06-01 00:42:58 +02:00
Ludovic Courtès
daccfef47b Fix unaligned accesses by the bytevector instructions.
* libguile/vm-i-scheme.c (ALIGNED_P): New macro.
  (BV_FIXABLE_INT_REF, BV_INT_REF, BV_FLOAT_REF, BV_FIXABLE_INT_SET,
  BV_INT_SET, BV_FLOAT_SET): Check the alignment of the pointer instead
  of checking "i % size == 0".  This fixes bus errors on
  `sparc64-linux-gnu'.

* libguile/vm.c: Include <alignof.h>.
2010-06-01 00:40:00 +02:00
Ludovic Courtès
86425e2653 Fix argument and return value alignment in `scm_i_foreign_call'.
* libguile/foreign.c (scm_i_foreign_call): Fix the computation of
  ARG_SIZE wrt. alignment.  Arrange so that the address ARGS[i] is
  aligned, rather than checking whether OFF is aligned.  Have the RVALUE
  be at least word-aligned, which fixes calls to `char'-returning
  functions on `armv5tel-*-linux-gnueabi'.
2010-05-30 22:54:39 +02:00
Ludovic Courtès
1880c97df1 Fix parenthesizing of the `ROUND_UP' macro; factorize.
* libguile/_scm.h (ROUND_UP): New macro.

* libguile/continuations.c (ROUND_UP): Remove.

* libguile/control.c (ROUND_UP): Remove.

* libguile/foreign.c (ROUND_UP): Remove.
2010-05-30 22:41:36 +02:00
Ludovic Courtès
65c7a8bd64 Remove dead code related to `scm_i_terminating'.
* libguile/fports.c (scm_i_terminating): Remove declaration.
  (fport_flush): Remove code conditional of `scm_i_terminating'.

* libguile/gc.c (scm_i_terminating): Remove.
2010-05-28 17:02:14 +02:00
Ludovic Courtès
8c93b597b3 Fix the visibility of a few of internal symbols.
* libguile/gc.h (scm_i_gc): Make internal.
* libguile/posix.h (scm_i_locale_mutex): Likewise.
* libguile/arrays.h (scm_i_tc16_array): Likewise.
* libguile/numbers.c (scm_i_num_less_p): Likewise.
* libguile/discouraged.h (scm_i_init_discouraged): Likewise.
* libguile/continuations.c (scm_i_dummy): Made static.
* libguile/gc.c (scm_i_cell_validation_already_running): Likewise.
* libguile/discouraged.h (scm_i_init_discouraged): Likewise.
2010-05-28 17:02:13 +02:00
Ludovic Courtès
477e42195c Change occurrences of "filesystem" to "file system".
* doc/ref/posix.texi (File System): Change "filesystem" to "file
  system".

* libguile/posix.c (scm_utime): Ditto.
2010-05-28 17:02:13 +02:00
Ludovic Courtès
e3401c659e Use GCC's `malloc' attribute for malloc-like routines.
* libguile/__scm.h (SCM_MALLOC): New macro.

* libguile/gc.h (scm_malloc, scm_calloc, scm_strdup, scm_strndup,
  scm_gc_malloc_pointerless, scm_gc_calloc, scm_gc_malloc,
  scm_gc_strdup, scm_gc_strndup): Mark as `SCM_MALLOC'.
2010-05-28 17:02:13 +02:00
Volker Grabsch
18dcd80e37 don't fail when HAVE_STAT64 is undefined
* libguile/_scm.h: Check whether `HAVE_STAT64' is defined instead of
  checking its value.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2010-05-28 17:02:13 +02:00
Ludovic Courtès
405a79ca7f Add `scm_t_aligned_cell' internal type.
* libguile/_scm.h (struct scm_aligned_cell)[__GNUC__]: New type.
  (union scm_aligned_cell)[!__GNUC__]: New type.
  (scm_t_aligned_cell): New type.

* libguile/vm.c (vm_dispatch_hook): Use it.
2010-05-28 17:02:13 +02:00
Julian Graham
911b03b20c Support for the #!r6rs lexeme.
* libguile/read.c (scm_read_shebang): New function;
  (scm_read_sharp): Call scm_read_shebang on '!', which delegates to
  scm_read_scsh_block_comment as necessary.
* test-suite/tests/reader.test ("R6RS lexeme comment", "partial R6RS
  lexeme comment"): New tests.
2010-05-27 09:21:18 -04:00
Andy Wingo
698514350a remove scm_memoizer_p and scm_memoizer declarations
* libguile/memoize.h (scm_memoizer_p, scm_memoizer): Remove these
  declarations.
2010-05-27 11:34:48 +02:00
Ludovic Courtès
f1046e6b78 Raise an exception upon VM stack overflows (fixes bug #29574).
* libguile/vm-engine.c (VM_NAME)[vm_error_stack_overflow]: Increase
  `vp->stack_limit' when possible.

* libguile/vm.c (VM_STACK_RESERVE_SIZE): New macro.

* test-suite/lib.scm (exception:vm-error): New variable.

* test-suite/tests/eval.test ("stack overflow"): New test prefix.
2010-05-26 23:41:23 +02:00
Andy Wingo
632ddbf02b iron out inconsistency between eval and compile expansion
* libguile/expand.c (expand_lambda_star_case): Harmonize with tree-il,
  expanding keywords to (aok? (kw name gensym) ...), not
  (aok? (kw . index) ...).

* libguile/memoize.c (memoize): Process the (kw name gensym) format into
  (kw . index).

* module/ice-9/psyntax.scm (build-lambda-case): Remove a
  compile-versus-eval special case.

* module/ice-9/psyntax-pp.scm: Regenerate.
2010-05-20 12:53:21 +02:00
Andy Wingo
a310a1d12e primitive-eval takes expanded, not memoized, source
* module/ice-9/eval.scm (primitive-eval):
* libguile/eval.c (scm_c_primitive_eval): Don't expect a memoized
  expression -- expect either raw source or an *expanded* expression. We
  handle memoization ourselves.

* libguile/expand.c (scm_macroexpand): Settle down into its proper name,
  "macroexpand", even as we comment that it is but a fleeting boot
  expander.
  (scm_macroexpanded_p): New predicate for expanded code.

* libguile/expand.h: Add scm_macroexpanded_p.

* libguile/memoize.c (scm_memoize_expression): Require that the
  expression be expanded.
  (scm_init_memoize): Don't alias memoize-expression to macroexpand.

* module/ice-9/psyntax-pp.scm:
* module/ice-9/psyntax.scm: Always produce macroexpanded expressions,
  and hand them to primitive-eval. No more calls to memoize-expression
  here.

* test-suite/tests/optargs.test: Remove some tests, as unfortunately we
  have no way to invoke the boot expander after boot.
2010-05-20 12:25:52 +02:00
Andy Wingo
3e5ea35c2f %null-pointer properly aligned
* libguile/foreign.c: Allocate %null-pointer on the heap, to assure
  proper alignment.
2010-05-20 01:00:37 +02:00
Andy Wingo
e1ca91007a fix a couple expander naming bugs
* libguile/expand.h:
* libguile/memoize.c: Fix a couple bugs: it's application-args, not
  application-exps, and public?, not public.
2010-05-19 23:25:50 +02:00
Andy Wingo
ccbc25f33f %expanded-vtables is a vector
* libguile/expand.c (scm_init_expand): %expanded-vtables is a vector.
2010-05-19 22:57:52 +02:00
Andy Wingo
dc3e203e07 separate boot expansion from memoization
* libguile/Makefile.am:
* libguile/init.c:
* libguile/expand.c:
* libguile/expand.h: Add new expander. The idea is that macroexpansion
  is one thing, and whether to compile or interpret the result of that
  is another thing.

* libguile/memoize.c: Adapt to expand as necessary, and then memoize
  expanded source without worrying about syntax errors.

* module/ice-9/eval.scm (make-general-closure): Allow alt clauses to not
  possess the full make-general-closure arity.
2010-05-19 22:51:31 +02:00
Andy Wingo
667361f6ce remove the new scm_memoize_begin, etc
* libguile/memoize.h:
* libguile/memoize.c: Remove the recently-added scm_memoize_begin,
  scm_memoize_lambda, et al. We'll take a different tack.
2010-05-18 22:30:58 +02:00
Andy Wingo
311fbeb7c3 scm_memoize_lambda update
* libguile/memoize.h:
* libguile/memoize.c (scm_memoize_lambda): Update to memoize
  "full-arity" lambdas.
2010-05-16 12:24:08 +02:00
Andy Wingo
7572ee5261 evaluator support for case-lambda
* libguile/memoize.c (patch_case_lambda, scm_m_case_lambda)
  (scm_m_case_lambda_star): Add memoizers for case-lambda and
  case-lambda*.
  (unmemoize): Unmemoize lambdas with multiple arities.

* libguile/eval.c (prepare_boot_closure_env_for_apply):
  (prepare_boot_closure_env_for_eval): Adapt to return both body and
  env, so that case-lambda clauses can be selected appropriately.
  (eval, boot_closure_apply): Adapt callers.

* module/ice-9/eval.scm (make-general-closure): Support multiple
  arities.
2010-05-14 00:28:39 +02:00
Andy Wingo
d8a071fc4e primitive support for lambda*
* libguile/memoize.c (scm_m_lambda_star): Define lambda* in the
  pre-psyntax env, and make it memoize lambda* expressions.

* libguile/eval.c (BOOT_CLOSURE_PARSE_FULL): New helper.
  (error_invalid_keyword, error_unrecognized_keyword): New helpers.
  (prepare_boot_closure_env_for_apply): Flesh out application of boot
  closures with "full" arity.
  (prepare_boot_closure_env_for_eval): Punt to
  prepare_boot_closure_env_for_eval for the full-arity case.

* module/ice-9/eval.scm (make-fixed-closure): Rename from `closure', and
  just handle fixed arities, where there is no rest argument..
  (make-general-closure): New helper, a procedure, that returns a
  closure that can take rest, optional, and keyword arguments.
  (eval): Adapt to call make-fixed-closure or make-general-closure as
  appropriate.

* test-suite/tests/optargs.test ("lambda* inits"): Test the memoizer as
  well.
2010-05-14 00:28:32 +02:00
Andy Wingo
9658182d5f tweak to lambda* memoization format
* libguile/memoize.c (FULL_ARITY): Change the form to more closely
  approximate <lambda-case>.
  (unmemoize): Unmemoize lambda* expressions.
2010-05-13 23:37:15 +02:00
Andy Wingo
8f9c5b589d change to format of memoization lambda expressions
* libguile/memoize.c (scm_m_lambda, memoize_named_let)
  (scm_memoize_lambda, unmemoize)
* libguile/eval.c (eval, prepare_boot_closure_env_for_apply)
  (prepare_boot_closure_env_for_eval, boot_closure_apply):
* module/ice-9/eval.scm (primitive-eval): Change the format for memoized
  lambda expressions, so as to allow, in the future, case-lambda* to be
  supported by the evaluator.
2010-05-13 23:37:15 +02:00
Andy Wingo
cc00f44743 scm_badargsp is deprecated
* libguile/eval.h:
* libguile/eval.c:
* libguile/deprecated.h
* libguile/deprecated.c (scm_badargsp): Deprecate scm_badargsp.
2010-05-13 23:37:15 +02:00
Andy Wingo
384012a197 add memoize-begin, memoize-let, etc functions
* libguile/memoize.h:
* libguile/memoize.c (scm_memoize_begin, scm_memoize_if,
  scm_memoize_lambda, scm_memoize_let, scm_memoize_quote,
  scm_memoize_define, scm_memoize_with_fluids, scm_memoize_call,
  scm_memoize_lexical_ref, scm_memoize_lexical_set,
  scm_memoize_toplevel_ref, scm_memoize_toplevel_set,
  scm_memoize_module_ref, scm_memoize_module_set): New functions, public
  to Scheme but private to C. For use by psyntax, in the future.
2010-05-07 23:14:00 +02:00
Andy Wingo
2cd72a849f add "memoizer" data type
* libguile/memoize.h:
* libguile/memoize.c (MAKMEMO_APPLY): Take the proc and args separately.
  (scm_tc16_memoizer, SCM_MEMOIZER_P, SCM_MEMOIZER): New smob type, for
  "syntax" like @apply that have normal evaluation order.
  (memoize_env_ref_macro, memoize): Refactor to handle "memoizers"
  generically.

  Reorganize the list of SCM_SYNTAX forms.

  Move @apply, @dynamic-wind, @call-with-current-continuation,
  @call-with-values, @prompt handling down to be generic "memoizer" data
  types.

  (scm_memoizer_p, scm_memoizer): New functions, exposed to Scheme. Will
  be used by psyntax.
2010-05-07 23:13:41 +02:00
Andy Wingo
4f692ace90 macro expanders return memoized expressions
* libguile/eval.c (scm_c_primitive_eval):
* module/ice-9/eval.scm (primitive-eval): Rely on the expander to
  produce a memoized expression. If the expression is already memoized,
  just pass it through (the equivalent of the old "noexpand" hack).

* libguile/memoize.c (scm_init_memoize): Initialize `memoize-expression'
  as the initial binding of `macroexpand'.

* libguile/modules.c (scm_module_transformer): Before modules are
  booted, look for `macroexpand', not `%pre-modules-transformer'.

* module/ice-9/boot-9.scm: No more %pre-modules-transformer. Loading
  psyntax extends `macroexpand'.
  (make-module): `macroexpand' is the default transformer.

* module/ice-9/psyntax.scm: No more `noexpand'.
  (top-level-eval-hook, local-eval-hook): Instead of annotating with
  noexpand, memoize the expression before handing it to primitive-eval.
  (macroexpand): No more noexpand hack -- in its place we have another
  hack, to memoize the result when running in eval mode.
* module/ice-9/psyntax-pp.scm: Regenerated.
2010-05-07 22:22:19 +02:00
Ludovic Courtès
b79ba0b01e Attempt to guarantee 8-byte alignment of on-stack frame objects.
* libguile/vm.c (vm_dispatch_hook): Make FRAME a union with a `double'
  member.
2010-05-07 15:59:50 +02:00
Ludovic Courtès
b3567435e1 Allocate frame objects on the stack when invoking VM hooks.
* libguile/vm.c (vm_dispatch_hook): Don't call `scm_c_make_frame ()'.
  Instead, allocate FRAME on the stack.
2010-05-07 13:47:52 +02:00
Ludovic Courtès
e6bd58af8f Fix the type tag produced by `SCM_STATIC_PROGRAM'.
* libguile/snarf.h (SCM_STATIC_PROGRAM): Fix typo.
2010-05-07 13:47:52 +02:00
Ludovic Courtès
0a935b2ab5 When printing a VM, show the type of engine being used.
* libguile/vm.c (scm_i_vm_print): Print the engine type.
2010-05-07 13:47:52 +02:00
Andy Wingo
631237b46c check layout when making vtables
* libguile/struct.c (scm_is_valid_vtable_layout): New private layout
  validating function.
  (scm_i_struct_inherit_vtable_magic): Do a more proper layout
  validation, and don't abort.
2010-05-04 23:48:10 +02:00
Andy Wingo
de45d8eef9 add assert-nargs-ee/locals instruction
* libguile/vm-i-system.c (assert-nargs-ee/locals): New instruction, a
  combination of assert-nargs-ee and reserve-locals in the case in which
  nreq and nlocs can both be represented in 8 bits.

* module/language/glil/compile-assembly.scm (glil->assembly): Add
  compiler case.

* doc/ref/vm.texi (Function Prologue Instructions): Update docs.
2010-05-02 13:41:31 +02:00
Andy Wingo
384dce46bf add underflow check in make-array
* libguile/vm-i-scheme.c (make-array): Check for underflow before making
  the array.
2010-05-02 13:15:22 +02:00
Andy Wingo
ba2d960396 add SCM_UNLIKELY to CHECK_UNDERFLOW
* libguile/vm-engine.h (CHECK_OVERFLOW, CHECK_UNDERFLOW): Add
  SCM_UNLIKELY blocks. Fix off-by-one error in CHECK_UNDERFLOW.
  (PRE_CHECK_UNDERFLOW): New macro, for checking underflow before
  accessing the current sp.
  (POP): Use PRE_CHECK_UNDERFLOW.
2010-05-02 13:14:58 +02:00
Andy Wingo
c99865c123 simplify make-struct
* libguile/vm-i-scheme.c: Use DROPN idiom.
2010-05-01 00:49:06 +02:00