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

10521 commits

Author SHA1 Message Date
Andy Wingo
2e7e6969bd allow multiple modules in one compilation unit
* module/system/il/ghil.scm (<ghil-env>, <ghil-toplevel-env>): Refactor
  so that all environments point (eventually) at one toplevel
  environment. Instead of having potentially multiple toplevel
  environments, each noting the module against which its bindings are
  resolved, have each binding in the toplevel record what module it
  should be resolved in. Should fix compilation units that define
  multiple modules.
  (ghil-lookup, ghil-define): Reworked to not be destructive. Module
  variables now have the module name as their "env", and are keyed as
  `(MODNAME . SYM)' in the var table.
  (call-with-ghil-environment): Reindented.

* module/system/il/inline.scm (try-inline-with-env): Adapt to
  env/toplevel changes.

* module/system/vm/assemble.scm (dump-object!): A vlink-later now holds
  the module name, not the module itself.

* module/system/il/compile.scm (make-glil-var): The "env" of a "module"
  var is now the module name, not the module.

* module/language/scheme/translate.scm (primitive-syntax-table): Update
  the way we test for toplevel environments. Reindent the lambda
  translator.
  (lookup-transformer, trans): lookup-transformer now has 2 args, not 3.
  (translate): Update the way we make toplevel environments.
2008-09-07 22:27:08 +02:00
Andy Wingo
b5c46470a5 improve backtraces
* module/system/vm/frame.scm (frame-call-representation): Show more of
  lists.
  (program-name): Avoid a traceback if (frame-address link) is #f. Not
  sure when this can happen, but it does, and since this is already in
  the backtrace function, there be badness there.
2008-09-07 22:15:25 +02:00
Andy Wingo
ee79dfab3d update .gitignore files
* .gitignore:
* libguile/.gitignore: Update
2008-09-07 22:14:18 +02:00
Andy Wingo
97f1153a86 superstition with no important effect
* module/system/vm/assemble.scm (dump-object!): Some superstition, use
  bit arithmetic instead of int arithmetic. Makes me happier.
2008-09-02 11:00:32 -07:00
Andy Wingo
22f4ee4882 make primitive-load-path load compiled files if available
* libguile/load.h: Update scm_search_path prototype.

* libguile/load.c: Include vm.h for load-compiled/vm. Not sure if this is
  bad wrt modularity.
  (scm_c_string_has_an_ext): New private helper.
  (scm_search_path): Add an extra optional arg, `require_exts'; if true,
  require that the returned file name have one of the given extensions.
  Changes the C API, but not the scheme API.
  (scm_sys_search_load_path): Adapt to scm_search_path API change.
  (primitive-load-path): Here is the craziness: load a compiled file if
  found and newer than the corresponding (or not) source file.
  (scm_init_load): Define %load-compiled-extensions as the list of
  extensions denoting compiled files; defaults to '(".go").
2008-09-02 11:00:32 -07:00
Andy Wingo
90b0be2028 move up some initializations in the vm
* libguile/vm.c: Move 'vm-run, 'vm-error, 'debug sym initialization up to
  the bootstrap phase, so they are ready if load-compiled/vm is called
  before (system vm vm) is loaded.
2008-09-02 11:00:32 -07:00
Andy Wingo
27af6bc2b3 turn define-option-interface into a defmacro
* ice-9/boot-9.scm (define-option-interface): Turn into a defmacro
  instead of an mmacro.
2008-09-02 11:00:31 -07:00
Andy Wingo
373d251b4d disable start-stack in compiled code
* module/language/scheme/translate.scm (primitive-syntax-table): Disable
  semantics of start-stack in compiled code. I think start-stack
  semantics aren't bad, but they don't have vm-based implementations at
  this point.
2008-09-02 11:00:27 -07:00
Andy Wingo
060cce72db remove the-environment, the-root-environment, environment-module
* ice-9/boot-9.scm (the-environment, the-root-environment)
  (environment-module): Remove these representation of the interpreter's
  idea of the environment, because they are not valid in the compiled
  case, and are not part of the scheme spec anyway.
2008-09-02 10:30:39 -07:00
Andy Wingo
3bf2760867 avoid local-eval in record constructors and accessors
* ice-9/boot-9.scm (record-constructor, record-accessor)
  (record-modifier): Avoid local-eval when possible, because it uses the
  interpreter's representation of environments; and when we need to eval,
  use primitive-eval instead. Slight semantic change in that this
  evaluates relative to the current module rather than the root module,
  but not really a biggie. Should make this compilable in the future,
  somehow.
