internal reorganization of bytecode compiler and other bytecode tasks

--- organize by task instead of (weakly) by bytecode form; source
 files are smaller with fewer global functions and datatypes
This commit is contained in:
Matthew Flatt 2011-05-06 21:29:04 -06:00
parent 153d23ecf0
commit 01193652b0
23 changed files with 32487 additions and 32039 deletions

View File

@ -45,6 +45,8 @@ OBJS = salloc.@LTO@ \
bool.@LTO@ \
builtin.@LTO@ \
char.@LTO@ \
compenv.@LTO@ \
compile.@LTO@ \
complex.@LTO@ \
dynext.@LTO@ \
env.@LTO@ \
@ -60,9 +62,11 @@ OBJS = salloc.@LTO@ \
jitcall.@LTO@ \
jitcommon.@LTO@ \
jitinline.@LTO@ \
jitprep.@LTO@ \
jitstack.@LTO@ \
jitstate.@LTO@ \
list.@LTO@ \
marshal.@LTO@ \
module.@LTO@ \
mzrt.@LTO@ \
network.@LTO@ \
@ -70,22 +74,25 @@ OBJS = salloc.@LTO@ \
number.@LTO@ \
numcomp.@LTO@ \
numstr.@LTO@ \
places.@LTO@ \
optimize.@LTO@ \
place.@LTO@ \
port.@LTO@ \
portfun.@LTO@ \
print.@LTO@ \
rational.@LTO@ \
read.@LTO@ \
regexp.@LTO@ \
resolve.@LTO@ \
sema.@LTO@ \
setjmpup.@LTO@ \
sfs.@LTO@ \
string.@LTO@ \
struct.@LTO@ \
stxobj.@LTO@ \
symbol.@LTO@ \
syntax.@LTO@ \
thread.@LTO@ \
type.@LTO@ \
validate.@LTO@ \
vector.@LTO@ \
$(@FOREIGN_IF_USED@_OBJ)
@ -97,6 +104,8 @@ XSRCS = $(XSRCDIR)/salloc.c \
$(XSRCDIR)/bool.c \
$(XSRCDIR)/builtin.c \
$(XSRCDIR)/char.c \
$(XSRCDIR)/compenv.c \
$(XSRCDIR)/compile.c \
$(XSRCDIR)/complex.c \
$(XSRCDIR)/dynext.c \
$(XSRCDIR)/env.c \
@ -112,31 +121,36 @@ XSRCS = $(XSRCDIR)/salloc.c \
$(XSRCDIR)/jitcall.c \
$(XSRCDIR)/jitcommon.c \
$(XSRCDIR)/jitinline.c \
$(XSRCDIR)/jitprep.c \
$(XSRCDIR)/jitstack.c \
$(XSRCDIR)/jitstate.c \
$(XSRCDIR)/list.c \
$(XSRCDIR)/marshal.c \
$(XSRCDIR)/module.c \
$(XSRCDIR)/network.c \
$(XSRCDIR)/numarith.c \
$(XSRCDIR)/numcomp.c \
$(XSRCDIR)/number.c \
$(XSRCDIR)/numstr.c \
$(XSRCDIR)/places.c \
$(XSRCDIR)/optimize.c \
$(XSRCDIR)/place.c \
$(XSRCDIR)/port.c \
$(XSRCDIR)/portfun.c \
$(XSRCDIR)/print.c \
$(XSRCDIR)/rational.c \
$(XSRCDIR)/read.c \
$(XSRCDIR)/regexp.c \
$(XSRCDIR)/resolve.c \
$(XSRCDIR)/sema.c \
$(XSRCDIR)/setjmpup.c \
$(XSRCDIR)/sfs.c \
$(XSRCDIR)/string.c \
$(XSRCDIR)/struct.c \
$(XSRCDIR)/stxobj.c \
$(XSRCDIR)/symbol.c \
$(XSRCDIR)/syntax.c \
$(XSRCDIR)/thread.c \
$(XSRCDIR)/type.c \
$(XSRCDIR)/validate.c \
$(XSRCDIR)/vector.c \
$(@FOREIGN_IFUSED@_C) \
$(XSRCDIR)/main.c
@ -183,6 +197,10 @@ $(XSRCDIR)/builtin.c: ../src/builtin.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/builtin.c $(SRCDIR)/builtin.c
$(XSRCDIR)/char.c: ../src/char.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/char.c $(SRCDIR)/char.c
$(XSRCDIR)/compenv.c: ../src/compenv.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/compenv.c $(SRCDIR)/compenv.c
$(XSRCDIR)/compile.c: ../src/compile.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/compile.c $(SRCDIR)/compile.c
$(XSRCDIR)/complex.c: ../src/complex.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/complex.c $(SRCDIR)/complex.c
$(XSRCDIR)/dynext.c: ../src/dynext.@LTO@ $(XFORMDEP)
@ -213,10 +231,14 @@ $(XSRCDIR)/jitcommon.c: ../src/jitcommon.@LTO@ $(XFORMDEP) $(LIGHTNINGDEP)
$(XFORM) $(XSRCDIR)/jitcommon.c $(SRCDIR)/jitcommon.c
$(XSRCDIR)/jitinline.c: ../src/jitinline.@LTO@ $(XFORMDEP) $(LIGHTNINGDEP)
$(XFORM) $(XSRCDIR)/jitinline.c $(SRCDIR)/jitinline.c
$(XSRCDIR)/jitprep.c: ../src/jitprep.@LTO@ $(XFORMDEP) $(LIGHTNINGDEP)
$(XFORM) $(XSRCDIR)/jitprep.c $(SRCDIR)/jitprep.c
$(XSRCDIR)/jitstack.c: ../src/jitstack.@LTO@ $(XFORMDEP) $(LIGHTNINGDEP)
$(XFORM) $(XSRCDIR)/jitstack.c $(SRCDIR)/jitstack.c
$(XSRCDIR)/jitstate.c: ../src/jitstate.@LTO@ $(XFORMDEP) $(LIGHTNINGDEP)
$(XFORM) $(XSRCDIR)/jitstate.c $(SRCDIR)/jitstate.c
$(XSRCDIR)/marshal.c: ../src/marshal.@LTO@ $(XFORMDEP) $(SRCDIR)/mzrt.h
$(XFORM) $(XSRCDIR)/marshal.c $(SRCDIR)/marshal.c
$(XSRCDIR)/module.c: ../src/module.@LTO@ $(XFORMDEP) $(SRCDIR)/mzrt.h
$(XFORM) $(XSRCDIR)/module.c $(SRCDIR)/module.c
$(XSRCDIR)/list.c: ../src/list.@LTO@ $(XFORMDEP)
@ -231,8 +253,10 @@ $(XSRCDIR)/numcomp.c: ../src/numcomp.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/numcomp.c $(SRCDIR)/numcomp.c
$(XSRCDIR)/numstr.c: ../src/numstr.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/numstr.c $(SRCDIR)/numstr.c
$(XSRCDIR)/places.c: ../src/places.@LTO@ $(XFORMDEP) $(SRCDIR)/mzrt.h
$(XFORM) $(XSRCDIR)/places.c $(SRCDIR)/places.c
$(XSRCDIR)/optimize.c: ../src/optimize.@LTO@ $(XFORMDEP) $(SRCDIR)/mzrt.h
$(XFORM) $(XSRCDIR)/optimize.c $(SRCDIR)/optimize.c
$(XSRCDIR)/place.c: ../src/place.@LTO@ $(XFORMDEP) $(SRCDIR)/mzrt.h
$(XFORM) $(XSRCDIR)/place.c $(SRCDIR)/place.c
$(XSRCDIR)/port.c: ../src/port.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/port.c $(SRCDIR)/port.c
$(XSRCDIR)/portfun.c: ../src/portfun.@LTO@ $(XFORMDEP)
@ -245,16 +269,18 @@ $(XSRCDIR)/read.c: ../src/read.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/read.c $(SRCDIR)/read.c
$(XSRCDIR)/regexp.c: ../src/regexp.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/regexp.c $(SRCDIR)/regexp.c
$(XSRCDIR)/resolve.c: ../src/resolve.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/resolve.c $(SRCDIR)/resolve.c
$(XSRCDIR)/sema.c: ../src/sema.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/sema.c $(SRCDIR)/sema.c
$(XSRCDIR)/setjmpup.c: ../src/setjmpup.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/setjmpup.c $(SRCDIR)/setjmpup.c
$(XSRCDIR)/sfs.c: ../src/sfs.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/sfs.c $(SRCDIR)/sfs.c
$(XSRCDIR)/string.c: ../src/string.@LTO@ $(XFORMDEP)
$(XFORM_SETUP) --cpp "$(CPP) -I../src $(CPPFLAGS)" -o $(XSRCDIR)/string.c $(SRCDIR)/string.c
$(XSRCDIR)/struct.c: ../src/struct.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/struct.c $(SRCDIR)/struct.c
$(XSRCDIR)/stxobj.c: ../src/stxobj.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/stxobj.c $(SRCDIR)/stxobj.c
$(XSRCDIR)/symbol.c: ../src/symbol.@LTO@ $(XFORMDEP) $(SRCDIR)/mzrt.h
$(XFORM) $(XSRCDIR)/symbol.c $(SRCDIR)/symbol.c
$(XSRCDIR)/syntax.c: ../src/syntax.@LTO@ $(XFORMDEP)
@ -263,6 +289,8 @@ $(XSRCDIR)/thread.c: ../src/thread.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/thread.c $(SRCDIR)/thread.c
$(XSRCDIR)/type.c: ../src/type.@LTO@ $(XFORMDEP) $(MZCLPFDEP)
$(XFORM) $(XSRCDIR)/type.c $(SRCDIR)/type.c
$(XSRCDIR)/validate.c: ../src/validate.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/validate.c $(SRCDIR)/validate.c
$(XSRCDIR)/vector.c: ../src/vector.@LTO@ $(XFORMDEP)
$(XFORM) $(XSRCDIR)/vector.c $(SRCDIR)/vector.c
$(XSRCDIR)/foreign.c: ../../foreign/foreign.@LTO@ $(XFORMDEP)
@ -280,6 +308,10 @@ builtin.@LTO@: $(XSRCDIR)/builtin.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/builtin.c -o builtin.@LTO@
char.@LTO@: $(XSRCDIR)/char.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/char.c -o char.@LTO@
compenv.@LTO@: $(XSRCDIR)/compenv.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/compenv.c -o compenv.@LTO@
compile.@LTO@: $(XSRCDIR)/compile.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/compile.c -o compile.@LTO@
complex.@LTO@: $(XSRCDIR)/complex.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/complex.c -o complex.@LTO@
dynext.@LTO@: $(XSRCDIR)/dynext.c
@ -310,12 +342,16 @@ jitcommon.@LTO@: $(XSRCDIR)/jitcommon.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/jitcommon.c -o jitcommon.@LTO@
jitinline.@LTO@: $(XSRCDIR)/jitinline.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/jitinline.c -o jitinline.@LTO@
jitprep.@LTO@: $(XSRCDIR)/jitprep.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/jitprep.c -o jitprep.@LTO@
jitstack.@LTO@: $(XSRCDIR)/jitstack.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/jitstack.c -o jitstack.@LTO@
jitstate.@LTO@: $(XSRCDIR)/jitstate.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/jitstate.c -o jitstate.@LTO@
list.@LTO@: $(XSRCDIR)/list.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/list.c -o list.@LTO@
marshal.@LTO@: $(XSRCDIR)/marshal.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/marshal.c -o marshal.@LTO@
module.@LTO@: $(XSRCDIR)/module.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/module.c -o module.@LTO@
mzrt.@LTO@: $(SRCDIR)/mzrt.c $(SRCDIR)/mzrt.h $(XFORMDEP)
@ -330,8 +366,10 @@ numcomp.@LTO@: $(XSRCDIR)/numcomp.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/numcomp.c -o numcomp.@LTO@
numstr.@LTO@: $(XSRCDIR)/numstr.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/numstr.c -o numstr.@LTO@
places.@LTO@: $(XSRCDIR)/places.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/places.c -o places.@LTO@
optimize.@LTO@: $(XSRCDIR)/optimize.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/optimize.c -o optimize.@LTO@
place.@LTO@: $(XSRCDIR)/place.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/place.c -o place.@LTO@
port.@LTO@: $(XSRCDIR)/port.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/port.c -o port.@LTO@
portfun.@LTO@: $(XSRCDIR)/portfun.c
@ -344,16 +382,18 @@ read.@LTO@: $(XSRCDIR)/read.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/read.c -o read.@LTO@
regexp.@LTO@: $(XSRCDIR)/regexp.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/regexp.c -o regexp.@LTO@
resolve.@LTO@: $(XSRCDIR)/resolve.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/resolve.c -o resolve.@LTO@
sema.@LTO@: $(XSRCDIR)/sema.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/sema.c -o sema.@LTO@
setjmpup.@LTO@: $(XSRCDIR)/setjmpup.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/setjmpup.c -o setjmpup.@LTO@
sfs.@LTO@: $(XSRCDIR)/sfs.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/sfs.c -o sfs.@LTO@
string.@LTO@: $(XSRCDIR)/string.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/string.c -o string.@LTO@
struct.@LTO@: $(XSRCDIR)/struct.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/struct.c -o struct.@LTO@
stxobj.@LTO@: $(XSRCDIR)/stxobj.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/stxobj.c -o stxobj.@LTO@
symbol.@LTO@: $(XSRCDIR)/symbol.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/symbol.c -o symbol.@LTO@
syntax.@LTO@: $(XSRCDIR)/syntax.c
@ -362,6 +402,8 @@ thread.@LTO@: $(XSRCDIR)/thread.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/thread.c -o thread.@LTO@
type.@LTO@: $(XSRCDIR)/type.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/type.c -o type.@LTO@
validate.@LTO@: $(XSRCDIR)/validate.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/validate.c -o validate.@LTO@
vector.@LTO@: $(XSRCDIR)/vector.c
$(CC) $(CFLAGS) -c $(XSRCDIR)/vector.c -o vector.@LTO@
foreign.@LTO@: $(XSRCDIR)/foreign.c

