fix bug in compilation of `and' and `or'; more robust underflow detection.
authorAndy Wingo <wingo@pobox.com>
Mon, 11 Aug 2008 16:35:58 +0000 (18:35 +0200)
committerAndy Wingo <wingo@pobox.com>
Mon, 11 Aug 2008 16:35:58 +0000 (18:35 +0200)
commit7e4760e4133160e24cc15dba17cdeac3040eb080
tree088db6283f78a51781bcd1ee4570bc7ca852c4d5
parent67c4505e7a1002d8bbb395d3d4d79e77250f737e
fix bug in compilation of `and' and `or'; more robust underflow detection.

* module/system/il/compile.scm (codegen): Rewrite handling of `and' and
  `or' ghil compilation, because it was broken if drop was #t. Tricky
  bug, this one! Took me days to track down!

* module/system/repl/repl.scm: Export call-with-backtrace, which probably
  should go in some other file.

* src/vm.c (scm_vm_save_stack): Handle the fp==0 case for errors before
  we have a frame.

* src/vm_engine.h (NEW_FRAME, FREE_FRAME): Stricter underflow checking,
  raising the stack base to the return address, in an attempt to prevent
  inadvertant stack smashing (the symptom of the and/or miscompilation
  bug).
  (CHECK_IP): A check that the current IP is within the bounds of the
  current program. Not normally compiled in. Perhaps it should be?

* src/vm_system.c (halt): Set vp->ip to NULL. Paranoia, I know.
  (return): Call CHECK_IP(), if such a thing is compiled in.

* testsuite/Makefile.am (vm_test_files):
* testsuite/t-catch.scm:
* testsuite/t-map.scm:
* testsuite/t-or.scm: New tests.
module/system/il/compile.scm
module/system/repl/repl.scm
src/vm.c
src/vm_engine.h
src/vm_system.c
testsuite/Makefile.am
testsuite/t-catch.scm [new file with mode: 0644]
testsuite/t-map.scm [new file with mode: 0644]
testsuite/t-or.scm [new file with mode: 0644]