2008-09-02 10:30:39 -07:00
Andy Wingo
1b68d041a5 nits picked on boot-9.scm
* ice-9/boot-9.scm (defmacro): Indentation fix.
  (begin-deprecated): Don't cons in the `begin' macro itself, only the
  symbol `begin'.
2008-09-02 10:30:39 -07:00
Andy Wingo
115b9ee8ab enter into the (guile) module when compiling boot-9.scm
* ice-9/boot-9.scm: Before doing very much, put us into the (guile)
  module when compiling. This avoids some circularity in the module boot
  process, whereby symbols are seen to resolve to the (guile-user)
  module, whereas in fact they originally pertain to the (guile) module.
2008-09-02 10:30:39 -07:00
Andy Wingo
c09346521e Fix compilation #ifndef STACK_CHECKING.
* libguile/debug.c (scm_debug_options): Fix compilation #ifndef
  STACK_CHECKING.
2008-09-02 10:30:39 -07:00
Andy Wingo
049af8259b fix Makefile.am in module/language
* module/language/Makefile.am: Actually recurse into scheme/.
2008-09-02 10:30:39 -07:00
Andy Wingo
5c4926209f ditch the 8-bit compiled form of program parameters
* libguile/vm-i-loader.c (load-program):
* module/system/vm/assemble.scm (dump-object!): There are cases in which
  we use the 16-bit representation for program params (nargs, nexts,
  etc), but the actual 16-bit number actually fits into 8 bits -- which
  is then misinterpreted by the loader as the 8-bit form. So ditch the
  8-bit form entirely (it was never much of an optimization), and just
  use the 16-bit form. Make sure to clear out all your .go files before
  recompiling this one!
2008-09-02 10:30:39 -07:00
Andy Wingo
7950b4cffb fix a bug loading functions with 8 or more arguments
* libguile/vm-i-loader.c: A combination of superstition and a bugfix:
  make sure that we treat bits as being of a type as wide as we think it
  is, and, more importantly, allow for programs with 8 <= nargs < 16.
2008-09-02 10:30:39 -07:00
Andy Wingo
124c52d8bb fix nested quasiquotes (yeepers)
* module/language/scheme/translate.scm (primitive-syntax-table)
  (trans-quasiquote): Fix handling of nested quasiquotes.

* testsuite/Makefile.am (vm_test_files):
* testsuite/t-quasiquote.scm: Add a quasiquote test case.
2008-09-02 10:30:39 -07:00
Andy Wingo
e0b20b68b0 shamefully disable some more gc asserts
* libguile/gc-freelist.c: Disable some more asserts. I have no idea why
  they're hitting, however.
2008-08-27 17:19:41 -07:00
Andy Wingo
72f7452826 move guilec and guile-disasm to be guile-tools scripts
* .gitignore: Some touchups.

* configure.in:
* src/.cvsignore:
* src/Makefile.am:
* Makefile.am: No more src/.

* scripts/compile:
* scripts/disassemble: Moved here from src/ and changed into guile-tools
  scripts.

* scripts/Makefile.am: Add the new scriptes.

* guilec.mk: Adapt to new way of invoking the compiler.
2008-08-27 17:17:30 -07:00
Andy Wingo
89c95c460b fix guile-disasm
* src/guile-disasm.in: Adapt to the split-up of (system vm core).
  Detabify.

Patch by C. K. Jester-Young <cky944 <at> gmail.com>.
2008-08-26 13:55:05 -07:00
Andy Wingo
515bc96855 m4 quoting foo in labels-as-values.m4.
* m4/labels-as-values.m4: More m4 quoting love.

Patch from C. K. Jester-Young <cky944 <at> gmail.com>.
2008-08-26 13:52:20 -07:00
Andy Wingo
1976ad74b8 fix casting-pointers-to-ints bug
* libguile/vm.c: Cast pointers to intptr_t, not int.

Patch from C. K. Jester-Young <cky944 <at> gmail.com>.
2008-08-26 13:48:19 -07:00
Andy Wingo
b264227691 fetch an inum's bits into a scm_bits_t, not an int
* libguile/vm-i-scheme.c (FUNC1): Remove, cause it's not used.
  (FUNC2): Don't assume an inum can fit into an int, use scm_bits_t
  instead. In reality though we should probably do use different checks,
  i.e. for multiplication probably we overflow. (That would be a bug.)

Based on a patch by C. K. Jester-Young <cky944 <at> gmail.com>.
2008-08-26 13:48:12 -07:00
Andy Wingo
bc73abc5ff suppress autoconf warning
* guile-tools.in: Suppress ``WARNING: $ac_file_inputs seems to ignore the
  --datarootdir setting'' message.

Patch from C. K. Jester-Young <cky944 <at> gmail.com>
2008-08-26 13:33:55 -07:00
Andy Wingo
05ddc073c3 disable gc statistics asserts
* libguile/gc.c: Disable the statistics asserts; see
  http://thread.gmane.org/gmane.lisp.guile.devel/7505
2008-08-26 13:29:55 -07:00
Andy Wingo
fdc0a82263 merge from guile master
Had to fix up .gitignore for some conflicts.
2008-08-26 12:51:19 -07:00
Andy Wingo
ce66d60be2 start compiling ice-9
* ice-9/Makefile.am: Integrate with guilec.mk, and start compiling
  sources. Have to figure out what to do with procedure->memoized-macro
  though, to get boot-9.scm compiling.
2008-08-26 12:40:25 -07:00
Ludovic Courtès
582a4997ab Use $(GCC_CFLAGS) for `-Werror' et al. so that it's not used to compile
Gnulib code.
2008-08-25 22:11:53 +02:00
Andy Wingo
75a09d5ae6 module compilation fixen, post-integration
Thanks to Dale Smith.