View File

@ -16,6 +16,8 @@ OBJS = salloc.@LTO@ \
bool.@LTO@ \
builtin.@LTO@ \
char.@LTO@ \
compenv.@LTO@ \
compile.@LTO@ \
complex.@LTO@ \
dynext.@LTO@ \
env.@LTO@ \
@ -32,9 +34,11 @@ OBJS = salloc.@LTO@ \
jitcall.@LTO@ \
jitcommon.@LTO@ \
jitinline.@LTO@ \
jitprep.@LTO@ \
jitstack.@LTO@ \
jitstate.@LTO@ \
list.@LTO@ \
marshal.@LTO@ \
module.@LTO@ \
mzrt.@LTO@ \
network.@LTO@ \
@ -42,23 +46,26 @@ OBJS = salloc.@LTO@ \
number.@LTO@ \
numcomp.@LTO@ \
numstr.@LTO@ \
places.@LTO@ \
optimize.@LTO@ \
place.@LTO@ \
port.@LTO@ \
portfun.@LTO@ \
print.@LTO@ \
rational.@LTO@ \
read.@LTO@ \
regexp.@LTO@ \
resolve.@LTO@ \
sema.@LTO@ \
setjmpup.@LTO@ \
sfs.@LTO@ \
string.@LTO@ \
struct.@LTO@ \
stxobj.@LTO@ \
symbol.@LTO@ \
syntax.@LTO@ \
thread.@LTO@ \
type.@LTO@ \
unwind.@LTO@ \
validate.@LTO@ \
vector.@LTO@ @EXTRA_GMP_OBJ@
SRCS = $(srcdir)/salloc.c \
@ -66,6 +73,8 @@ SRCS = $(srcdir)/salloc.c \
$(srcdir)/bool.c \
$(srcdir)/builtin.c \
$(srcdir)/char.c \
$(srcdir)/compenv.c \
$(srcdir)/compile.c \
$(srcdir)/complex.c \
$(srcdir)/dynext.c \
$(srcdir)/env.c \
@ -82,9 +91,11 @@ SRCS = $(srcdir)/salloc.c \
$(srcdir)/jitcall.c \
$(srcdir)/jitcommon.c \
$(srcdir)/jitinline.c \
$(srcdir)/jitprep.c \
$(srcdir)/jitstack.c \
$(srcdir)/jitstate.c \
$(srcdir)/list.c \
$(srcdir)/marshal.c \
$(srcdir)/module.c \
$(srcdir)/mzrt.c \
$(srcdir)/network.c \
@ -92,23 +103,26 @@ SRCS = $(srcdir)/salloc.c \
$(srcdir)/number.c \
$(srcdir)/numcomp.c \
$(srcdir)/numstr.c \
$(srcdir)/places.c \
$(srcdir)/optimize.c \
$(srcdir)/place.c \
$(srcdir)/port.c \
$(srcdir)/portfun.c \
$(srcdir)/print.c \
$(srcdir)/rational.c \
$(srcdir)/read.c \
$(srcdir)/regexp.c \
$(srcdir)/resolve.c \
$(srcdir)/sema.c \
$(srcdir)/setjmpup.c \
$(srcdir)/sfs.c \
$(srcdir)/string.c \
$(srcdir)/struct.c \
$(srcdir)/stxobj.c \
$(srcdir)/symbol.c \
$(srcdir)/syntax.c \
$(srcdir)/thread.c \
$(srcdir)/type.c \
$(srcdir)/unwind/libunwind.c \
$(srcdir)/validate.c \
$(srcdir)/vector.c
wrong:
@ -167,6 +181,10 @@ builtin.@LTO@: $(srcdir)/builtin.c
$(CC) $(CFLAGS) -c $(srcdir)/builtin.c -o builtin.@LTO@
char.@LTO@: $(srcdir)/char.c
$(CC) $(CFLAGS) -c $(srcdir)/char.c -o char.@LTO@
compenv.@LTO@: $(srcdir)/compenv.c
$(CC) $(CFLAGS) -c $(srcdir)/compenv.c -o compenv.@LTO@
compile.@LTO@: $(srcdir)/compile.c
$(CC) $(CFLAGS) -c $(srcdir)/compile.c -o compile.@LTO@
complex.@LTO@: $(srcdir)/complex.c
$(CC) $(CFLAGS) -c $(srcdir)/complex.c -o complex.@LTO@
dynext.@LTO@: $(srcdir)/dynext.c
@ -199,12 +217,16 @@ jitcommon.@LTO@: $(srcdir)/jitcommon.c
$(CC) $(CFLAGS) -c $(srcdir)/jitcommon.c -o jitcommon.@LTO@
jitinline.@LTO@: $(srcdir)/jitinline.c
$(CC) $(CFLAGS) -c $(srcdir)/jitinline.c -o jitinline.@LTO@
jitprep.@LTO@: $(srcdir)/jitprep.c
$(CC) $(CFLAGS) -c $(srcdir)/jitprep.c -o jitprep.@LTO@
jitstack.@LTO@: $(srcdir)/jitstack.c
$(CC) $(CFLAGS) -c $(srcdir)/jitstack.c -o jitstack.@LTO@
jitstate.@LTO@: $(srcdir)/jitstate.c
$(CC) $(CFLAGS) -c $(srcdir)/jitstate.c -o jitstate.@LTO@
list.@LTO@: $(srcdir)/list.c
$(CC) $(CFLAGS) -c $(srcdir)/list.c -o list.@LTO@
marshal.@LTO@: $(srcdir)/marshal.c
$(CC) $(CFLAGS) -c $(srcdir)/marshal.c -o marshal.@LTO@
module.@LTO@: $(srcdir)/module.c
$(CC) $(CFLAGS) -c $(srcdir)/module.c -o module.@LTO@
mzrt.@LTO@: $(srcdir)/mzrt.c
@ -219,8 +241,10 @@ numcomp.@LTO@: $(srcdir)/numcomp.c
$(CC) $(CFLAGS) -c $(srcdir)/numcomp.c -o numcomp.@LTO@
numstr.@LTO@: $(srcdir)/numstr.c
$(CC) $(CFLAGS) -c $(srcdir)/numstr.c -o numstr.@LTO@
places.@LTO@: $(srcdir)/places.c
$(CC) $(CFLAGS) -c $(srcdir)/places.c -o places.@LTO@
optimize.@LTO@: $(srcdir)/optimize.c
$(CC) $(CFLAGS) -c $(srcdir)/optimize.c -o optimize.@LTO@
place.@LTO@: $(srcdir)/place.c
$(CC) $(CFLAGS) -c $(srcdir)/place.c -o place.@LTO@
port.@LTO@: $(srcdir)/port.c
$(CC) $(CFLAGS) -c $(srcdir)/port.c -o port.@LTO@
portfun.@LTO@: $(srcdir)/portfun.c
@ -233,16 +257,18 @@ read.@LTO@: $(srcdir)/read.c
$(CC) $(CFLAGS) -c $(srcdir)/read.c -o read.@LTO@
regexp.@LTO@: $(srcdir)/regexp.c
$(CC) $(CFLAGS) -c $(srcdir)/regexp.c -o regexp.@LTO@
resolve.@LTO@: $(srcdir)/resolve.c
$(CC) $(CFLAGS) -c $(srcdir)/resolve.c -o resolve.@LTO@
sema.@LTO@: $(srcdir)/sema.c
$(CC) $(CFLAGS) -c $(srcdir)/sema.c -o sema.@LTO@
setjmpup.@LTO@: $(srcdir)/setjmpup.c
$(CC) $(CFLAGS) -c $(srcdir)/setjmpup.c -o setjmpup.@LTO@
sfs.@LTO@: $(srcdir)/sfs.c
$(CC) $(CFLAGS) -c $(srcdir)/sfs.c -o sfs.@LTO@
string.@LTO@: $(srcdir)/string.c
$(CC) $(CFLAGS) -c $(srcdir)/string.c -I. -o string.@LTO@
struct.@LTO@: $(srcdir)/struct.c
$(CC) $(CFLAGS) -c $(srcdir)/struct.c -o struct.@LTO@
stxobj.@LTO@: $(srcdir)/stxobj.c
$(CC) $(CFLAGS) -c $(srcdir)/stxobj.c -o stxobj.@LTO@
symbol.@LTO@: $(srcdir)/symbol.c
$(CC) $(CFLAGS) -c $(srcdir)/symbol.c -o symbol.@LTO@
syntax.@LTO@: $(srcdir)/syntax.c
@ -253,6 +279,8 @@ type.@LTO@: $(srcdir)/type.c
$(CC) $(CFLAGS) -c $(srcdir)/type.c -o type.@LTO@
unwind.@LTO@: $(srcdir)/unwind/libunwind.c $(srcdir)/unwind/libunwind.h $(srcdir)/unwind/libunwind_i.h
$(CC) $(CFLAGS) -c $(srcdir)/unwind/libunwind.c -o unwind.@LTO@
validate.@LTO@: $(srcdir)/validate.c
$(CC) $(CFLAGS) -c $(srcdir)/validate.c -o validate.@LTO@
vector.@LTO@: $(srcdir)/vector.c
$(CC) $(CFLAGS) -c $(srcdir)/vector.c -o vector.@LTO@
@ -287,6 +315,10 @@ builtin.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/schminc.h $(srcdir)/startup.inc $(srcdir)/cstartup.inc
char.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/schuchar.inc
compenv.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/mzmark.c
compile.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h
complex.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h
dynext.@LTO@: $(COMMON_HEADERS) \
@ -316,10 +348,14 @@ jitarith.@LTO@: $(COMMON_HEADERS) $(JIT_HEADERS)
jitcall.@LTO@: $(COMMON_HEADERS) $(JIT_HEADERS)
jitcommon.@LTO@: $(COMMON_HEADERS) $(JIT_HEADERS)
jitinline.@LTO@: $(COMMON_HEADERS) $(JIT_HEADERS)
jitprep.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h
jitstack.@LTO@: $(COMMON_HEADERS) $(JIT_HEADERS) $(srcdir)/codetab.inc
jitstate.@LTO@: $(COMMON_HEADERS) $(JIT_HEADERS)
list.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h
marshal.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h
module.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/schfd.h $(srcdir)/mzmark.c
mzrt.@LTO@: $(COMMON_HEADERS)
@ -333,7 +369,9 @@ numcomp.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/nummacs.h
numstr.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/random.inc $(srcdir)/newrandom.inc
places.@LTO@: $(COMMON_HEADERS) \
optimize.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/mzmark.c
place.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/schfd.h $(srcdir)/mzmark.c
port.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/schfd.h $(srcdir)/mzmark.c
@ -350,22 +388,26 @@ read.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/mzmark.c
regexp.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/mzmark.c $(srcdir)/schrx.h
resolve.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/mzmark.c
setjmpup.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/schmach.h
sfs.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/mzmark.c
string.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/schvers.h $(srcdir)/mzmark.c $(srcdir)/strops.inc \
$(srcdir)/schustr.inc
struct.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/mzmark.c
stxobj.@LTO@: $(COMMON_HEADERS) \
syntax.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/schfd.h $(srcdir)/mzmark.c
symbol.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h
syntax.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/mzmark.c
sema.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/mzmark.c
type.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h $(srcdir)/mzmark.c
vector.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h
vadliate.@LTO@: $(COMMON_HEADERS) \
$(srcdir)/../src/stypes.h

