remove unneeded zero_sized/closure_size field

svn: r2187
This commit is contained in:
Matthew Flatt 2006-02-10 15:06:55 +00:00
parent 9a6c225450
commit 692b99e636
5 changed files with 26 additions and 29 deletions

View File

@ -75,7 +75,8 @@
easily-evaluated expressions, such as constrants and variable
lookups. This can be viewed as a kind of half-way A-normalization.
Bytecodes are not linear, but actually trees of expression nodes.
Bytecodes are not linear. They're actually trees of expression
nodes.
Compilation:
@ -93,6 +94,12 @@
are sometimes called the "prefix", and scheme_push_prefix()
initializes the prefix portion of the stack.
Just-in-time compilation:
If the JIT is enabled, then `eval' processes a compiled expression
one more time (functionally): `lambda' and `case-lambda' forms are
converted to native-code generators, instead of bytecode variants.
*/
#include "schpriv.h"

View File

@ -639,12 +639,6 @@ scheme_make_closure(Scheme_Thread *p, Scheme_Object *code, int close)
closure->so.type = scheme_closure_type;
SCHEME_COMPILED_CLOS_CODE(closure) = data;
#ifdef MZ_PRECISE_GC
closure->closure_size = i; /* needed for getting the object's size in bytes */
#else
closure->zero_sized = !i; /* info used for reporting certain arity errors */
#endif
if (!close || !i)
return (Scheme_Object *)closure;
@ -2120,6 +2114,9 @@ const char *scheme_get_proc_name(Scheme_Object *p, int *len, int for_error)
return NULL;
}
if (SCHEME_VECTORP(n))
n = SCHEME_VEC_ELS(n)[0];
if (for_error < 0) {
s = (char *)n;
*len = -1;

View File

@ -782,36 +782,41 @@ int closed_prim_proc_FIXUP(void *p) {
int scm_closure_SIZE(void *p) {
Scheme_Closure *c = (Scheme_Closure *)p;
int closure_size = ((Scheme_Closure_Data *)GC_resolve(c->code))->closure_size;
return
gcBYTES_TO_WORDS((sizeof(Scheme_Closure)
+ (c->closure_size - 1) * sizeof(Scheme_Object *)));
+ (closure_size - 1) * sizeof(Scheme_Object *)));
}
int scm_closure_MARK(void *p) {
Scheme_Closure *c = (Scheme_Closure *)p;
int closure_size = ((Scheme_Closure_Data *)GC_resolve(c->code))->closure_size;
int i = c->closure_size;
int i = closure_size;
while (i--)
gcMARK(c->vals[i]);
gcMARK(c->code);
return
gcBYTES_TO_WORDS((sizeof(Scheme_Closure)
+ (c->closure_size - 1) * sizeof(Scheme_Object *)));
+ (closure_size - 1) * sizeof(Scheme_Object *)));
}
int scm_closure_FIXUP(void *p) {
Scheme_Closure *c = (Scheme_Closure *)p;
int closure_size = ((Scheme_Closure_Data *)GC_resolve(c->code))->closure_size;
int i = c->closure_size;
int i = closure_size;
while (i--)
gcFIXUP(c->vals[i]);
gcFIXUP(c->code);
return
gcBYTES_TO_WORDS((sizeof(Scheme_Closure)
+ (c->closure_size - 1) * sizeof(Scheme_Object *)));
+ (closure_size - 1) * sizeof(Scheme_Object *)));
}
#define scm_closure_IS_ATOMIC 0

View File

@ -293,16 +293,18 @@ closed_prim_proc {
scm_closure {
Scheme_Closure *c = (Scheme_Closure *)p;
int closure_size = ((Scheme_Closure_Data *)GC_resolve(c->code))->closure_size;
mark:
int i = c->closure_size;
int i = closure_size;
while (i--)
gcMARK(c->vals[i]);
gcMARK(c->code);
size:
gcBYTES_TO_WORDS((sizeof(Scheme_Closure)
+ (c->closure_size - 1) * sizeof(Scheme_Object *)));
+ (closure_size - 1) * sizeof(Scheme_Object *)));
}
case_closure {

View File

@ -1542,11 +1542,6 @@ int scheme_has_method_property(Scheme_Object *code);
typedef struct {
Scheme_Object so;
#ifdef MZ_PRECISE_GC
int closure_size;
#else
short zero_sized;
#endif
Scheme_Closure_Data *code;
Scheme_Object *vals[1];
} Scheme_Closure;
@ -1554,11 +1549,7 @@ typedef struct {
#define SCHEME_COMPILED_CLOS_CODE(c) ((Scheme_Closure *)c)->code
#define SCHEME_COMPILED_CLOS_ENV(c) ((Scheme_Closure *)c)->vals
#ifdef MZ_PRECISE_GC
# define ZERO_SIZED_CLOSUREP(closure) !(closure->closure_size)
#else
# define ZERO_SIZED_CLOSUREP(closure) closure->zero_sized
#endif
#define ZERO_SIZED_CLOSUREP(closure) !(closure->code->closure_size)
typedef struct Scheme_Native_Closure_Data {
MZTAG_IF_REQUIRED
@ -1580,11 +1571,6 @@ typedef struct Scheme_Native_Closure_Data {
typedef struct {
Scheme_Object so;
#ifdef MZ_PRECISE_GC
int closure_size;
#else
short zero_sized;
#endif
Scheme_Native_Closure_Data *code;
Scheme_Object *vals[1];
} Scheme_Native_Closure;