* guilec.mk: Rework to expect the includer to define $(modpath), then
  make $(moddir) from that.

* module/language/Makefile.am:
* module/language/scheme/Makefile.am:
* module/system/base/Makefile.am:
* module/system/il/Makefile.am:
* module/system/repl/Makefile.am:
* module/system/vm/Makefile.am: Define modpath instead.

* src/guilec.in: Don't import (system vm bootstrap), it is no more.
2008-08-25 13:05:16 -07:00
Han-Wen Nienhuys
4b7513463d Fix 2 indentation nitpicks. 2008-08-21 23:21:57 -03:00
Han-Wen Nienhuys
1f5844000e Style nitpicks: space before () in function call. 2008-08-21 23:16:20 -03:00
Andy Wingo
83495480e8 merge guile-vm into libguile itself
* ice-9/boot-9.scm: Only define load-compiled as #f if it's not already
  defined, which won't normally be the case.

* libguile/guile-vm.c: Removed, there's no more guile-vm binary.

* libguile/frames.c: (with change frame? -> heap-frame?)
* libguile/frames.h:
* libguile/instructions.c:
* libguile/instructions.h:
* libguile/objcodes.c:
* libguile/objcodes.h:
* libguile/programs.c:
* libguile/programs.h:
* libguile/vm-bootstrap.h: (was bootstrap.h)
* libguile/vm-engine.c: (was vm_engine.c)
* libguile/vm-engine.h: (was vm_engine.h)
* libguile/vm-expand.h: (was vm_expand.h)
* libguile/vm-i-loader.c: (was vm_loader.c)
* libguile/vm-i-scheme.c: (was vm_scheme.c)
* libguile/vm-i-system.c: (was vm_system.c)
* libguile/vm.c:
* libguile/vm.h: These files moved here from src/, as guile-vm is now a
  part of libguile.

* libguile/init.c: Bootstrap the VM. Yay!

* libguile/Makefile.am: The necessary chicanery here.

* module/system/vm/Makefile.am:
* module/system/vm/bootstrap.scm:
* module/system/vm/frame.scm:
* module/system/vm/instruction.scm:
* module/system/vm/objcode.scm:
* module/system/vm/program.scm:
* module/system/vm/vm.scm:

* pre-inst-guile-env.in: Add builddirs to the load path; add module/ to
  the path in the empty-$GUILE_LOAD_PATH case as well.

* src/Makefile.am: Moved out everything except guilec and guile-disasm,
  which probably should be moved to the scripts directory?

* testsuite/Makefile.am: Update to find guile-vm in the right place.

* module/system/vm/Makefile.am:
* module/system/vm/bootstrap.scm: Removed bootstrap.scm, scm_init_guile
  handles the bootstrapping for us.

* module/system/vm/frame.scm:
* module/system/vm/instruction.scm:
* module/system/vm/objcode.scm:
* module/system/vm/program.scm:
* module/system/vm/vm.scm: Call the init functions in libguile; should
  fix at some point to avoid the dlopen?
2008-08-21 18:39:30 -07:00
Andy Wingo
be52b55a32 make pre-inst-guile use pre-inst-guile-env
* pre-inst-guile-env.in:
* pre-inst-guile.in: Change so that pre-inst-guile uses
  pre-inst-guile-env. Fixed inconsistency regarding $subdirs_with_ltlibs.
2008-08-21 15:11:27 -07:00
Andy Wingo
9106a44eaa chmod -x guilec.in.
* src/guilec.in: Chmod -x.
2008-08-21 14:49:12 -07:00
Ludovic Courtès
103dc4d4d2 Add Gnulib-provided files for convenience.
These come from Gnulib's Git commit
ae3a0d62f26d8156b403e40d6007475006f3136f, dated 2008-08-19.
2008-08-21 22:23:59 +02:00
Andy Wingo
fcd4901bef fix some compilation warnings, in anticipation of moving to libguile/
* src/Makefile.am: Use standard guile CFLAGS, which has -Werror and
  -Wmissing-prototypes.