2462
src/racket/src/compenv.c Normal file

File diff suppressed because it is too large Load Diff

5446
src/racket/src/compile.c Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

644
src/racket/src/jitprep.c Normal file
View File

@ -0,0 +1,644 @@
/*
Racket
Copyright (c) 2004-2011 PLT Scheme Inc.
Copyright (c) 1995-2001 Matthew Flatt
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301 USA.
libscheme
Copyright (c) 1994 Brent Benson
All rights reserved.
*/
/* This file implements a bytecode pass to insert hook that trigger
JIT compilation. This pass is performed after bytecode is marshaled
or unmarshaled.
See "eval.c" for an overview of compilation passes and JIT
prepraration. */
#include "schpriv.h"
#include "schrunst.h"
#ifdef MZ_USE_JIT
static Scheme_Object *jit_application(Scheme_Object *o)
{
Scheme_Object *orig, *naya = NULL;
Scheme_App_Rec *app, *app2;
int i, n, size;
app = (Scheme_App_Rec *)o;
n = app->num_args + 1;
for (i = 0; i < n; i++) {
orig = app->args[i];
naya = scheme_jit_expr(orig);
if (!SAME_OBJ(orig, naya))
break;
}
if (i >= n)
return o;
size = (sizeof(Scheme_App_Rec)
+ ((n - 1) * sizeof(Scheme_Object *))
+ n * sizeof(char));
app2 = (Scheme_App_Rec *)scheme_malloc_tagged(size);
memcpy(app2, app, size);
app2->args[i] = naya;
for (i++; i < n; i++) {
orig = app2->args[i];
naya = scheme_jit_expr(orig);
app2->args[i] = naya;
}
return (Scheme_Object *)app2;
}
static Scheme_Object *jit_application2(Scheme_Object *o)
{
Scheme_App2_Rec *app;
Scheme_Object *nrator, *nrand;
app = (Scheme_App2_Rec *)o;
nrator = scheme_jit_expr(app->rator);
nrand = scheme_jit_expr(app->rand);
if (SAME_OBJ(nrator, app->rator)
&& SAME_OBJ(nrand, app->rand))
return o;
app = MALLOC_ONE_TAGGED(Scheme_App2_Rec);
memcpy(app, o, sizeof(Scheme_App2_Rec));
app->rator = nrator;
app->rand = nrand;
return (Scheme_Object *)app;
}
static Scheme_Object *jit_application3(Scheme_Object *o)
{
Scheme_App3_Rec *app;
Scheme_Object *nrator, *nrand1, *nrand2;
app = (Scheme_App3_Rec *)o;
nrator = scheme_jit_expr(app->rator);
nrand1 = scheme_jit_expr(app->rand1);
nrand2 = scheme_jit_expr(app->rand2);
if (SAME_OBJ(nrator, app->rator)
&& SAME_OBJ(nrand1, app->rand1)
&& SAME_OBJ(nrand2, app->rand2))
return o;
app = MALLOC_ONE_TAGGED(Scheme_App3_Rec);
memcpy(app, o, sizeof(Scheme_App3_Rec));
app->rator = nrator;
app->rand1 = nrand1;
app->rand2 = nrand2;
return (Scheme_Object *)app;
}
static Scheme_Object *jit_sequence(Scheme_Object *o)
{
Scheme_Object *orig, *naya = NULL;
Scheme_Sequence *seq, *seq2;
int i, n, size;
seq = (Scheme_Sequence *)o;
n = seq->count;
for (i = 0; i < n; i++) {
orig = seq->array[i];
naya = scheme_jit_expr(orig);
if (!SAME_OBJ(orig, naya))
break;
}
if (i >= n)
return o;
size = (sizeof(Scheme_Sequence)
+ ((n - 1) * sizeof(Scheme_Object *)));
seq2 = (Scheme_Sequence *)scheme_malloc_tagged(size);
memcpy(seq2, seq, size);
seq2->array[i] = naya;
for (i++; i < n; i++) {
orig = seq2->array[i];
naya = scheme_jit_expr(orig);
seq2->array[i] = naya;
}
return (Scheme_Object *)seq2;
}
static Scheme_Object *jit_branch(Scheme_Object *o)
{
Scheme_Branch_Rec *b;
Scheme_Object *t, *tb, *fb;
b = (Scheme_Branch_Rec *)o;
t = scheme_jit_expr(b->test);
tb = scheme_jit_expr(b->tbranch);
fb = scheme_jit_expr(b->fbranch);
if (SAME_OBJ(t, b->test)
&& SAME_OBJ(tb, b->tbranch)
&& SAME_OBJ(fb, b->fbranch))
return o;
b = MALLOC_ONE_TAGGED(Scheme_Branch_Rec);
memcpy(b, o, sizeof(Scheme_Branch_Rec));
b->test = t;
b->tbranch = tb;
b->fbranch = fb;
return (Scheme_Object *)b;
}
static Scheme_Object *jit_let_value(Scheme_Object *o)
{
Scheme_Let_Value *lv = (Scheme_Let_Value *)o;
Scheme_Object *body, *rhs;
rhs = scheme_jit_expr(lv->value);
body = scheme_jit_expr(lv->body);
if (SAME_OBJ(rhs, lv->value)
&& SAME_OBJ(body, lv->body))
return o;
lv = MALLOC_ONE_TAGGED(Scheme_Let_Value);
memcpy(lv, o, sizeof(Scheme_Let_Value));
lv->value = rhs;
lv->body = body;
return (Scheme_Object *)lv;
}
static Scheme_Object *jit_let_one(Scheme_Object *o)
{
Scheme_Let_One *lo = (Scheme_Let_One *)o;
Scheme_Object *body, *rhs;
rhs = scheme_jit_expr(lo->value);
body = scheme_jit_expr(lo->body);
if (SAME_OBJ(rhs, lo->value)
&& SAME_OBJ(body, lo->body))
return o;
lo = MALLOC_ONE_TAGGED(Scheme_Let_One);
memcpy(lo, o, sizeof(Scheme_Let_One));
lo->value = rhs;
lo->body = body;
return (Scheme_Object *)lo;
}
static Scheme_Object *jit_let_void(Scheme_Object *o)
{
Scheme_Let_Void *lv = (Scheme_Let_Void *)o;
Scheme_Object *body;
body = scheme_jit_expr(lv->body);
if (SAME_OBJ(body, lv->body))
return o;
lv = MALLOC_ONE_TAGGED(Scheme_Let_Void);
memcpy(lv, o, sizeof(Scheme_Let_Void));
lv->body = body;
return (Scheme_Object *)lv;
}
static Scheme_Object *jit_letrec(Scheme_Object *o)
{
Scheme_Letrec *lr = (Scheme_Letrec *)o, *lr2;
Scheme_Object **procs, **procs2, *v;
int i, count;
count = lr->count;
lr2 = MALLOC_ONE_TAGGED(Scheme_Letrec);
memcpy(lr2, lr, sizeof(Scheme_Letrec));
procs = lr->procs;
procs2 = MALLOC_N(Scheme_Object *, count);
lr2->procs = procs2;
for (i = 0; i < count; i++) {
v = scheme_jit_closure(procs[i], (Scheme_Object *)lr2);
procs2[i] = v;
}
v = scheme_jit_expr(lr->body);
lr2->body = v;
return (Scheme_Object *)lr2;
}
static Scheme_Object *jit_wcm(Scheme_Object *o)
{
Scheme_With_Continuation_Mark *wcm = (Scheme_With_Continuation_Mark *)o;
Scheme_Object *k, *v, *b;
k = scheme_jit_expr(wcm->key);
v = scheme_jit_expr(wcm->val);
b = scheme_jit_expr(wcm->body);
if (SAME_OBJ(wcm->key, k)
&& SAME_OBJ(wcm->val, v)
&& SAME_OBJ(wcm->body, b))
return o;
wcm = MALLOC_ONE_TAGGED(Scheme_With_Continuation_Mark);
memcpy(wcm, o, sizeof(Scheme_With_Continuation_Mark));
wcm->key = k;
wcm->val = v;
wcm->body = b;
return (Scheme_Object *)wcm;
}
/*========================================================================*/
/* other syntax */
/*========================================================================*/
static Scheme_Object *define_values_jit(Scheme_Object *data)
{
Scheme_Object *orig = SCHEME_VEC_ELS(data)[0], *naya;
if (SAME_TYPE(SCHEME_TYPE(orig), scheme_unclosed_procedure_type)
&& (SCHEME_VEC_SIZE(data) == 2))
naya = scheme_jit_closure(orig, SCHEME_VEC_ELS(data)[1]);
else
naya = scheme_jit_expr(orig);
if (SAME_OBJ(naya, orig))
return data;
else {
orig = naya;
naya = scheme_clone_vector(data, 0, 1);
SCHEME_VEC_ELS(naya)[0] = orig;
return naya;
}
}
static Scheme_Object *set_jit(Scheme_Object *data)
{
Scheme_Set_Bang *sb = (Scheme_Set_Bang *)data, *naya;
Scheme_Object *orig_val, *naya_val;
orig_val = sb->val;
naya_val = scheme_jit_expr(orig_val);
if (SAME_OBJ(naya_val, orig_val))
return data;
else {
naya = MALLOC_ONE_TAGGED(Scheme_Set_Bang);
memcpy(naya, sb, sizeof(Scheme_Set_Bang));
naya->val = naya_val;
return (Scheme_Object *)naya;
}
}
static Scheme_Object *ref_jit(Scheme_Object *data)
{
return data;
}
static Scheme_Object *apply_values_jit(Scheme_Object *data)
{
Scheme_Object *f, *e;
f = scheme_jit_expr(SCHEME_PTR1_VAL(data));
e = scheme_jit_expr(SCHEME_PTR2_VAL(data));
if (SAME_OBJ(f, SCHEME_PTR1_VAL(data))
&& SAME_OBJ(e, SCHEME_PTR2_VAL(data)))
return data;
else {
data = scheme_alloc_object();
data->type = scheme_apply_values_type;
SCHEME_PTR1_VAL(data) = f;
SCHEME_PTR2_VAL(data) = e;
return data;
}
}
Scheme_Object *scheme_case_lambda_jit(Scheme_Object *expr)
{
#ifdef MZ_USE_JIT
Scheme_Case_Lambda *seqin = (Scheme_Case_Lambda *)expr;
if (!seqin->native_code) {
Scheme_Case_Lambda *seqout;
Scheme_Native_Closure_Data *ndata;
Scheme_Object *val, *name;
int i, cnt, size, all_closed = 1;
cnt = seqin->count;
size = sizeof(Scheme_Case_Lambda) + ((cnt - 1) * sizeof(Scheme_Object *));
seqout = (Scheme_Case_Lambda *)scheme_malloc_tagged(size);
memcpy(seqout, seqin, size);
name = seqin->name;
if (name && SCHEME_BOXP(name))
name = SCHEME_BOX_VAL(name);
for (i = 0; i < cnt; i++) {
val = seqout->array[i];
if (SCHEME_PROCP(val)) {
/* Undo creation of empty closure */
val = (Scheme_Object *)((Scheme_Closure *)val)->code;
seqout->array[i] = val;
}
((Scheme_Closure_Data *)val)->name = name;
if (((Scheme_Closure_Data *)val)->closure_size)
all_closed = 0;
}
/* Generating the code may cause empty closures to be formed: */
ndata = scheme_generate_case_lambda(seqout);
seqout->native_code = ndata;
if (all_closed) {
/* Native closures do not refer back to the original bytecode,
so no need to worry about clearing the reference. */
Scheme_Native_Closure *nc;
nc = (Scheme_Native_Closure *)scheme_make_native_case_closure(ndata);
for (i = 0; i < cnt; i++) {
val = seqout->array[i];
if (!SCHEME_PROCP(val)) {
val = scheme_make_native_closure(((Scheme_Closure_Data *)val)->u.native_code);
}
nc->vals[i] = val;
}
return (Scheme_Object *)nc;
} else {
/* The case-lambda data must point to the original closure-data
record, because that's where the closure maps are kept. But
we don't need the bytecode, anymore. So clone the
closure-data record and drop the bytecode in thte clone. */
for (i = 0; i < cnt; i++) {
val = seqout->array[i];
if (!SCHEME_PROCP(val)) {
Scheme_Closure_Data *data;
data = MALLOC_ONE_TAGGED(Scheme_Closure_Data);
memcpy(data, val, sizeof(Scheme_Closure_Data));
data->code = NULL;
seqout->array[i] = (Scheme_Object *)data;
}
}
}
return (Scheme_Object *)seqout;
}
#endif
return expr;
}
static Scheme_Object *bangboxenv_jit(Scheme_Object *data)
{
Scheme_Object *orig, *naya, *new_data;
orig = SCHEME_PTR2_VAL(data);
naya = scheme_jit_expr(orig);
if (SAME_OBJ(naya, orig))
return data;
else {
new_data = scheme_alloc_object();
new_data->type = scheme_boxenv_type;
SCHEME_PTR1_VAL(new_data) = SCHEME_PTR1_VAL(data);
SCHEME_PTR2_VAL(new_data) = naya;
return new_data;
}
}
static Scheme_Object *begin0_jit(Scheme_Object *data)
{
Scheme_Sequence *seq = (Scheme_Sequence *)data, *seq2;
Scheme_Object *old, *naya = NULL;
int i, j, count;
count = seq->count;
for (i = 0; i < count; i++) {
old = seq->array[i];
naya = scheme_jit_expr(old);
if (!SAME_OBJ(old, naya))
break;
}
if (i >= count)
return data;
seq2 = (Scheme_Sequence *)scheme_malloc_tagged(sizeof(Scheme_Sequence)
+ (count - 1)
* sizeof(Scheme_Object *));
seq2->so.type = scheme_begin0_sequence_type;
seq2->count = count;
for (j = 0; j < i; j++) {
seq2->array[j] = seq->array[j];
}
seq2->array[i] = naya;
for (i++; i < count; i++) {
old = seq->array[i];
naya = scheme_jit_expr(old);
seq2->array[i] = naya;
}
return (Scheme_Object *)seq2;
}
static Scheme_Object *do_define_syntaxes_jit(Scheme_Object *expr, int jit)
{
Resolve_Prefix *rp, *orig_rp;
Scheme_Object *naya, *rhs;
rhs = SCHEME_VEC_ELS(expr)[0];
if (jit)
naya = scheme_jit_expr(rhs);
else
naya = rhs;
orig_rp = (Resolve_Prefix *)SCHEME_VEC_ELS(expr)[1];
rp = scheme_prefix_eval_clone(orig_rp);
if (SAME_OBJ(naya, rhs)
&& SAME_OBJ(orig_rp, rp))
return expr;
else {
expr = scheme_clone_vector(expr, 0, 1);
SCHEME_VEC_ELS(expr)[0] = naya;
SCHEME_VEC_ELS(expr)[1] = (Scheme_Object *)rp;
return expr;
}
}
static Scheme_Object *define_syntaxes_jit(Scheme_Object *expr)
{
return do_define_syntaxes_jit(expr, 1);
}
static Scheme_Object *define_for_syntaxes_jit(Scheme_Object *expr)
{
return do_define_syntaxes_jit(expr, 1);
}
Scheme_Object *scheme_syntaxes_eval_clone(Scheme_Object *expr)
{
return do_define_syntaxes_jit(expr, 0);
}
/*========================================================================*/
/* closures */
/*========================================================================*/
Scheme_Object *scheme_jit_closure(Scheme_Object *code, Scheme_Object *context)
/* If lr is supplied as a letrec binding this closure, it may be used
for JIT compilation. */
{
#ifdef MZ_USE_JIT
Scheme_Closure_Data *data = (Scheme_Closure_Data *)code, *data2;
/* We need to cache clones to support multiple references
to a zero-sized closure in bytecode. We need either a clone
or native code, and context determines which field is relevant,
so we put the two possibilities in a union `u'. */
if (!context)
data2 = data->u.jit_clone;
else
data2 = NULL;
if (!data2) {
Scheme_Native_Closure_Data *ndata;
data2 = MALLOC_ONE_TAGGED(Scheme_Closure_Data);
memcpy(data2, code, sizeof(Scheme_Closure_Data));
data2->context = context;
ndata = scheme_generate_lambda(data2, 1, NULL);
data2->u.native_code = ndata;
if (!context)
data->u.jit_clone = data2;
}
/* If it's zero-sized, then create closure now */
if (!data2->closure_size)
return scheme_make_native_closure(data2->u.native_code);
return (Scheme_Object *)data2;
#endif
return code;
}
/*========================================================================*/
/* expressions */
/*========================================================================*/
Scheme_Object *scheme_jit_expr(Scheme_Object *expr)
{
Scheme_Type type = SCHEME_TYPE(expr);
switch (type) {
case scheme_application_type:
return jit_application(expr);
case scheme_application2_type:
return jit_application2(expr);
case scheme_application3_type:
return jit_application3(expr);
case scheme_sequence_type:
case scheme_splice_sequence_type:
return jit_sequence(expr);
case scheme_branch_type:
return jit_branch(expr);
case scheme_with_cont_mark_type:
return jit_wcm(expr);
case scheme_unclosed_procedure_type:
return scheme_jit_closure(expr, NULL);
case scheme_let_value_type:
return jit_let_value(expr);
case scheme_let_void_type:
return jit_let_void(expr);
case scheme_letrec_type:
return jit_letrec(expr);
case scheme_let_one_type:
return jit_let_one(expr);
case scheme_closure_type:
{
Scheme_Closure *c = (Scheme_Closure *)expr;
if (ZERO_SIZED_CLOSUREP(c)) {
/* JIT the closure body, producing a native closure: */
return scheme_jit_closure((Scheme_Object *)c->code, NULL);
} else
return expr;
}
case scheme_case_closure_type:
{
return scheme_unclose_case_lambda(expr, 1);
}
case scheme_define_values_type:
return define_values_jit(expr);
case scheme_define_syntaxes_type:
return define_syntaxes_jit(expr);
case scheme_define_for_syntax_type:
return define_for_syntaxes_jit(expr);
case scheme_set_bang_type:
return set_jit(expr);
case scheme_boxenv_type:
return bangboxenv_jit(expr);
case scheme_begin0_sequence_type:
return begin0_jit(expr);
case scheme_require_form_type:
return scheme_top_level_require_jit(expr);
case scheme_varref_form_type:
return ref_jit(expr);
case scheme_apply_values_type:
return apply_values_jit(expr);
case scheme_case_lambda_sequence_type:
return scheme_case_lambda_jit(expr);
case scheme_module_type:
return scheme_module_jit(expr);
default:
return expr;
}
}
#else
Scheme_Object *scheme_jit_expr(Scheme_Object *expr)
{
return expr;
}
#endif

