diff options
author | Andy Wingo <wingo@pobox.com> | 2008-09-28 23:08:14 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2008-09-28 23:08:14 +0200 |
commit | 877ffa3f9c8b1d58aedff2821ee1811c6f3c3622 (patch) | |
tree | a454936f1370ac062f549ba7920be03ed90607bc /libguile/programs.c | |
parent | cda52b2fdae8dc6e6f9cb630112c1d43419145c6 (diff) | |
download | guile-877ffa3f9c8b1d58aedff2821ee1811c6f3c3622.tar.gz |
revert part of 7ff017002ddc980 that caused missed references
* libguile/programs.c (scm_c_make_closure): If the program is actually
not a program, abort. This can happen if GC misses a reference, as
currently seems to happen.
* libguile/vm.c (vm_mark): Revert part of
7ff017002ddc980f684120653549a10c6c7cde5c, which changed the call to
scm_mark_locations. I'm 99% *sure* this is wrong, but it seems to
prevent missed references when recompiling the .go files in guile
itself. Needs revisiting soon, but for the time being we can go back to
where we were a couple of days ago.
* libguile/vm-i-system.c (halt, vector, vector-mark): Sync the registers
before calling into C, as it may GC.
Diffstat (limited to 'libguile/programs.c')
-rw-r--r-- | libguile/programs.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/libguile/programs.c b/libguile/programs.c index 666b94fbf..122c1b776 100644 --- a/libguile/programs.c +++ b/libguile/programs.c @@ -90,6 +90,8 @@ SCM scm_c_make_closure (SCM program, SCM external) { SCM prog = scm_c_make_program (0, 0, program); + if (!SCM_PROGRAM_P (program)) + abort (); *SCM_PROGRAM_DATA (prog) = *SCM_PROGRAM_DATA (program); SCM_PROGRAM_DATA (prog)->external = external; return prog; |