diff options
author | Daniel Kraft <d@domob.eu> | 2009-08-27 19:26:04 +0200 |
---|---|---|
committer | Daniel Kraft <d@domob.eu> | 2009-08-27 19:26:04 +0200 |
commit | ff810079188b8d04224959d5b54254d3e142d6c3 (patch) | |
tree | a58a203dd1a4f151ee8730c5a8290b0c36c2a04e /libguile/vm-engine.h | |
parent | 9a9f123144c179ef659252d3442117d6b774be7f (diff) | |
parent | fa316af70ff11767d9a8eb971d9e0b888152a15c (diff) | |
download | guile-ff810079188b8d04224959d5b54254d3e142d6c3.tar.gz |
Merge branch 'master' of git://git.savannah.gnu.org/guile into elisp
Diffstat (limited to 'libguile/vm-engine.h')
-rw-r--r-- | libguile/vm-engine.h | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/libguile/vm-engine.h b/libguile/vm-engine.h index c0f772fb8..36d4d2867 100644 --- a/libguile/vm-engine.h +++ b/libguile/vm-engine.h @@ -336,6 +336,7 @@ do { \ #define FETCH() (*ip++) #define FETCH_LENGTH(len) do { len=*ip++; len<<=8; len+=*ip++; len<<=8; len+=*ip++; } while (0) +#define FETCH_WIDTH(width) do { width=*ip++; } while (0) #undef CLOCK #if VM_USE_CLOCK @@ -385,34 +386,29 @@ do { \ /* See frames.h for the layout of stack frames */ /* When this is called, bp points to the new program data, and the arguments are already on the stack */ -#define NEW_FRAME() \ +#define INIT_FRAME() \ { \ int i; \ - SCM *dl, *data; \ - scm_byte_t *ra = ip; \ - \ - /* Save old registers */ \ - ra = ip; \ - dl = fp; \ \ /* New registers */ \ - fp = sp - bp->nargs + 1; \ - data = SCM_FRAME_DATA_ADDRESS (fp); \ - sp = data + 2; \ + sp += bp->nlocs; \ CHECK_OVERFLOW (); \ stack_base = sp; \ ip = bp->base; \ \ /* Init local variables */ \ - for (i=bp->nlocs; i; i--) \ - data[-i] = SCM_UNDEFINED; \ - \ - /* Set frame data */ \ - data[2] = (SCM)ra; \ - data[1] = 0x0; \ - data[0] = (SCM)dl; \ + for (i=bp->nlocs; i;) \ + sp[-(--i)] = SCM_UNDEFINED; \ } +#define DROP_FRAME() \ + { \ + sp -= 3; \ + NULLSTACK (3); \ + CHECK_UNDERFLOW (); \ + } + + /* Local Variables: c-file-style: "gnu" |