1716
src/racket/src/marshal.c Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2922,8 +2922,16 @@ static int engine_val_FIXUP(void *p, struct NewGC *gc) {
#endif /* ENGINE */
/**********************************************************************/
#ifdef MARKS_FOR_ENV_C
#endif /* ENV */
/**********************************************************************/
#ifdef MARKS_FOR_COMPENV_C
static int mark_comp_env_SIZE(void *p, struct NewGC *gc) {
return
gcBYTES_TO_WORDS(sizeof(Scheme_Full_Comp_Env));
@ -2989,6 +2997,12 @@ static int mark_comp_env_FIXUP(void *p, struct NewGC *gc) {
#define mark_comp_env_IS_CONST_SIZE 1
#endif /* COMPENV */
/**********************************************************************/
#ifdef MARKS_FOR_RESOLVE_C
static int mark_resolve_info_SIZE(void *p, struct NewGC *gc) {
return
gcBYTES_TO_WORDS(sizeof(Resolve_Info));
@ -3034,6 +3048,49 @@ static int mark_resolve_info_FIXUP(void *p, struct NewGC *gc) {
#define mark_resolve_info_IS_CONST_SIZE 1
#endif /* RESOLVE */
/**********************************************************************/
#ifdef MARKS_FOR_SFS_C
static int mark_sfs_info_SIZE(void *p, struct NewGC *gc) {
return
gcBYTES_TO_WORDS(sizeof(SFS_Info));
}
static int mark_sfs_info_MARK(void *p, struct NewGC *gc) {
SFS_Info *i = (SFS_Info *)p;
gcMARK2(i->max_used, gc);
gcMARK2(i->max_calls, gc);
gcMARK2(i->saved, gc);
return
gcBYTES_TO_WORDS(sizeof(SFS_Info));
}
static int mark_sfs_info_FIXUP(void *p, struct NewGC *gc) {
SFS_Info *i = (SFS_Info *)p;
gcFIXUP2(i->max_used, gc);
gcFIXUP2(i->max_calls, gc);
gcFIXUP2(i->saved, gc);
return
gcBYTES_TO_WORDS(sizeof(SFS_Info));
}
#define mark_sfs_info_IS_ATOMIC 0
#define mark_sfs_info_IS_CONST_SIZE 1
#endif /* SFS */
/**********************************************************************/
#ifdef MARKS_FOR_OPTIMIZE_C
static int mark_optimize_info_SIZE(void *p, struct NewGC *gc) {
return
gcBYTES_TO_WORDS(sizeof(Optimize_Info));
@ -3077,37 +3134,6 @@ static int mark_optimize_info_FIXUP(void *p, struct NewGC *gc) {
#define mark_optimize_info_IS_CONST_SIZE 1
static int mark_sfs_info_SIZE(void *p, struct NewGC *gc) {
return
gcBYTES_TO_WORDS(sizeof(SFS_Info));
}
static int mark_sfs_info_MARK(void *p, struct NewGC *gc) {
SFS_Info *i = (SFS_Info *)p;
gcMARK2(i->max_used, gc);
gcMARK2(i->max_calls, gc);
gcMARK2(i->saved, gc);
return
gcBYTES_TO_WORDS(sizeof(SFS_Info));
}
static int mark_sfs_info_FIXUP(void *p, struct NewGC *gc) {
SFS_Info *i = (SFS_Info *)p;
gcFIXUP2(i->max_used, gc);
gcFIXUP2(i->max_calls, gc);
gcFIXUP2(i->saved, gc);
return
gcBYTES_TO_WORDS(sizeof(SFS_Info));
}
#define mark_sfs_info_IS_ATOMIC 0
#define mark_sfs_info_IS_CONST_SIZE 1
static int mark_once_used_SIZE(void *p, struct NewGC *gc) {
return
gcBYTES_TO_WORDS(sizeof(Scheme_Once_Used));
@ -3135,7 +3161,7 @@ static int mark_once_used_FIXUP(void *p, struct NewGC *gc) {
#define mark_once_used_IS_CONST_SIZE 1
#endif /* ENV */
#endif /* OPTIMIZE */
/**********************************************************************/
@ -3201,6 +3227,12 @@ static int mark_saved_stack_FIXUP(void *p, struct NewGC *gc) {
#define mark_saved_stack_IS_CONST_SIZE 1
#endif /* EVAL */
/**********************************************************************/
#ifdef MARKS_FOR_VALIDATE_C
static int mark_validate_clearing_SIZE(void *p, struct NewGC *gc) {
return
gcBYTES_TO_WORDS(sizeof(Validate_Clearing));
@ -3230,7 +3262,7 @@ static int mark_validate_clearing_FIXUP(void *p, struct NewGC *gc) {
#define mark_validate_clearing_IS_CONST_SIZE 1
#endif /* EVAL */
#endif /* VALIDATE */
/**********************************************************************/
@ -5076,9 +5108,9 @@ static int mark_chaperone_FIXUP(void *p, struct NewGC *gc) {
/**********************************************************************/
#ifdef MARKS_FOR_SYNTAX_C
#ifdef MARKS_FOR_COMPILE_C
#endif /* SYNTAX */
#endif /* COMPILE */
/**********************************************************************/
@ -5380,7 +5412,7 @@ static int mark_string_convert_FIXUP(void *p, struct NewGC *gc) {
/**********************************************************************/
#ifdef MARKS_FOR_STXOBJ_C
#ifdef MARKS_FOR_SYNTAX_C
static int mark_rename_table_SIZE(void *p, struct NewGC *gc) {
return
@ -5601,7 +5633,7 @@ static int mark_free_id_info_FIXUP(void *p, struct NewGC *gc) {
#endif /* STXOBJ */
#endif /* SYNTAX */
/**********************************************************************/

View File

@ -1175,8 +1175,16 @@ engine_val {
END engine;
/**********************************************************************/
START env;
END env;
/**********************************************************************/
START compenv;
mark_comp_env {
mark:
Scheme_Full_Comp_Env *e = (Scheme_Full_Comp_Env *)p;
@ -1206,6 +1214,12 @@ mark_comp_env {
gcBYTES_TO_WORDS(sizeof(Scheme_Full_Comp_Env));
}
END compenv;
/**********************************************************************/
START resolve;
mark_resolve_info {
mark:
Resolve_Info *i = (Resolve_Info *)p;
@ -1225,6 +1239,30 @@ mark_resolve_info {
gcBYTES_TO_WORDS(sizeof(Resolve_Info));
}
END resolve;
/**********************************************************************/
START sfs;
mark_sfs_info {
mark:
SFS_Info *i = (SFS_Info *)p;
gcMARK2(i->max_used, gc);
gcMARK2(i->max_calls, gc);
gcMARK2(i->saved, gc);
size:
gcBYTES_TO_WORDS(sizeof(SFS_Info));
}
END sfs;
/**********************************************************************/
START optimize;
mark_optimize_info {
mark:
Optimize_Info *i = (Optimize_Info *)p;
@ -1243,18 +1281,6 @@ mark_optimize_info {
gcBYTES_TO_WORDS(sizeof(Optimize_Info));
}
mark_sfs_info {
mark:
SFS_Info *i = (SFS_Info *)p;
gcMARK2(i->max_used, gc);
gcMARK2(i->max_calls, gc);
gcMARK2(i->saved, gc);
size:
gcBYTES_TO_WORDS(sizeof(SFS_Info));
}
mark_once_used {
mark:
Scheme_Once_Used *o = (Scheme_Once_Used *)p;
@ -1265,7 +1291,7 @@ mark_once_used {
gcBYTES_TO_WORDS(sizeof(Scheme_Once_Used));
}
END env;
END optimize;
/**********************************************************************/
@ -1294,6 +1320,12 @@ mark_saved_stack {
gcBYTES_TO_WORDS(sizeof(Scheme_Saved_Stack));
}
END eval;
/**********************************************************************/
START validate;
mark_validate_clearing {
mark:
Validate_Clearing *vc = (Validate_Clearing *)p;
@ -1305,7 +1337,7 @@ mark_validate_clearing {
gcBYTES_TO_WORDS(sizeof(Validate_Clearing));
}
END eval;
END validate;
/**********************************************************************/
@ -2079,9 +2111,9 @@ END struct;
/**********************************************************************/
START syntax;
START compile;
END syntax;
END compile;
/**********************************************************************/
@ -2211,7 +2243,7 @@ END string;
/**********************************************************************/
START stxobj;
START syntax;
mark_rename_table {
mark:
@ -2298,7 +2330,7 @@ mark_free_id_info {
END stxobj;
END syntax;
/**********************************************************************/

5823
src/racket/src/optimize.c Normal file

File diff suppressed because it is too large Load Diff

2908
src/racket/src/resolve.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -190,6 +190,11 @@ void scheme_init_symbol_type(Scheme_Env *env);
void scheme_init_type();
void scheme_init_custodian_extractors();
void scheme_init_bignum();
void scheme_init_compenv();
void scheme_init_optimize();
void scheme_init_resolve();
void scheme_init_sfs();
void scheme_init_validate();
void scheme_init_list(Scheme_Env *env);
void scheme_init_unsafe_list(Scheme_Env *env);
void scheme_init_stx(Scheme_Env *env);
@ -222,6 +227,7 @@ void scheme_init_symbol(Scheme_Env *env);
void scheme_init_char(Scheme_Env *env);
void scheme_init_bool(Scheme_Env *env);
void scheme_init_syntax(Scheme_Env *env);
void scheme_init_marshal(Scheme_Env *env);
void scheme_init_error(Scheme_Env *env);
#ifndef NO_SCHEME_EXNS
void scheme_init_exn(Scheme_Env *env);
@ -504,6 +510,12 @@ void scheme_zero_unneeded_rands(Scheme_Thread *p);
int scheme_can_break(Scheme_Thread *p);
# define DO_CHECK_FOR_BREAK(p, e) \
if (DECREMENT_FUEL(scheme_fuel_counter, 1) <= 0) { \
e scheme_thread_block(0); \
(p)->ran_some = 1; \
}
THREAD_LOCAL_DECL(extern int scheme_overflow_count);
#define MZTHREADELEM(p, x) scheme_ ## x
@ -1062,6 +1074,16 @@ typedef struct {
/* After array of f & args, array of chars for eval type */
} Scheme_App_Rec;
/* Lookahead types for evaluating application arguments. */
/* 4 cases + else => magic number for some compilers doing a switch? */
enum {
SCHEME_EVAL_CONSTANT = 0,
SCHEME_EVAL_GLOBAL,
SCHEME_EVAL_LOCAL,
SCHEME_EVAL_LOCAL_UNBOX,
SCHEME_EVAL_GENERAL
};
typedef struct {
Scheme_Inclhash_Object iso; /* keyex used for flags */
Scheme_Object *rator;
@ -2158,25 +2180,21 @@ typedef struct Resolve_Prefix
Scheme_Object *uses_unsafe; /* non-NULL => inspector or hashtree of inspectors for accessing #%unsafe bindings */
} Resolve_Prefix;
typedef struct Resolve_Info
{
typedef struct Resolve_Info Resolve_Info;
/* Closure_Info is used to store extra closure information
before a closure mapping is resolved. */
typedef struct {
MZTAG_IF_REQUIRED
char use_jit, in_module, in_proc, enforce_const;
int size, oldsize, count, pos;
int max_let_depth; /* filled in by sub-expressions */
Resolve_Prefix *prefix;
Scheme_Hash_Table *stx_map; /* compile offset => resolve offset; prunes prefix-recored stxes */
mzshort toplevel_pos; /* -1 means consult `next' */
void *tl_map; /* fixnum or bit array (as array of `int's) indicating which globals+lifts in prefix are used */
mzshort *old_pos;
mzshort *new_pos;
int stx_count;
mzshort *old_stx_pos; /* NULL => consult next; new pos is index in array */
int *flags;
Scheme_Object **lifted; /* maps bindings to lifts */
Scheme_Object *lifts; /* accumulates lift info */
struct Resolve_Info *next;
} Resolve_Info;
int *local_flags; /* for arguments from compile pass, flonum info updated in optimize pass */
mzshort base_closure_size; /* doesn't include top-level (if any) */
mzshort *base_closure_map;
char *flonum_map; /* NULL when has_flomap set => no flonums */
char has_tl, has_flomap, has_nonleaf;
int body_size, body_psize;
} Closure_Info;
typedef struct Optimize_Info Optimize_Info;
typedef struct Scheme_Object *
(Scheme_Syntax)(struct Scheme_Object *form, struct Scheme_Comp_Env *env,
@ -2186,41 +2204,6 @@ typedef struct Scheme_Object *
(Scheme_Syntax_Expander)(struct Scheme_Object *form, struct Scheme_Comp_Env *env,
Scheme_Expand_Info *rec, int drec);
typedef struct Scheme_Object *(*Scheme_Syntax_Resolver)(Scheme_Object *data, Resolve_Info *info);
typedef struct Optimize_Info
{
MZTAG_IF_REQUIRED
short flags;
struct Optimize_Info *next;
int original_frame, new_frame;
Scheme_Object *consts;
/* Propagated up and down the chain: */
int size, vclock, psize;
short inline_fuel;
char letrec_not_twice, enforce_const, use_psize, has_nonleaf;
Scheme_Hash_Table *top_level_consts;
/* Set by expression optimization: */
int single_result, preserves_marks; /* negative means "tentative", due to fixpoint in progress */
char **stat_dists; /* (pos, depth) => used? */
int *sd_depths;
int used_toplevel;
char *use;
int transitive_use_pos; /* set to pos + 1 when optimizing a letrec-bound procedure */
mzshort **transitive_use;
int *transitive_use_len;
Scheme_Object *context; /* for logging */
} Optimize_Info;
typedef struct Scheme_Object *(*Scheme_Syntax_Optimizer)(Scheme_Object *data, Optimize_Info *info, int context);
typedef struct Scheme_Object *(*Scheme_Syntax_Cloner)(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth);
typedef struct Scheme_Object *(*Scheme_Syntax_Shifter)(Scheme_Object *data, int delta, int after_depth);
typedef struct CPort Mz_CPort;
typedef mzshort **Validate_TLS;
@ -2366,9 +2349,38 @@ int scheme_push_marks_from_lightweight_continuation(Scheme_Lightweight_Continuat
#define scheme_get_frame_settable(f) ((f)->basic.has_set_bang)
#define scheme_get_binding(f, n) ((f)->values[n])
int scheme_is_module_begin_env(Scheme_Comp_Env *env);
Scheme_Object *scheme_make_toplevel(mzshort depth, int position, int resolved, int flags);
#define MAX_CONST_LOCAL_POS 64
#define MAX_CONST_LOCAL_TYPES 2
#define MAX_CONST_LOCAL_FLAG_VAL 3
#define SCHEME_LOCAL_FLAGS_MASK 0x3
#define MAX_CONST_TOPLEVEL_DEPTH 16
#define MAX_CONST_TOPLEVEL_POS 16
#define SCHEME_TOPLEVEL_FLAGS_MASK 0x3
#define ASSERT_IS_VARIABLE_BUCKET(b) /* if (((Scheme_Object *)b)->type != scheme_variable_type) abort() */
Scheme_Comp_Env *scheme_new_comp_env(Scheme_Env *genv, Scheme_Object *insp, int flags);
Scheme_Comp_Env *scheme_new_expand_env(Scheme_Env *genv, Scheme_Object *insp, int flags);
Scheme_Object *scheme_namespace_lookup_value(Scheme_Object *sym, Scheme_Env *genv,
Scheme_Object **_id, int *_use_map);
Scheme_Object *scheme_find_local_shadower(Scheme_Object *sym, Scheme_Object *sym_marks,
Scheme_Comp_Env *env);
Scheme_Object *scheme_do_local_lift_expr(const char *who, int stx_pos,
int argc, Scheme_Object *argv[]);
Scheme_Object *scheme_local_lift_context(Scheme_Comp_Env *env);
Scheme_Object *scheme_local_lift_end_statement(Scheme_Object *expr, Scheme_Object *local_mark,
Scheme_Comp_Env *env);
Scheme_Object *scheme_local_lift_require(Scheme_Object *form, Scheme_Object *orig_form,
intptr_t phase, Scheme_Object *local_mark,
Scheme_Comp_Env *env);
Scheme_Object *scheme_local_lift_provide(Scheme_Object *form, Scheme_Object *local_mark,
Scheme_Comp_Env *env);
void scheme_check_identifier(const char *formname, Scheme_Object *id,
const char *where,
Scheme_Comp_Env *env,
@ -2436,6 +2448,8 @@ void scheme_add_local_syntax(int cnt, Scheme_Comp_Env *env);
void scheme_set_local_syntax(int pos, Scheme_Object *name, Scheme_Object *val,
Scheme_Comp_Env *env);
Scheme_Object *scheme_clone_vector(Scheme_Object *data, int skip, int set_type);
Scheme_Object *scheme_make_closure(Scheme_Thread *p,
Scheme_Object *compiled_code,
int close);
@ -2445,6 +2459,7 @@ Scheme_Object *scheme_make_native_closure(Scheme_Native_Closure_Data *code);
Scheme_Object *scheme_make_native_case_closure(Scheme_Native_Closure_Data *code);
void scheme_reset_app2_eval_type(Scheme_App2_Rec *app);
void scheme_reset_app3_eval_type(Scheme_App3_Rec *app);
Scheme_Native_Closure_Data *scheme_generate_case_lambda(Scheme_Case_Lambda *cl);
@ -2485,7 +2500,6 @@ typedef struct SFS_Info {
SFS_Info *scheme_new_sfs_info(int depth);
Scheme_Object *scheme_sfs(Scheme_Object *expr, SFS_Info *info, int max_let_depth);
Scheme_Object *scheme_sfs_expr(Scheme_Object *expr, SFS_Info *si, int self_pos);
Scheme_Object *scheme_sfs_closure(Scheme_Object *expr, SFS_Info *si, int self_pos);
void scheme_sfs_used(SFS_Info *info, int pos);
void scheme_sfs_push(SFS_Info *info, int count, int track);
@ -2501,21 +2515,6 @@ typedef struct Scheme_Set_Bang {
Scheme_Object *var, *val;
} Scheme_Set_Bang;
/* Resolving & linking */
#define DEFINE_VALUES_EXPD 0
#define DEFINE_SYNTAX_EXPD 1
#define SET_EXPD 2
#define CASE_LAMBDA_EXPD 3
#define BEGIN0_EXPD 4
#define BOXENV_EXPD 5
#define MODULE_EXPD 6
#define REQUIRE_EXPD 7
#define DEFINE_FOR_SYNTAX_EXPD 8
#define REF_EXPD 9
#define APPVALS_EXPD 10
#define SPLICE_EXPD 11
#define _COUNT_EXPD_ 12
Scheme_Object *scheme_protect_quote(Scheme_Object *expr);
#define IS_COMPILED_PROC(vals_expr) (SAME_TYPE(SCHEME_TYPE(vals_expr), scheme_compiled_unclosed_procedure_type) \
@ -2553,25 +2552,17 @@ Resolve_Prefix *scheme_resolve_prefix(int phase, Comp_Prefix *cp, int simplify);
Resolve_Prefix *scheme_remap_prefix(Resolve_Prefix *rp, Resolve_Info *ri);
Resolve_Info *scheme_resolve_info_create(Resolve_Prefix *rp);
Resolve_Info *scheme_resolve_info_extend(Resolve_Info *info, int size, int oldsize, int mapcount);
void scheme_resolve_info_add_mapping(Resolve_Info *info, int oldp, int newp, int flags, Scheme_Object *lifted);
void scheme_resolve_info_adjust_mapping(Resolve_Info *info, int oldp, int newp, int flags, Scheme_Object *lifted);
int scheme_resolve_info_flags(Resolve_Info *info, int pos, Scheme_Object **lifted);
int scheme_resolve_info_lookup(Resolve_Info *resolve, int pos, int *flags, Scheme_Object **lifted, int convert_shift);
int scheme_optimize_info_is_ready(Optimize_Info *info, int pos);
void scheme_resolve_info_set_toplevel_pos(Resolve_Info *info, int pos);
void scheme_merge_resolve_tl_map(Resolve_Info *info, Resolve_Info *new_info);
void *scheme_merge_tl_map(void *tl_map, void *new_tl_map);
void scheme_resolve_info_enforce_const(Resolve_Info *, int enforce_const);
int scheme_resolve_info_max_let_depth(Resolve_Info *ri);
int scheme_resolve_info_use_jit(Resolve_Info *ri);
void scheme_enable_expression_resolve_lifts(Resolve_Info *ri);
Scheme_Object *scheme_merge_expression_resolve_lifts(Scheme_Object *expr, Resolve_Prefix *rp, Resolve_Info *ri);
Optimize_Info *scheme_optimize_info_create(void);
void scheme_optimize_propagate(Optimize_Info *info, int pos, Scheme_Object *value, int single_use);
Scheme_Object *scheme_optimize_info_lookup(Optimize_Info *info, int pos, int *closure_offset, int *single_use,
int once_used_ok, int context, int *potential_size);
void scheme_optimize_info_used_top(Optimize_Info *info);
void scheme_optimize_info_enforce_const(Optimize_Info *, int enforce_const);
void scheme_optimize_info_set_context(Optimize_Info *, Scheme_Object *ctx);
void scheme_optimize_info_never_inline(Optimize_Info *);
/* Controls for inlining algorithm: */
#define OPT_ESTIMATE_FUTURE_SIZES 1
@ -2582,73 +2573,21 @@ void scheme_optimize_info_used_top(Optimize_Info *info);
Scheme_Object *scheme_estimate_closure_size(Scheme_Object *e);
Scheme_Object *scheme_no_potential_size(Scheme_Object *value);
void scheme_optimize_mutated(Optimize_Info *info, int pos);
void scheme_optimize_produces_flonum(Optimize_Info *info, int pos);
Scheme_Object *scheme_optimize_reverse(Optimize_Info *info, int pos, int unless_mutated);
int scheme_optimize_is_used(Optimize_Info *info, int pos);
int scheme_optimize_any_uses(Optimize_Info *info, int start_pos, int end_pos);
int scheme_optimize_is_mutated(Optimize_Info *info, int pos);
int scheme_optimize_is_flonum_arg(Optimize_Info *info, int pos, int depth);
int scheme_optimize_is_flonum_valued(Optimize_Info *info, int pos);
int scheme_is_flonum_expression(Scheme_Object *expr, Optimize_Info *info);
char *scheme_get_closure_flonum_map(Scheme_Closure_Data *data, int arg_n, int *ok);
void scheme_set_closure_flonum_map(Scheme_Closure_Data *data, char *flonum_map);
void scheme_merge_closure_flonum_map(Scheme_Closure_Data *data1, Scheme_Closure_Data *data2);
Scheme_Object *scheme_optimize_clone(int dup_ok, Scheme_Object *obj, Optimize_Info *info, int delta, int closure_depth);
Scheme_Object *scheme_optimize_shift(Scheme_Object *obj, int delta, int after_depth);
Scheme_Object *scheme_clone_closure_compilation(int dup_ok, Scheme_Object *obj, Optimize_Info *info, int delta, int closure_depth);
Scheme_Object *scheme_shift_closure_compilation(Scheme_Object *obj, int delta, int after_depth);
int scheme_closure_body_size(Scheme_Closure_Data *closure_data, int check_assign, Optimize_Info *info, int *is_leaf);
int scheme_closure_argument_flags(Scheme_Closure_Data *closure_data, int i);
int scheme_closure_has_top_level(Scheme_Closure_Data *data);
Optimize_Info *scheme_optimize_info_add_frame(Optimize_Info *info, int orig, int current, int flags);
int scheme_optimize_info_get_shift(Optimize_Info *info, int pos);
void scheme_optimize_info_done(Optimize_Info *info);
Scheme_Object *scheme_toplevel_to_flagged_toplevel(Scheme_Object *tl, int flags);
void scheme_env_make_closure_map(Optimize_Info *frame, mzshort *size, mzshort **map);
int scheme_env_uses_toplevel(Optimize_Info *frame);
int scheme_wants_flonum_arguments(Scheme_Object *rator, int argpos, int rotate_mode);
int scheme_expr_produces_flonum(Scheme_Object *expr);
typedef struct Scheme_Once_Used {
Scheme_Object so;
Scheme_Object *expr;
int pos;
int vclock;
int used;
int delta;
Optimize_Info *info;
struct Scheme_Once_Used *next;
} Scheme_Once_Used;
Scheme_Once_Used *scheme_make_once_used(Scheme_Object *val, int pos, int vclock, Scheme_Once_Used *prev);
int scheme_resolve_toplevel_pos(Resolve_Info *info);
int scheme_resolve_is_toplevel_available(Resolve_Info *info);
int scheme_resolve_quote_syntax_offset(int i, Resolve_Info *info);
int scheme_resolve_quote_syntax_pos(Resolve_Info *info);
Scheme_Object *scheme_resolve_toplevel(Resolve_Info *info, Scheme_Object *expr, int keep_ready);
Scheme_Object *scheme_resolve_invent_toplevel(Resolve_Info *info);
Scheme_Object *scheme_resolve_invented_toplevel_to_defn(Resolve_Info *info, Scheme_Object *tl);
Scheme_Object *scheme_shift_toplevel(Scheme_Object *expr, int delta);
Scheme_Object *scheme_resolve_generate_stub_lift(void);
int scheme_resolve_quote_syntax(Resolve_Info *info, int oldpos);
int scheme_resolving_in_procedure(Resolve_Info *info);
void scheme_resolve_lift_definition(Resolve_Info *info, Scheme_Object *var, Scheme_Object *rhs);
Scheme_Object *scheme_make_compiled_syntax(Scheme_Syntax *syntax,
Scheme_Syntax_Expander *exp);
Scheme_Object *scheme_compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env,
Scheme_Compile_Expand_Info *rec, int drec,
int app_position);
Scheme_Object *scheme_compile_expr(Scheme_Object *form, Scheme_Comp_Env *env,
Scheme_Compile_Info *rec, int drec);
Scheme_Object *scheme_compile_sequence(Scheme_Object *forms, Scheme_Comp_Env *env,
@ -2663,6 +2602,13 @@ Scheme_Object *scheme_compile_list(Scheme_Object *form, Scheme_Comp_Env *env,
Scheme_Object *scheme_compile_expr_lift_to_let(Scheme_Object *form, Scheme_Comp_Env *env,
Scheme_Compile_Info *rec, int drec);
Scheme_Object *scheme_pair_lifted(Scheme_Object *_ip, Scheme_Object **_ids, Scheme_Object *expr,
Scheme_Comp_Env *env);
Scheme_Object *scheme_add_lifts_as_let(Scheme_Object *obj, Scheme_Object *l, Scheme_Comp_Env *env,
Scheme_Object *orig_form, int comp_rev);
void scheme_add_core_stop_form(int pos, Scheme_Object *sym, Scheme_Comp_Env *env);
void scheme_default_compile_rec(Scheme_Compile_Info *src, int drec);
void scheme_compile_rec_done_local(Scheme_Compile_Info *src, int drec);
void scheme_init_compile_recs(Scheme_Compile_Info *src, int drec,
@ -2680,20 +2626,14 @@ void scheme_init_expand_recs(Scheme_Expand_Info *src, int drec,
void scheme_rec_add_certs(Scheme_Compile_Expand_Info *src, int drec, Scheme_Object *stx);
Scheme_Object *scheme_make_closure_compilation(Scheme_Comp_Env *env,
Scheme_Object *uncompiled_code,
Scheme_Compile_Info *rec, int drec);
Scheme_Object *scheme_make_sequence_compilation(Scheme_Object *compiled_list,
int strip_values);
Scheme_Object *scheme_optimize_closure_compilation(Scheme_Object *_data, Optimize_Info *info, int context);
Scheme_Object *scheme_resolve_closure_compilation(Scheme_Object *_data, Resolve_Info *info,
int can_lift, int convert, int just_compute_lift,
Scheme_Object *precomputed_lift);
Scheme_App_Rec *scheme_malloc_application(int n);
void scheme_finish_application(Scheme_App_Rec *app);
Scheme_Sequence *scheme_malloc_sequence(int count);
Scheme_Object *scheme_jit_expr(Scheme_Object *);
Scheme_Object *scheme_jit_closure(Scheme_Object *, Scheme_Object *context);
void scheme_jit_fill_threadlocal_table();
@ -2810,11 +2750,16 @@ int scheme_used_ever(Scheme_Comp_Env *env, int which);
int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int resolved,
Optimize_Info *warn_info, int deeper_than);
int scheme_might_invoke_call_cc(Scheme_Object *value);
int scheme_is_liftable(Scheme_Object *o, int bind_count, int fuel, int as_rator);
int scheme_is_env_variable_boxed(Scheme_Comp_Env *env, int which);
int scheme_get_eval_type(Scheme_Object *obj);
Scheme_Object *scheme_make_application(Scheme_Object *v);
Scheme_Object *scheme_try_apply(Scheme_Object *f, Scheme_Object *args, Scheme_Object *context);
Scheme_Object *scheme_get_stop_expander(void);
void scheme_define_parse(Scheme_Object *form,
@ -2853,13 +2798,6 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr,
Scheme_Object *app_rator, int proc_with_refs_ok,
int result_ignored, struct Validate_Clearing *vc,
int tailpos, int need_flonum, Scheme_Hash_Tree *procs);
void scheme_validate_toplevel(Scheme_Object *expr, Mz_CPort *port,
char *stack, Validate_TLS tls,
int depth, int delta,
int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map,
int skip_refs_check);
void scheme_validate_boxenv(int pos, Mz_CPort *port,
char *stack, int depth, int delta, int letlimit);
int scheme_validate_rator_wants_box(Scheme_Object *app_rator, int pos,
int hope,
@ -2936,152 +2874,12 @@ Scheme_Object *scheme_rename_transformer_id(Scheme_Object *o);
int scheme_is_set_transformer(Scheme_Object *o);
Scheme_Object *scheme_set_transformer_proc(Scheme_Object *o);
Scheme_Object *scheme_define_values_execute(Scheme_Object *data);
Scheme_Object *scheme_ref_execute(Scheme_Object *data);
Scheme_Object *scheme_set_execute(Scheme_Object *data);
Scheme_Object *scheme_define_syntaxes_execute(Scheme_Object *expr);
Scheme_Object *scheme_define_for_syntaxes_execute(Scheme_Object *expr);
Scheme_Object *scheme_case_lambda_execute(Scheme_Object *expr);
Scheme_Object *scheme_begin0_execute(Scheme_Object *data);
Scheme_Object *scheme_apply_values_execute(Scheme_Object *data);
Scheme_Object *scheme_splice_execute(Scheme_Object *data);
Scheme_Object *scheme_bangboxenv_execute(Scheme_Object *data);
Scheme_Object *scheme_top_level_require_execute(Scheme_Object *data);
Scheme_Object *scheme_case_lambda_execute(Scheme_Object *expr);
Scheme_Object *scheme_define_values_optimize(Scheme_Object *data, Optimize_Info *info, int context);
Scheme_Object *scheme_ref_optimize(Scheme_Object *data, Optimize_Info *info, int context);
Scheme_Object *scheme_set_optimize(Scheme_Object *data, Optimize_Info *info, int context);
Scheme_Object *scheme_define_syntaxes_optimize(Scheme_Object *expr, Optimize_Info *info, int context);
Scheme_Object *scheme_define_for_syntaxes_optimize(Scheme_Object *expr, Optimize_Info *info, int context);
Scheme_Object *scheme_case_lambda_optimize(Scheme_Object *expr, Optimize_Info *info, int context);
Scheme_Object *scheme_begin0_optimize(Scheme_Object *data, Optimize_Info *info, int context);
Scheme_Object *scheme_apply_values_optimize(Scheme_Object *data, Optimize_Info *info, int context);
Scheme_Object *scheme_module_optimize(Scheme_Object *data, Optimize_Info *info, int context);
Scheme_Object *scheme_top_level_require_optimize(Scheme_Object *data, Optimize_Info *info, int context);
Scheme_Object *scheme_begin0_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth);
Scheme_Object *scheme_set_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth);
Scheme_Object *scheme_apply_values_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth);
Scheme_Object *scheme_case_lambda_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth);
Scheme_Object *scheme_begin0_shift(Scheme_Object *data, int delta, int after_depth);
Scheme_Object *scheme_set_shift(Scheme_Object *data, int delta, int after_depth);
Scheme_Object *scheme_ref_shift(Scheme_Object *data, int delta, int after_depth);
Scheme_Object *scheme_case_lambda_shift(Scheme_Object *data, int delta, int after_depth);
Scheme_Object *scheme_apply_values_shift(Scheme_Object *data, int delta, int after_depth);
Scheme_Object *scheme_define_values_resolve(Scheme_Object *data, Resolve_Info *info);
Scheme_Object *scheme_ref_resolve(Scheme_Object *data, Resolve_Info *info);
Scheme_Object *scheme_set_resolve(Scheme_Object *data, Resolve_Info *info);
Scheme_Object *scheme_define_syntaxes_resolve(Scheme_Object *expr, Resolve_Info *info);
Scheme_Object *scheme_define_for_syntaxes_resolve(Scheme_Object *expr, Resolve_Info *info);
Scheme_Object *scheme_case_lambda_resolve(Scheme_Object *expr, Resolve_Info *info);
Scheme_Object *scheme_begin0_resolve(Scheme_Object *data, Resolve_Info *info);
Scheme_Object *scheme_apply_values_resolve(Scheme_Object *data, Resolve_Info *info);
Scheme_Object *scheme_module_expr_resolve(Scheme_Object *data, Resolve_Info *info);
Scheme_Object *scheme_top_level_require_resolve(Scheme_Object *data, Resolve_Info *info);
Scheme_Object *scheme_define_values_sfs(Scheme_Object *data, SFS_Info *info);
Scheme_Object *scheme_ref_sfs(Scheme_Object *data, SFS_Info *info);
Scheme_Object *scheme_set_sfs(Scheme_Object *data, SFS_Info *info);
Scheme_Object *scheme_define_syntaxes_sfs(Scheme_Object *expr, SFS_Info *info);
Scheme_Object *scheme_define_for_syntaxes_sfs(Scheme_Object *expr, SFS_Info *info);
Scheme_Object *scheme_case_lambda_sfs(Scheme_Object *expr, SFS_Info *info);
Scheme_Object *scheme_begin0_sfs(Scheme_Object *data, SFS_Info *info);
Scheme_Object *scheme_apply_values_sfs(Scheme_Object *data, SFS_Info *info);
Scheme_Object *scheme_bangboxenv_sfs(Scheme_Object *data, SFS_Info *info);
Scheme_Object *scheme_module_sfs(Scheme_Object *data, SFS_Info *info);
Scheme_Object *scheme_top_level_require_sfs(Scheme_Object *data, SFS_Info *info);
void scheme_define_values_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls,
int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts,
void *tl_use_map, int result_ignored,
struct Validate_Clearing *vc, int tailpos,
Scheme_Hash_Tree *procs);
void scheme_ref_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls,
int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts,
void *tl_use_map, int result_ignored,
struct Validate_Clearing *vc, int tailpos,
Scheme_Hash_Tree *procs);
void scheme_set_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls,
int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts,
void *tl_use_map, int result_ignored,
struct Validate_Clearing *vc, int tailpos,
Scheme_Hash_Tree *procs);
void scheme_define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls,
int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts,
void *tl_use_map, int result_ignored,
struct Validate_Clearing *vc, int tailpos,
Scheme_Hash_Tree *procs);
void scheme_define_for_syntaxes_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls,
int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts,
void *tl_use_map, int result_ignored,
struct Validate_Clearing *vc, int tailpos,
Scheme_Hash_Tree *procs);
void scheme_case_lambda_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls,
int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts,
void *tl_use_map, int result_ignored,
struct Validate_Clearing *vc, int tailpos,
Scheme_Hash_Tree *procs);
void scheme_begin0_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls,
int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts,
void *tl_use_map, int result_ignored,
struct Validate_Clearing *vc, int tailpos,
Scheme_Hash_Tree *procs);
void scheme_apply_values_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls,
int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts,
void *tl_use_map, int result_ignored,
struct Validate_Clearing *vc, int tailpos,
Scheme_Hash_Tree *procs);
void scheme_bangboxenv_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls,
int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts,
void *tl_use_map, int result_ignored,
struct Validate_Clearing *vc, int tailpos,
Scheme_Hash_Tree *procs);
void scheme_module_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls,
int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts,
void *tl_use_map, int result_ignored,
struct Validate_Clearing *vc, int tailpos,
Scheme_Hash_Tree *procs);
void scheme_top_level_require_validate(Scheme_Object *data, Mz_CPort *port,
char *stack, Validate_TLS tls,
int depth, int letlimit, int delta,
int num_toplevels, int num_stxes, int num_lifts,
void *tl_use_map, int result_ignored,
struct Validate_Clearing *vc, int tailpos,
Scheme_Hash_Tree *procs);
Scheme_Object *scheme_define_values_jit(Scheme_Object *data);
Scheme_Object *scheme_ref_jit(Scheme_Object *data);
Scheme_Object *scheme_set_jit(Scheme_Object *data);
Scheme_Object *scheme_define_syntaxes_jit(Scheme_Object *expr);
Scheme_Object *scheme_define_for_syntaxes_jit(Scheme_Object *expr);
Scheme_Object *scheme_case_lambda_jit(Scheme_Object *expr);
Scheme_Object *scheme_begin0_jit(Scheme_Object *data);
Scheme_Object *scheme_apply_values_jit(Scheme_Object *data);
Scheme_Object *scheme_bangboxenv_jit(Scheme_Object *data);
Scheme_Object *scheme_module_jit(Scheme_Object *data);
Scheme_Object *scheme_top_level_require_jit(Scheme_Object *data);
Scheme_Object *scheme_case_lambda_jit(Scheme_Object *expr);
/*========================================================================*/
/* namespaces and modules */
@ -3306,6 +3104,8 @@ void scheme_module_force_lazy(Scheme_Env *env, int previous);
int scheme_module_export_position(Scheme_Object *modname, Scheme_Env *env, Scheme_Object *varname);
Scheme_Module_Exports *scheme_make_module_exports();
Scheme_Object *scheme_check_accessible_in_module(Scheme_Env *env, Scheme_Object *prot_insp, Scheme_Object *in_modidx,
Scheme_Object *symbol, Scheme_Object *stx,
Scheme_Object *certs, Scheme_Object *unexp_insp,

1272
src/racket/src/sfs.c Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1563
src/racket/src/validate.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -32,6 +32,8 @@
"bool"
"builtin"
"char"
"compenv"
"compile"
"complex"
"dynext"
"env"
@ -47,9 +49,11 @@
"jitcall"
"jitcommon"
"jitinline"
"jitprep"
"jitstack"
"jitstate"
"list"
"marshal"
"module"
"mzrt"
"network"
@ -57,22 +61,25 @@
"number"
"numcomp"
"numstr"
"places"
"optimize"
"place"
"port"
"portfun"
"print"
"rational"
"read"
"regexp"
"resolve"
"sema"
"setjmpup"
"sfs"
"string"
"struct"
"symbol"
"syntax"
"stxobj"
"thread"
"type"
"validate"
"vector"))
(define common-cpp-defs " /D _CRT_SECURE_NO_DEPRECATE /D _USE_DECLSPECS_FOR_SAL=0 /D _USE_ATTRIBUTES_FOR_SAL=0 ")

View File

@ -561,6 +561,14 @@
RelativePath="..\..\Racket\Src\Char.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\Compenv.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\Compile.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\Complex.c"
>
@ -629,6 +637,10 @@
RelativePath="..\..\Racket\Src\jitinline.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\jitprep.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\jitstack.c"
>
@ -645,6 +657,10 @@
RelativePath="..\..\Racket\Src\module.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\marshal.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\mzrt.c"
>
@ -674,7 +690,11 @@
>
</File>
<File
RelativePath="..\..\Racket\Src\places.c"
RelativePath="..\..\Racket\Src\optimize.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\place.c"
>
</File>
<File
@ -701,6 +721,10 @@
RelativePath="..\..\Racket\Src\Regexp.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\resolve.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\Salloc.c"
>
@ -713,6 +737,10 @@
RelativePath="..\..\Racket\Src\Setjmpup.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\sfs.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\String.c"
>
@ -721,10 +749,6 @@
RelativePath="..\..\Racket\Src\Struct.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\stxobj.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\Symbol.c"
>
@ -741,6 +765,10 @@
RelativePath="..\..\Racket\Src\Type.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\validate.c"
>
</File>
<File
RelativePath="..\..\Racket\Src\vector.c"
>

View File

@ -187,6 +187,8 @@
<ClCompile Include="..\..\Racket\Src\Bool.c" />
<ClCompile Include="..\..\Racket\Src\builtin.c" />
<ClCompile Include="..\..\Racket\Src\Char.c" />
<ClCompile Include="..\..\Racket\Src\Compenv.c" />
<ClCompile Include="..\..\Racket\Src\Compile.c" />
<ClCompile Include="..\..\Racket\Src\Complex.c" />
<ClCompile Include="..\..\Racket\Src\Dynext.c" />
<ClCompile Include="..\..\Racket\Src\Env.c" />
@ -204,9 +206,11 @@
<ClCompile Include="..\..\Racket\Src\jitcall.c" />
<ClCompile Include="..\..\Racket\Src\jitcommon.c" />
<ClCompile Include="..\..\Racket\Src\jitinline.c" />
<ClCompile Include="..\..\Racket\Src\jitprep.c" />
<ClCompile Include="..\..\Racket\Src\jitstack.c" />
<ClCompile Include="..\..\Racket\Src\jitstate.c" />
<ClCompile Include="..\..\Racket\Src\List.c" />
<ClCompile Include="..\..\Racket\Src\marshal.c" />
<ClCompile Include="..\..\Racket\Src\module.c" />
<ClCompile Include="..\..\Racket\Src\mzrt.c" />
<ClCompile Include="..\..\Racket\Src\mzsj86.c" />
@ -215,23 +219,26 @@
<ClCompile Include="..\..\Racket\Src\Number.c" />
<ClCompile Include="..\..\Racket\Src\numcomp.c" />
<ClCompile Include="..\..\Racket\Src\numstr.c" />
<ClCompile Include="..\..\Racket\Src\places.c" />
<ClCompile Include="..\..\Racket\Src\optimize.c" />
<ClCompile Include="..\..\Racket\Src\place.c" />
<ClCompile Include="..\..\Racket\Src\Port.c" />
<ClCompile Include="..\..\Racket\Src\portfun.c" />
<ClCompile Include="..\..\Racket\Src\Print.c" />
<ClCompile Include="..\..\Racket\Src\Rational.c" />
<ClCompile Include="..\..\Racket\Src\Read.c" />
<ClCompile Include="..\..\Racket\Src\Regexp.c" />
<ClCompile Include="..\..\Racket\Src\resolve.c" />
<ClCompile Include="..\..\Racket\Src\Salloc.c" />
<ClCompile Include="..\..\Racket\Src\Sema.c" />
<ClCompile Include="..\..\Racket\Src\Setjmpup.c" />
<ClCompile Include="..\..\Racket\Src\sfs.c" />
<ClCompile Include="..\..\Racket\Src\String.c" />
<ClCompile Include="..\..\Racket\Src\Struct.c" />
<ClCompile Include="..\..\Racket\Src\stxobj.c" />
<ClCompile Include="..\..\Racket\Src\Symbol.c" />
<ClCompile Include="..\..\Racket\Src\Syntax.c" />
<ClCompile Include="..\..\Racket\Src\thread.c" />
<ClCompile Include="..\..\Racket\Src\Type.c" />
<ClCompile Include="..\..\Racket\Src\validate.c" />
<ClCompile Include="..\..\Racket\Src\vector.c" />
</ItemGroup>
<ItemGroup>