Ludovic Courtès [Fri, 20 Mar 2009 00:11:16 +0000 (01:11 +0100)]
Aggregate `Makefile.am' files under `examples/'.
* configure.in: Don't produce `examples/*/Makefile'.
* examples/Makefile.am (SUBDIRS): Remove.
(EXTRA_DIST, AM_CFLAGS, AM_LIBS): New.
(box/box, box/box.o, box-module/box, box-module/box.o, libbox.la,
box-dynamic/box.lo, libbox-module.la, box-dynamic-module/box.lo,
installcheck, CLEANFILES, clean-local): New targets, aggregated from
`Makefile.am' files formerly in sub-directories.
* examples/check.test: New file, aggregated from `check.test' files in
sub-directories.
Ludovic Courtès [Tue, 24 Mar 2009 22:37:41 +0000 (23:37 +0100)]
Include <alloca.h> in `gsubr.c'.
* libguile/gsubr.c: Include <alloca.h>. Reported by Carlo Bramini
<carlo.bramix@libero.it>.
Andy Wingo [Fri, 20 Mar 2009 12:20:28 +0000 (13:20 +0100)]
speed up goops rehashing
* module/oop/goops/dispatch.scm (cache-try-hash!): Speed up goops
rehashing, in theory. I haven't measured, though.
Andy Wingo [Fri, 20 Mar 2009 11:52:24 +0000 (12:52 +0100)]
fix interpreted methods with empty bodies
* module/oop/goops.scm (method): If a method has no body, subst in `(if
#f #f)' instead of `(begin)', to please the memoizer.
Andy Wingo [Fri, 20 Mar 2009 11:06:10 +0000 (12:06 +0100)]
add generic method-formals; fixes to method-source
* module/oop/goops.scm (method-source): Don't throw an error if this
method has no source.
(method-formals): New generic function, the complement of
method-specializers for introspection.
Andy Wingo [Thu, 19 Mar 2009 10:46:22 +0000 (11:46 +0100)]
fix casts to unsigned long in objcodes.c
* libguile/objcodes.c (scm_c_make_objcode_slice): Fix casts to unsigned
long.
Ludovic Courtès [Wed, 18 Mar 2009 21:28:37 +0000 (22:28 +0100)]
Have `scm_take_locale_symbol ()' return an interned symbol (fixes bug #25865).
* libguile/symbols.c (intern_symbol): New function, with code formerly
duplicated in `scm_i_c_mem2symbol ()' and `scm_i_mem2symbol ()'.
(scm_i_c_mem2symbol, scm_i_mem2symbol): Use it.
(scm_take_locale_symboln): Use `intern_symbol ()'. This fixes
bug #25865.
* test-suite/standalone/Makefile.am
(test_scm_take_locale_symbol_SOURCES,
test_scm_take_locale_symbol_CFLAGS,
test_scm_take_locale_symbol_LDADD): New variables.
(check_PROGRAMS, TESTS): Add `test-scm-take-locale-symbol'.
Andy Wingo [Wed, 18 Mar 2009 00:49:28 +0000 (01:49 +0100)]
rework procedure-callers to stay correct as callees are redefined
* module/system/xref.scm (procedure-callers): Rework to calculate the
callers of a *variable*, not of a value. This is because the
module-observers only get fired when the module changes, not with the
variables change values. Also accept either a variable, a symbol
(resolved in the current module), or a modname . symname pair.
Andy Wingo [Tue, 17 Mar 2009 23:46:16 +0000 (00:46 +0100)]
doubly-weak callers db
* module/system/xref.scm (ensure-callers-db): Store the callers db as a
doubly-weak hash table.
Andy Wingo [Tue, 17 Mar 2009 23:44:26 +0000 (00:44 +0100)]
implement procedure-callers
* module/system/xref.scm: Implement procedure-callers, as the inverse of
procedure-callees, with a cache invalidated by changes in modules.
* module/ice-9/boot-9.scm (module-use!): Don't poke module observers when
module-use! is called for an already-used module.
Andy Wingo [Tue, 17 Mar 2009 22:16:35 +0000 (23:16 +0100)]
add xref stub for interpreted procedures
* module/system/xref.scm (hacky-procedure-callees): Add a
procedure-callees implementation for procedures with source, that
currently does nothing. Not sure what to do, going into the future.
Andy Wingo [Tue, 17 Mar 2009 22:11:56 +0000 (23:11 +0100)]
add xref.scm
* module/system/xref.scm: New module, will provide callers/callees info.
* module/Makefile.am (SOURCES): Add xref.scm.
Andy Wingo [Mon, 16 Mar 2009 22:45:07 +0000 (23:45 +0100)]
tweaks to the un-integrated test cases
* testsuite/Makefile.am: Sortof turn these VM tests into more
automake-like tests. Needs further work.
Andy Wingo [Mon, 16 Mar 2009 22:39:29 +0000 (23:39 +0100)]
non-srcdir build fixes
* guile-tools.in: Fix the checks to account for non-srcdir builds.
* libguile/frames.c:
* libguile/objcodes.c:
* libguile/programs.c:
* libguile/instructions.c:
* libguile/vm.c: Fix snarf-includes to cope with non-srcdir builds.
* libguile/instructions.h:
* libguile/instructions.c: Fix the stubs inclusion to be non-srcdir
compatible.
* libguile/vm-expand.h (VM_DEFINE_INSTRUCTION): Fix some things so as not
to require the instructions.h defintitions, since we have the codes
already. Not important tho :)
* pre-inst-guile-env.in: Minor tweak that should have no effect.
* test-suite/standalone/Makefile.am (all-local): Remove a chmod +x step,
the configure.ac rule should do that if necessary.
Andy Wingo [Mon, 16 Mar 2009 21:41:50 +0000 (22:41 +0100)]
try a new way of checking byte order
Andy Wingo [Sat, 14 Mar 2009 15:24:34 +0000 (16:24 +0100)]
decompile source info into <glil-source> annotations.
* module/language/glil/decompile-assembly.scm (decompile-load-program):
Decompile source information into <glil-source> annotations.
Andy Wingo [Sat, 14 Mar 2009 15:03:34 +0000 (16:03 +0100)]
fix bug serializing filenames in source locations
* module/language/glil/compile-assembly.scm (limn-sources): Fix bug
whereby filename was serialized as a ("foo") instead of "foo".
Andy Wingo [Sat, 14 Mar 2009 14:54:19 +0000 (15:54 +0100)]
tweaks to asm->glil decompiler, perhaps fix a (program-source p 0) bug
* module/language/ghil/compile-glil.scm (codegen): Push a program's
source locations before copying external args to heap -- perhaps fixes
(program-source p 0) for some programs.
* module/language/glil/decompile-assembly.scm (decompile-load-program):
Take another arg, the object vector. Emit <glil-bind> and <glil-unbind>
correctly. Properly unparse properties. Just have to deal with source
locations now.
Andy Wingo [Sat, 14 Mar 2009 12:59:57 +0000 (13:59 +0100)]
add assembly->glil decompiler
* module/language/glil/decompile-assembly.scm: A first pass at an
assembly->glil decompiler. Works for a small subset of programs.
* module/Makefile.am (GLIL_LANG_SOURCES):
* module/language/glil/spec.scm (glil): Add the decompiler.
Andy Wingo [Sat, 14 Mar 2009 11:07:04 +0000 (12:07 +0100)]
update disassembler for changes to decompiler
* module/language/assembly/disassemble.scm (disassemble-load-program)
(code-annotation): And update the disassembler for changes to
decompiler.
Andy Wingo [Sat, 14 Mar 2009 11:01:56 +0000 (12:01 +0100)]
parse jumps as labels when decompiling bytecode->assembly
* module/language/assembly/decompile-bytecode.scm (decode-load-program):
Parse out jumps as labels.
Andy Wingo [Fri, 13 Mar 2009 22:55:51 +0000 (23:55 +0100)]
procedure-arity on vm-compile apply: verily, unresolved.
* test-suite/tests/procprop.test ("procedure-arity"): Procedure-property
'arity on "apply" will fail if "apply" is a program. I suggest that
procedure-property is actually the wrong interface for this; if we even
want to preseve the old arity forms, we should have an accessor for
arity directly that the VM can implement. But in the meantime throw
this nasty error while we decide.
Andy Wingo [Tue, 17 Mar 2009 15:41:01 +0000 (16:41 +0100)]
Andy Wingo [Tue, 17 Mar 2009 15:40:52 +0000 (16:40 +0100)]
Merge commit '
e20d7001c3f7150400169fecb0bf0eefdf122fe2' into vm-check
Conflicts:
libguile/stacks.c
Andy Wingo [Tue, 17 Mar 2009 15:36:20 +0000 (16:36 +0100)]
fix marking of double-cell subrs
* libguile/gc-mark.c (scm_gc_mark_dependencies): Mark the name, generic,
and properties of subrs.
Andy Wingo [Tue, 17 Mar 2009 15:10:14 +0000 (16:10 +0100)]
Andy Wingo [Tue, 17 Mar 2009 15:09:41 +0000 (16:09 +0100)]
Andy Wingo [Tue, 17 Mar 2009 15:09:02 +0000 (16:09 +0100)]
Andy Wingo [Tue, 17 Mar 2009 15:06:52 +0000 (16:06 +0100)]
Andy Wingo [Tue, 17 Mar 2009 15:06:44 +0000 (16:06 +0100)]
Andy Wingo [Tue, 17 Mar 2009 15:05:47 +0000 (16:05 +0100)]
Andy Wingo [Tue, 17 Mar 2009 15:05:41 +0000 (16:05 +0100)]
Andy Wingo [Tue, 17 Mar 2009 15:05:37 +0000 (16:05 +0100)]
Andy Wingo [Tue, 17 Mar 2009 15:04:04 +0000 (16:04 +0100)]
Andy Wingo [Tue, 17 Mar 2009 15:01:35 +0000 (16:01 +0100)]
Andy Wingo [Tue, 17 Mar 2009 15:01:18 +0000 (16:01 +0100)]
Andy Wingo [Tue, 17 Mar 2009 14:59:40 +0000 (15:59 +0100)]
Merge commit '
53d81399bef1d9396665e79fb6b9c25eb8e2a6ad' into vm-check
Also cherry-picks the changes from
1405f1b60fa178303484cd428068ecd01ff6d322
Conflicts:
module/ice-9/session.scm
Andy Wingo [Tue, 17 Mar 2009 14:57:07 +0000 (15:57 +0100)]
Andy Wingo [Tue, 17 Mar 2009 14:56:31 +0000 (15:56 +0100)]
Andy Wingo [Tue, 17 Mar 2009 14:56:22 +0000 (15:56 +0100)]
Andy Wingo [Tue, 17 Mar 2009 14:54:42 +0000 (15:54 +0100)]
Andy Wingo [Tue, 17 Mar 2009 14:54:34 +0000 (15:54 +0100)]
Merge commit '
752be95a475132506c35922d284884cf776149d0' into vm-check
Conflicts:
INSTALL
Andy Wingo [Tue, 17 Mar 2009 14:52:41 +0000 (15:52 +0100)]
Andy Wingo [Fri, 13 Mar 2009 22:45:24 +0000 (23:45 +0100)]
revert annotation support in syncase. another day perhaps.
* module/ice-9/syncase.scm: Revert support for annotations, as I'm seeing
wierd problems whereby syntax-object->datum does not fully strip its
input.
Ludovic Courtès [Mon, 9 Mar 2009 17:59:04 +0000 (18:59 +0100)]
Update `NEWS'.
Andy Wingo [Sun, 8 Mar 2009 22:51:12 +0000 (23:51 +0100)]
Fix errors when stripping annotations
* module/ice-9/annotate.scm (set-annotation-stripped!): Fix prototype to
correspond to what syncase needs.
* module/ice-9/psyntax.scm (strip-annotation): Use `if', not `when', for
portability.
* module/ice-9/psyntax-pp.scm: Regenerate.
Ludovic Courtès [Sun, 8 Mar 2009 21:16:37 +0000 (22:16 +0100)]
Aggregate `Makefile.am' files under `lang/'.
* lang/Makefile.am (SUBDIRS): Remove.
(elisp_sources): Aggregate the value of `elisp_SOURCES' formerly found
in sub-directories' `Makefile.am'.
Ludovic Courtès [Sat, 28 Feb 2009 15:59:05 +0000 (16:59 +0100)]
Move `guardians.test' to its own module.
* test-suite/tests/guardians.test: Add `define-module' clause.
Ludovic Courtès [Sun, 8 Mar 2009 15:36:14 +0000 (16:36 +0100)]
Provide a C vararg interface to gsubr invocation.
* libguile/eval.i.c (CEVAL): Update calls to `scm_i_gsubr_apply ()' with
a fixed number of arguments. Use `scm_i_gsubr_apply_list ()' for
calls with a list of arguments of unknown length.
(SCM_APPLY): Use `scm_i_gsubr_apply_list ()' instead of
`scm_i_gsubr_apply ()'.
* libguile/gsubr.c (gsubr_apply_raw): New.
(scm_i_gsubr_apply): Change to take a C vararg list instead of a
Scheme list. Use `gsubr_apply_raw ()'.
(scm_i_gsubr_apply_list): Use `gsubr_apply_raw ()'.
* libguile/gsubr.h (scm_i_gsubr_apply): Update prototype.
(scm_i_gsubr_apply_list): New declaration.
Ludovic Courtès [Sun, 8 Mar 2009 11:19:42 +0000 (12:19 +0100)]
Slightly simplify gsubr invocation in the evaluator.
* libguile/eval.i.c (CEVAL): Remove the `cclon' label; replace jumps to
`cclon' with `RETURN (scm_i_gsubr_apply (...))'.
Ludovic Courtès [Sun, 8 Mar 2009 15:38:51 +0000 (16:38 +0100)]
Add new subr invocation benchmarks.
* benchmark-suite/benchmarks/subr.bm (hook1, hook3): New variables.
("subr invocation")("generic subr with rest arg", "generic subr with
rest arg and 3+ parameters"): New benchmarks.
("subr application")("generic subr with rest arg", "generic subr with
rest arg and 3+ parameters"): New benchmarks.
Andy Wingo [Fri, 6 Mar 2009 18:50:11 +0000 (19:50 +0100)]
actually use syncase's source information tracking. rock!
* module/ice-9/annotate.scm (deannotate/source-properties): Version of
deannotate that sets source properties on the resulting expressions.
* module/ice-9/syncase.scm (sc-macro, syncase): Annotate expressions
before they go into syncase, and deannotate/source-properties when they
come out. The upshot is that syncase now understands source
information, yay!
Andy Wingo [Fri, 6 Mar 2009 18:37:44 +0000 (19:37 +0100)]
modify psyntax so it produced annotated source if given annotated source
* module/ice-9/psyntax.scm (build-annotated): New helper, used by the
output constructors.
(build-application, build-conditional, build-lexical-reference)
(build-lexical-assignment, build-global-reference)
(build-global-assignment, build-global-definition, build-lambda)
(build-primref, build-data, build-sequence, build-let)
(build-named-let, build-letrec, build-lexical-var): Use
build-annotated, so we produce annotated source if we have source
information.
* module/ice-9/psyntax-pp.scm: Regenerated.
Andy Wingo [Fri, 6 Mar 2009 16:01:47 +0000 (17:01 +0100)]
support source-level annotations in syncase
* module/ice-9/annotate.scm (<annotation>): Slightly more concise
printing.
(annotate): Don't create annotations if we have no source info.
* module/ice-9/psyntax.scm (annotation?): Remove this definition, as we
now provide annotation support.
* module/ice-9/psyntax-pp.scm: Regenerated.
* module/ice-9/syncase.scm: Use (ice-9 annotate).
* module/language/scheme/expand.scm (eval-when): Define the eval-when
transformer.
Andy Wingo [Fri, 6 Mar 2009 15:57:17 +0000 (16:57 +0100)]
fix eval-when statements in boot-9
* module/ice-9/boot-9.scm: Fix a couple eval-when statements.
Andy Wingo [Fri, 6 Mar 2009 12:29:13 +0000 (13:29 +0100)]
Replace eval-case with eval-when
* module/ice-9/boot-9.scm (eval-when): Replace eval-case with eval-when.
Eval-when is *much* simpler, and more expressive to boot. Perhaps in
the future we'll get 'visit and 'revisit too.
* module/ice-9/deprecated.scm (eval-case): Provide mostly-working
deprecated version of eval-case.
* module/ice-9/boot-9.scm (defmacro, define-macro): Relax condition: we
can make defmacros that are not at the toplevel now. But in the future
we should replace this implementation of defmacros with one written in
syntax-case.
(define-module, use-modules, use-syntax): Allow at non-toplevel.
(define-public, defmacro-public, export, re-export): Don't evaluate at
compile-time, I can't see how that helps things. Allow `export' and
`re-export' at non-toplevel.
* module/ice-9/getopt-long.scm:
* module/ice-9/i18n.scm:
* module/oop/goops.scm:
* module/oop/goops/compile.scm:
* module/oop/goops/dispatch.scm: Switch to use eval-when, not
eval-case.
* module/language/scheme/compile-ghil.scm (eval-when): Replace eval-case
transformer with eval-when transformer. Sooooo much simpler, and it
will get better once we separate expansion from compilation.
* module/language/scheme/expand.scm (quasiquote): Hm, expand quasiquote
properly. Not hygienic. Syncase needed.
(lambda): Handle internal defines with docstrings propertly.
Andy Wingo [Mon, 2 Mar 2009 21:15:27 +0000 (22:15 +0100)]
fixups to expand.scm
* module/language/scheme/expand.scm: Some changes to avoid unnecessary
begins or empty lets, and properly handle internal defines (finally).
Andy Wingo [Mon, 2 Mar 2009 16:27:45 +0000 (17:27 +0100)]
add separate expansion phase, to detwingle things a bit
* module/language/scheme/expand.scm: New module, implements a separate
expansion phase, not interleaved with compilation.
* module/language/scheme/amatch.scm: Helper for expand.scm, it's pmatch
with support for annotated source.
* module/ice-9/Makefile.am (SOURCES): Add annotate.scm to build list --
early on because it will be used in the compiler.
* module/ice-9/annotate.scm: Fix the printer, default to unstripped
(whatever that is), and add a deannotator.
* module/system/base/compile.scm (call-with-compile-error-catch): Fix for
new representation of source locations.
* module/Makefile.am (SCHEME_LANG_SOURCES): Add amatch and expand.
Andy Wingo [Mon, 2 Mar 2009 14:46:17 +0000 (15:46 +0100)]
fix printer in struct docs
* doc/ref/api-compound.texi (Vtables): Fix example printer.
Andy Wingo [Mon, 2 Mar 2009 10:23:03 +0000 (11:23 +0100)]
add annotation module
* module/ice-9/annotate.scm: Add annotation module, for source location
tracking with syncase, and for internal use in the compiler.
Ludovic Courtès [Tue, 17 Feb 2009 22:29:44 +0000 (23:29 +0100)]
Mark `scm_gsubr_apply ()' as internal.
* libguile/gsubr.h (scm_gsubr_apply): Renamed to...
(scm_i_gsubr_apply): this. Marked as `SCM_INTERNAL'. Callers
updated.
Ludovic Courtès [Sun, 15 Feb 2009 23:24:00 +0000 (00:24 +0100)]
Remove "compiled closures" ("cclos") in favor of a simpler mechanism.
The idea is to introduce `gsubrs' whose arity is encoded in their type
(more precisely in the sizeof (void *) - 8 MSBs). This removes the
indirection introduced by cclos and simplifies the code.
* libguile/__scm.h (CCLO): Remove.
* libguile/debug.c (scm_procedure_source, scm_procedure_environment):
Remove references to `scm_tc7_cclo'.
* libguile/eval.c (scm_trampoline_0, scm_trampoline_1,
scm_trampoline_2): Replace `scm_tc7_cclo' with `scm_tc7_gsubr'.
* libguile/eval.i.c (CEVAL): Likewise. No longer make PROC the first
argument. Directly invoke `scm_gsubr_apply ()' instead of jump to the
`evap(N+1)' label or call to `SCM_APPLY ()'.
* libguile/evalext.c (scm_self_evaluating_p): Remove reference to
`scm_tc7_cclo'.
* libguile/gc-card.c (scm_i_sweep_card, scm_i_tag_name): Likewise.
* libguile/gc-mark.c (scm_gc_mark_dependencies): Likewise.
* libguile/goops.c (scm_class_of): Likewise.
* libguile/print.c (iprin1): Likewise.
* libguile/gsubr.c (create_gsubr): Use `unsigned int's for REQ, OPT and
RST. Use `scm_tc7_gsubr' instead of `scm_makcclo ()' in the default
case.
(scm_gsubr_apply): Remove calls to `SCM_GSUBR_PROC ()'.
(scm_f_gsubr_apply): Remove.
* libguile/gsubr.h (SCM_GSUBR_TYPE): New definition.
(SCM_GSUBR_MAX): Changed to 33.
(SCM_SET_GSUBR_TYPE, SCM_GSUBR_PROC, SCM_SET_GSUBR_PROC,
scm_f_gsubr_apply): Remove.
* libguile/procprop.c (scm_i_procedure_arity): Remove reference to
`scm_tc7_cclo'; add proper handling of `scm_tc7_gsubr'.
* libguile/procs.c (scm_makcclo, scm_make_cclo): Remove.
(scm_procedure_p): Remove reference to `scm_tc7_cclo'.
(scm_thunk_p): Likewise, plus add proper `scm_tc7_gsubr' handling.
* libguile/procs.h (SCM_CCLO_LENGTH, SCM_MAKE_CCLO_TAG,
SCM_SET_CCLO_LENGTH, SCM_CCLO_BASE, SCM_SET_CCLO_BASE, SCM_CCLO_REF,
SCM_CCLO_SET, SCM_CCLO_SUBR, SCM_SET_CCLO_SUBR, scm_makcclo,
scm_make_cclo): Remove.
* libguile/stacks.c (read_frames): Remove reference to `scm_f_gsubr_apply'.
* libguile/tags.h (scm_tc7_cclo): Remove.
(scm_tc7_gsubr): New.
(scm_tcs_subrs): Add `scm_tc7_gsubr'.
Ludovic Courtès [Mon, 16 Feb 2009 00:00:49 +0000 (01:00 +0100)]
Change `scm_gsubr_apply ()' to take the gsubr as its first argument.
* libguile/gsubr.c (scm_gsubr_apply): Make SELF the first argument
instead of the first element of ARGS.
* libguile/gsubr.h: Update.
* libguile/eval.i.c (CEVAL): Update.
Ludovic Courtès [Sun, 1 Mar 2009 23:18:34 +0000 (00:18 +0100)]
Add subr invocation benchmark.
* benchmark-suite/Makefile.am (SCM_BENCHMARKS): Add `subr.bm'.
Andy Wingo [Fri, 27 Feb 2009 15:25:32 +0000 (16:25 +0100)]
make the ES compiler more readable via use of ->
* module/language/ecmascript/compile-ghil.scm: Use -> to make the ES
compiler more readable. Fix bugs in do, while, and for, whereby we were
missing ->boolean calls.
Andy Wingo [Fri, 27 Feb 2009 14:17:01 +0000 (15:17 +0100)]
use -> macro in scheme->ghil compiler
* module/language/scheme/compile-ghil.scm (->): New macro, makes GHIL
generation a bit more palatable. Use it in all the transformers.
Andy Wingo [Fri, 27 Feb 2009 12:37:35 +0000 (13:37 +0100)]
slight optimization in transform-record, note in optimize*
* module/language/ghil/compile-glil.scm (optimize*): Add a note.
* module/system/base/syntax.scm (transform-record): Access the common
slots once at the beginning. Cuts down on the number of toplevel refs
needed by the generated code.
Andy Wingo [Fri, 27 Feb 2009 12:24:38 +0000 (13:24 +0100)]
introduce -> binding inside transform-record body expressions
* module/system/base/syntax.scm (transform-record): Introduce a ->
binding inside the body, that produces records of the same type.
* module/language/ghil/compile-glil.scm (optimize*): Remove our ->ghil
definition, as transform-record introduces a -> binding for us. Nice.
Andy Wingo [Fri, 27 Feb 2009 11:36:58 +0000 (12:36 +0100)]
first stabs as s-expression-driven transformation of GHIL
* module/language/ghil/compile-glil.scm (optimize*): Rewritten optimizer
-- not yet in use, but it's closer to the code that I'd like to write.
* module/system/base/syntax.scm (transform-record): New crazy macro,
makes GHIL a little less painful to work with.
Andy Wingo [Fri, 27 Feb 2009 09:56:15 +0000 (10:56 +0100)]
common slot accessors are procedures-with-setters
* module/system/base/syntax.scm (define-type): Common slot accessors are
also procedures-with-setters.
Andy Wingo [Fri, 27 Feb 2009 09:53:00 +0000 (10:53 +0100)]
use common slots mechanism in ghil
* module/system/base/syntax.scm (define-type): Fix getter for common
slot.
* module/language/ghil.scm (<ghil>): Use the common slots mechanism.
Andy Wingo [Fri, 27 Feb 2009 09:44:47 +0000 (10:44 +0100)]
define-type has #:common-slots
* module/system/base/syntax.scm (define-type): Accept a #:common-slots
argument, defining slots that are in all instances of this type.
Andy Wingo [Tue, 24 Feb 2009 23:21:03 +0000 (00:21 +0100)]
fix variable not initialized spurious warnings
* libguile/vm-i-system.c: Work around some spurious "variable not
initialized" messages on Etch's gcc.
Andy Wingo [Tue, 24 Feb 2009 23:16:26 +0000 (00:16 +0100)]
don't crash etch's gcc
* libguile/vm-engine.h: Don't allocate registers in registers if we're on
Etch's GCC.
Andy Wingo [Tue, 24 Feb 2009 23:06:58 +0000 (00:06 +0100)]
export procedure-arguments from ice-9 session
* module/system/vm/program.scm (program-arguments): New function, used by
procedure-arguments.
* module/ice-9/session.scm (procedure-arguments): New exported function,
returns an alist describing the given procedure.
Ludovic Courtès [Tue, 24 Feb 2009 22:52:57 +0000 (23:52 +0100)]
Aggregate makefiles for `module/system' and `module/language'.
* am/guilec (.scm.go): Create the target's directory, in case
$(builddir) != $(srcdir).
* configure.in: Don't output any makefile under `module/system' or
`module/language'.
* module/Makefile.am (SUBDIRS): Remove `language' and `system'. Add `.'
to the front.
(modpath, SOURCES, SCHEME_LANG_SOURCES, ECMASCRIPT_LANG_SOURCES,
GHIL_LANG_SOURCES, GLIL_LANG_SOURCES, ASSEMBLY_LANG_SOURCES,
BYTECODE_LANG_SOURCES, OBJCODE_LANG_SOURCES, VALUE_LANG_SOURCES): New
variables, taken from former `Makefile.am' files in sub-directories.
Andy Wingo [Tue, 24 Feb 2009 22:34:26 +0000 (23:34 +0100)]
unbork the repl
* module/system/repl/repl.scm (meta-reader): Whoops, unbork the repl.
Andy Wingo [Tue, 24 Feb 2009 22:16:58 +0000 (23:16 +0100)]
in meta-reader, return directly if the peeked char is EOF
* module/system/repl/repl.scm (meta-reader): If the (next-char #t)
returns EOF, return that EOF directly, as it seems that with guile -q,
the subsequent `read' actually waits for another C-d. Dunno why.
Andy Wingo [Tue, 24 Feb 2009 22:02:33 +0000 (23:02 +0100)]
use umask when making permissions on .go files
* module/system/base/compile.scm (call-with-output-file/atomic): Temp
files get created 0600. After we're done writing, chmod them to
something in line with the user's umask.
Andy Wingo [Tue, 24 Feb 2009 21:32:50 +0000 (22:32 +0100)]
use nobase in am/guilec
* am/guilec (nobase_mod_DATA): Use nobase_mod_DATA so we install to the
correct dir for foo/bar.scm.
Andy Wingo [Sun, 22 Feb 2009 16:37:59 +0000 (17:37 +0100)]
parse division vs regexps properly
* module/language/ecmascript/tokenize.scm (make-tokenizer/1): Whoops, fix
the cases in which we detect that division is valid.
Andy Wingo [Sun, 22 Feb 2009 15:01:11 +0000 (16:01 +0100)]
compile for-in
* module/language/ecmascript/base.scm (prop-keys): New method, returns
the list of keys of props of this instance.
* module/language/ecmascript/impl.scm: Refactor the global object into a
special kind of module object. Provide a prop-keys implementation for
module objects.
* module/language/ecmascript/compile-ghil.scm (comp): Compile for-in.
* module/language/ecmascript/impl.scm: Reshuffly things, and implement
make-enumerator, a helper for use in for-in statements.
* module/language/ecmascript/parse.scm (parse-ecmascript): Fix parsing of
for (var foo in bar) {}...
Andy Wingo [Sun, 22 Feb 2009 11:07:09 +0000 (12:07 +0100)]
fix "for" compilation
* module/language/ecmascript/compile-ghil.scm (comp): Whoops, fix `for'
compilation.
Andy Wingo [Sun, 22 Feb 2009 10:55:20 +0000 (11:55 +0100)]
add scheme integration to js via `require'
* module/language/ecmascript/impl.scm: Add <js-module-object>, that wraps
a module. Add js-require, a javascript-happy function that returns an
object that wraps a Guile module. Bind it to `require' in the default
environment.
Andy Wingo [Sun, 22 Feb 2009 10:37:55 +0000 (11:37 +0100)]
ecmascript tokens have source info
* module/language/ecmascript/tokenize.scm: Attach source information to
tokens. We have to enhance the lalr parser to actually let this
information propagate through, though...
Andy Wingo [Sun, 22 Feb 2009 10:20:15 +0000 (11:20 +0100)]
throw SyntaxError on bad syntax
* module/language/ecmascript/parse.scm (syntax-error):
* module/language/ecmascript/tokenize.scm (syntax-error): Throw an error
on bad syntax.
Andy Wingo [Sun, 22 Feb 2009 10:06:13 +0000 (11:06 +0100)]
more arithmetic on non-numbers
* module/language/ecmascript/compile-ghil.scm (comp): Convert to number
on unary +.
* module/language/ecmascript/impl.scm: Define -, *, /, <, <=, >=, >
operations on non-numbers.
Andy Wingo [Sun, 22 Feb 2009 09:51:49 +0000 (10:51 +0100)]
+ for strings, global js object, new Foo() works
* module/language/ecmascript/array.scm (*array-prototype*): Declare the
constructor.
* module/language/ecmascript/base.scm (pput, pdel): Remove some needless
checks.
(new): Move definition of new here, and use the constructor.
* module/language/ecmascript/compile-ghil.scm (compile-ghil): Add a stub
so that when we load a compiled JS program, we make sure the runtime
has been booted.
* module/language/ecmascript/function.scm (js-constructor): Export a
js-constructor method instead of a new method.
* module/language/ecmascript/impl.scm (<js-global-object>): Define a new
class for the global "this" object, wrapping bindings from the current
module.
(init-js-bindings!): Define the dozen or so global properties, in the
current module.
(+): Define addition operations for non-numbers. This is efficient
because the generics are only dispatched if the fast-path fails.
Andy Wingo [Sat, 21 Feb 2009 19:07:57 +0000 (20:07 +0100)]
compile ecmascript's parser. yay! instant load-time!
* module/language/ghil/compile-glil.scm (codegen): If there are more than
255 arguments, make a list and use apply instead of calling directly.
* module/language/Makefile.am: Now we can compile parse.scm. Yay!
* module/language/scheme/compile-ghil.scm: Add a note.
* module/language/ecmascript/compile-ghil.scm: Add a note.
Andy Wingo [Sat, 21 Feb 2009 18:25:35 +0000 (19:25 +0100)]
be smarter about allocating local variables, reusing slots if possible
* module/language/Makefile.am: OK, we can compile compile-ghil.scm now,
thankfully.
* module/language/ecmascript/compile-ghil.scm (ormatch): New macro, a
wrapper around pmatch to avoid some of the more egregious
non-tail recursiveness.
(comp): Use ormatch.
* module/language/ghil.scm (unparse-ghil): The body of bind and mv-bind
is a single expression, not a list of expressions.
* module/language/ghil/compile-glil.scm (codegen): Be more clever when
allocating "local" variables -- if a variable goes out of scope, its
index can be re-used later.
* module/language/glil.scm (parse-glil, unparse-ghil): The "rest" of a
mv-bind is a flag, not a list. The "ra" of an mv-call is a label, not a
GLIL expression.
* module/language/objcode/spec.scm (collapse-locals, decompile-value):
When decompiling a value, process the bindings list differently.
Comments in the code.
* module/language/scheme/compile-ghil.scm (define-scheme-translator): Fix
the generated error procedure.
(let): Re-indent.
(letrec): Re-indent.
* module/system/base/syntax.scm (record-case): If the body of a clause is
null, fill it with the unspecified value.
Andy Wingo [Sat, 21 Feb 2009 13:04:53 +0000 (14:04 +0100)]
implement break and continue, work around overly recursive pmatch expansion
* libguile/vm-i-system.c (goto/args): On a tail call to a different
procedure, init the locals to valid scheme values. Shouldn't matter for
well-compiled scheme, but inspecting uninitialized locals could give
garbage, or badly-compiled code could cause a crash.
* module/language/Makefile.am (NOCOMP_SOURCES): For the moment, don't
compile compile-ghil.scm. I need to fix this.
* module/language/ecmascript/compile-ghil.scm (load-toplevel): Sigh, and
disable stack checking in the evaluator too. Grr.
(comp): Implement (unnamed) break and continue.
* module/language/ecmascript/parse.scm (parse-ecmascript): Fix var
statements in `for' -- though it still doesn't work.
Ludovic Courtès [Fri, 20 Feb 2009 23:47:59 +0000 (00:47 +0100)]
Fix `.go' compilation for $(builddir) != $(srcdir).
* am/guilec (.scm.go): Use "-o $@" to make sure the output file ends up
in $(builddir).
Ludovic Courtès [Fri, 20 Feb 2009 23:36:29 +0000 (00:36 +0100)]
Add `-o'/`--output' option to "guile-tools compile".
* module/system/base/compile.scm (compile-file): Add optional
OUTPUT-FILE argument.
* scripts/compile (fail): New procedure.
(%options): Add `-o'/`--output' option.
(compile): Handle `-o'.
Andy Wingo [Fri, 20 Feb 2009 23:31:43 +0000 (00:31 +0100)]
implement do, while, for
* module/language/ecmascript/compile-ghil.scm (comp): Use ghil-bind when
making temp vars, so that disassembly understands things. Implement do,
while, and for.
* module/language/ecmascript/parse.scm (parse-ecmascript): Some tweaks.
* module/language/ecmascript/impl.scm (language): Export ->boolean.
Andy Wingo [Fri, 20 Feb 2009 17:16:34 +0000 (18:16 +0100)]
implement more operations
* module/language/ecmascript/base.scm: Implement some more robust
property getters that convert strings to symbols. Implement
has-property?.
* module/language/ecmascript/compile-ghil.scm (comp): Implement lots more
mathematical operators. We now do all expressions; on to statements.
* module/language/ecmascript/impl.scm: Define some math helpers. They
probably need to call ->number on some things.
* module/language/ecmascript/parse.scm (parse-ecmascript): Fix a typo.
Andy Wingo [Fri, 20 Feb 2009 16:08:20 +0000 (17:08 +0100)]
clean up ++ and -- a little bit
* module/language/ecmascript/compile-ghil.scm (comp): Define let1 and
begin1 helpers. Use them in pre- and post- increment and decrement.
Andy Wingo [Fri, 20 Feb 2009 15:15:50 +0000 (16:15 +0100)]
implement ++, --, new, delete, void, typeof
* module/language/ecmascript/compile-ghil.scm (@impl): Implement with
@implv.
(comp): Implement ++ and -- (pre- and post-). Quite a pain. I'll be
looking for ways to simplify this notation. Also implement new, delete,
and void.
* module/language/ecmascript/impl.scm: Implement typeof.
Andy Wingo [Fri, 20 Feb 2009 12:21:09 +0000 (13:21 +0100)]
handle "this" in ecmascript
* module/language/ecmascript/base.scm:
* module/language/ecmascript/compile-ghil.scm:
* module/language/ecmascript/impl.scm:
* module/language/ecmascript/parse.scm: Compile "method calls" in such a
way that "this" gets propagated correctly.
Andy Wingo [Fri, 20 Feb 2009 11:50:15 +0000 (12:50 +0100)]
implement more of the standard runtime
* module/language/Makefile.am:
* module/language/ecmascript/impl.scm:
* module/language/ecmascript/array.scm:
* module/language/ecmascript/base.scm:
* module/language/ecmascript/function.scm: Split out the runtime into
different files. Implement more of the spec's runtime.
Ludovic Courtès [Fri, 20 Feb 2009 16:38:32 +0000 (17:38 +0100)]
Fix interpretation of `(ice-9 getopt-long)'.
* module/ice-9/getopt-long.scm (define-one-option-spec-field-accessor,
define-one-option-spec-field-modifier): Eval-case for `load-toplevel'
as well so that the interpreter can load this module.