* src/frames.h:
* src/instructions.h:
* src/objcodes.h:
* src/programs.h:
* src/vm.h:
* src/vm.c: Fix warnings, mostly about prototypes.

* src/vm_system.c: Fix a tricky x-is-not-initialized error. Thanks, GCC!
2008-08-20 14:32:36 -07:00
Andy Wingo
22e95889ff remove unused "envs" code from guile-vm
* src/Makefile.am:
* src/envs.c:
* src/envs.h: Remove the envs code, which was historically used to
  implement modules. But since we use Guile's modules, these aren't
  necessary.

* src/vm.c:
* src/vm_loader.c:
* module/system/vm/assemble.scm: Remove code bits that trafficked in yon
  deprecation.
2008-08-20 14:11:35 -07:00
Ludovic Courtès
417566ebc9 Never define _GNU_SOURCE' explicitly since AC_USE_SYSTEM_EXTENSIONS'
takes care of it.

Conflicts:

	ChangeLog
	configure.in
	libguile/eval.c
	libguile/srfi-14.c
	libguile/threads.c
2008-08-20 19:31:46 +02:00
Ludovic Courtès
82d8d6d9e8 Add test case for the GOOPS `class-redefinition' memory corruption. 2008-08-20 00:44:20 +02:00
Ludovic Courtès
4a1db3a91f Add ChangeLog and NEWS entry for the GOOPS `class-redefinition' memory
corruption fix.
2008-08-19 19:13:39 +02:00
Ludovic Courtès
bb764c0e3c Complete fix of `hell' allocation in GOOPS. 2008-08-19 19:08:29 +02:00
Han-Wen Nienhuys
408bcd99d3 Fix sizeof() nitpick for goops corruption. 2008-08-18 11:19:59 -03:00
Han-Wen Nienhuys
5bfb683e12 Make marked conservatively statistic accumulative. 2008-08-16 15:34:04 -03:00
Han-Wen Nienhuys
676d9cc553 If realloc() fails in scm_realloc, then do a complete GC with complete
sweep directly.
2008-08-16 15:20:55 -03:00
Han-Wen Nienhuys
40945e5e9f Add a statistic for tracking how many cells are marked conservatively.
This allows an informed choice for deciding how many segments to
create.  After startup, ~2% of the cells are scanned conservatively.
2008-08-16 15:03:48 -03:00
Han-Wen Nienhuys
82ae1b8eb3 Garbage collection cleanup.
* New file gc-segment-table.c: hold code for the segment table.

* Remove data that might be out of date; remove
  scm_i_adjust_min_yield().  We don't store min_yields, since they
  are only accurate at one point in time (when the sweep finishes). 
  We decide the min yield at that point from min_yield_fraction and
  freelist->collected / freelist->swept

* Introduce scm_i_gc_heap_size_delta() replacing
  scm_i_gc_grow_heap_p().
  
* Remove foo_1 fields containing penultimate results.

* After GC, count mark bit vector to discover number of live
  objects. This simplifies hairy updates.

* Many formatting and layout cleanups.

* Fix in scm_i_sweep_card(): return the length of free_list returned,
  rather than number of deleted objects.

* For mtrigger GCs: do not also run a full sweep after the gc() call, as
  this is inconsistent with lazy sweeping.

* Remove scm_i_make_initial_segment().

* Use calloc in scm_i_make_empty_heap_segment() to save on
  initialization code.

* New function scm_i_sweep_for_freelist() which sweeps, with proper
  statistic variable updates.

* New segments are conceptually blocks with 100% reclaimable cells.

* Remove some useless constants/comments: SCM_HEAP_SIZE,
  SCM_INIT_HEAP_SIZE, SCM_EXPHEAP, SCM_HEAP_SEG_SIZE

* Do not increment scm_cells_allocated() from the
  scm_[double]cell(). This would be a race condition.

* Move some deprecation checks in separate functions to not distract
  from main code flow.
2008-08-16 13:57:23 -03:00
Han-Wen Nienhuys
b474ac33ee Remove comments about removed variables. 2008-08-16 13:27:17 -03:00
Han-Wen Nienhuys
d09752ffd1 Introduce scm_i_marking to detect when GC mark bits are touched
outside of marking stage.
2008-08-16 13:21:42 -03:00
Han-Wen Nienhuys
e89b7b3625 Remove unused macro UNMARKED_CELL_P() 2008-08-16 13:21:32 -03:00
Han-Wen Nienhuys
569aa529d5 Use word_2 to store mark bits for freeing structs and vtables in the
correct order.

This ensures that we only use GC Marks during the actual GC Mark.
2008-08-16 13:21:21 -03:00