Merge ../ChezScheme-vfasl
original commit: 78ba118cbde76dd42bc4275ccc76219e159e04d7
This commit is contained in:
commit
ed1d5c982d
|
@ -11,8 +11,10 @@ matrix:
|
||||||
env: TARGET_MACHINE=ta6osx
|
env: TARGET_MACHINE=ta6osx
|
||||||
- os: linux
|
- os: linux
|
||||||
env: TARGET_MACHINE=i3le
|
env: TARGET_MACHINE=i3le
|
||||||
|
sudo: required
|
||||||
- os: linux
|
- os: linux
|
||||||
env: TARGET_MACHINE=ti3le
|
env: TARGET_MACHINE=ti3le
|
||||||
|
sudo: required
|
||||||
- os: linux
|
- os: linux
|
||||||
env: TARGET_MACHINE=a6le
|
env: TARGET_MACHINE=a6le
|
||||||
- os: linux
|
- os: linux
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
case $TARGET_MACHINE in
|
||||||
|
*i3le) sudo apt-get -yq --no-install-suggests --no-install-recommends install uuid-dev:i386 ;;
|
||||||
|
*)
|
||||||
|
esac
|
||||||
./configure -m=$TARGET_MACHINE
|
./configure -m=$TARGET_MACHINE
|
||||||
exitcode=$?
|
exitcode=$?
|
||||||
if [ $exitcode -ne 0 ] ; then
|
if [ $exitcode -ne 0 ] ; then
|
||||||
|
|
25
BUILDING
25
BUILDING
|
@ -42,6 +42,11 @@ Prerequisites:
|
||||||
* gcc
|
* gcc
|
||||||
* Header files and libraries for ncurses
|
* Header files and libraries for ncurses
|
||||||
* Header files and libraries for X windows
|
* Header files and libraries for X windows
|
||||||
|
* Header files and libraries for uuid
|
||||||
|
|
||||||
|
Uninstalling on Unix-like systems is as simple as running:
|
||||||
|
|
||||||
|
sudo make uninstall
|
||||||
|
|
||||||
BUILDING VERSION 9.5 AND EARLIER
|
BUILDING VERSION 9.5 AND EARLIER
|
||||||
|
|
||||||
|
@ -129,9 +134,12 @@ The make file supports several targets:
|
||||||
is overridden via an argument to ./configure, $W is the same as $M.)
|
is overridden via an argument to ./configure, $W is the same as $M.)
|
||||||
|
|
||||||
'sudo make install'
|
'sudo make install'
|
||||||
runs the build plus installs the resulting executable, boot files,
|
runs the build plus installs the resulting executables, boot files,
|
||||||
example files, and manual pages.
|
example files, and manual pages.
|
||||||
|
|
||||||
|
'sudo make uninstall'
|
||||||
|
uninstalls the executables, boot files, example files, and manual pages.
|
||||||
|
|
||||||
'make test'
|
'make test'
|
||||||
runs the build plus runs a set of test programs in various different
|
runs the build plus runs a set of test programs in various different
|
||||||
ways, e.g., with different compiler options. It can take 30 minutes
|
ways, e.g., with different compiler options. It can take 30 minutes
|
||||||
|
@ -185,20 +193,23 @@ The make file supports several targets:
|
||||||
WINDOWS
|
WINDOWS
|
||||||
|
|
||||||
Building Chez Scheme under 64-bit Windows with Cygwin or Bash/WSL
|
Building Chez Scheme under 64-bit Windows with Cygwin or Bash/WSL
|
||||||
follows the instructions above, except that 'make install' is not
|
follows the instructions above, except that 'make install' and 'make
|
||||||
supported, and the 'OS' environment variable must be set to
|
uninstall' are not supported. On Bash/WSL, the build directory must be
|
||||||
'Windows_NT' on Bash/WSL (to indicate a build for Windows, as opposed
|
in a location with a Windows path such as /mnt/c, and the 'OS'
|
||||||
to a build for Linux on Windows):
|
environment variable must be set to 'Windows_NT' to indicate a build
|
||||||
|
for Windows, as opposed to a build for Linux on Windows:
|
||||||
|
|
||||||
env OS=Windows_NT ./configure
|
env OS=Windows_NT ./configure
|
||||||
env OS=Windows_NT make
|
env OS=Windows_NT make
|
||||||
|
|
||||||
Prerequisites:
|
Prerequisites:
|
||||||
|
|
||||||
* Cygwin or Bash/WSL with bash, grep, make, sed, etc.
|
* Cygwin or Bash/WSL with bash, git, grep, make, sed, etc.
|
||||||
* Microsoft Visual Studio 2017 or 2015
|
* Microsoft Visual Studio 2017 or 2015
|
||||||
* WiX Toolset (for making an install)
|
* WiX Toolset (for making an install)
|
||||||
|
|
||||||
|
Be sure that git config core.autocrlf is set to false.
|
||||||
|
|
||||||
To run Chez Scheme or Petite Chez Scheme from a Windows command prompt,
|
To run Chez Scheme or Petite Chez Scheme from a Windows command prompt,
|
||||||
set PATH:
|
set PATH:
|
||||||
|
|
||||||
|
@ -221,7 +232,7 @@ make
|
||||||
|
|
||||||
This will create workareas and compile binaries for the a6nt, i3nt,
|
This will create workareas and compile binaries for the a6nt, i3nt,
|
||||||
ta6nt, and ti3nt configurations and then include them in a single
|
ta6nt, and ti3nt configurations and then include them in a single
|
||||||
Windows installer package Chez Scheme.msi. The package also includes
|
Windows installer package Chez Scheme.exe. The package also includes
|
||||||
example files and the redistributable Microsoft Visual C++ run-time
|
example files and the redistributable Microsoft Visual C++ run-time
|
||||||
libraries.
|
libraries.
|
||||||
|
|
||||||
|
|
54
LOG
54
LOG
|
@ -997,33 +997,47 @@
|
||||||
whose base and/or index is a local save.
|
whose base and/or index is a local save.
|
||||||
cpnanopass.ss,
|
cpnanopass.ss,
|
||||||
misc.ms
|
misc.ms
|
||||||
|
- flush expand-output and expand/optimize-output ports
|
||||||
|
compile.ss
|
||||||
|
- clarify "unknown module" error message in determine-module-imports
|
||||||
|
syntax.ss
|
||||||
|
- restore the import code on reset to provide consistent error message
|
||||||
|
syntax.ss, 8.ms
|
||||||
|
- add uninstall target
|
||||||
|
Makefile.in, Makefile-workarea.in, Mf-install.in
|
||||||
|
- add PDB files for Windows
|
||||||
|
c/*nt, wininstall/*nt.wxs
|
||||||
|
- use uuid_generate on unix-like systems for S_unique_id
|
||||||
|
BUILDING, c/Mf-*le, stats.c, objects.stex, release_notes.stex
|
||||||
|
- when thread_get_room exhausts the local allocation area, it now
|
||||||
|
goes through a common path with S_get_more_room to allocate a new
|
||||||
|
local allocation area when appropriate. this can greatly reduce
|
||||||
|
the use of global allocation (and the number of tc mutex acquires
|
||||||
|
in threaded builds) when a lot of small objects are allocated by
|
||||||
|
C code with no intervening Scheme-side allocation or dirty writes.
|
||||||
|
alloc.c, types.h, externs.h
|
||||||
|
- made Windows filename handling in directory-list, file-access-time,
|
||||||
|
file-change-time, file-directory?, file-exists?, file-modification-time,
|
||||||
|
get-mode, and path-absolute more consistent with
|
||||||
|
https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file
|
||||||
|
6.ss, 6.ms, io.stex, release_notes.stex
|
||||||
|
- fix handling of calling code's address for locking around a callable,
|
||||||
|
where the cp register copy in the thread context could be changed
|
||||||
|
in the callable prep before S_call_help gets it
|
||||||
|
cpnanopass.ss, x86_64.ss, x86.ss, foreign2.c, foreign.ms
|
||||||
|
- added initialization of seginfo sorted and trigger_ephemerons fields.
|
||||||
|
segment.c
|
||||||
- add ordered guardians through a new optional argument to make-guardian
|
- add ordered guardians through a new optional argument to make-guardian
|
||||||
prims.ss, primdata.ss, cp0.ss, cpnanopass.ss,
|
prims.ss, primdata.ss, cp0.ss, cpnanopass.ss,
|
||||||
cmacros.ss, mkheader.ss, gc.c, segment.c, types.h,
|
cmacros.ss, mkheader.ss, gc.c, segment.c, types.h,
|
||||||
4.ms, smgmt.stex, release_notes.stex
|
4.ms, smgmt.stex, release_notes.stex
|
||||||
|
- add make-arity-wrapper
|
||||||
|
cmacros.ss, cpnanopass.ss, interpret.ss, library.ss,
|
||||||
|
primdata.ss, prims.ss, gc.c, objects.stex, release_notes.stex
|
||||||
|
misc.ms, mats/patch*, mats/root*
|
||||||
- add object-backreferences and enable-object-backreferences as an aid
|
- add object-backreferences and enable-object-backreferences as an aid
|
||||||
to debugging memory leaks
|
to debugging memory leaks
|
||||||
back.ss, cmacros.ss, inspect.ss, primdata.ss,
|
back.ss, cmacros.ss, inspect.ss, primdata.ss,
|
||||||
gc-oce.c, gc.c, gcwrapper.c, prim.c, scheme.c,
|
gc-oce.c, gc.c, gcwrapper.c, prim.c, scheme.c,
|
||||||
globals.h, externs.h,
|
globals.h, externs.h,
|
||||||
system.stex, 7.ms
|
system.stex, 7.ms
|
||||||
- add make-arity-wrapper
|
|
||||||
cmacros.ss, cpnanopass.ss, interpret.ss, library.ss,
|
|
||||||
primdata.ss, prims.ss, gc.c, objects.stex, release_notes.stex
|
|
||||||
misc.ms, mats/patch*, mats/root*
|
|
||||||
- add current-generate-id and expand-omit-library-invocations, which can be
|
|
||||||
useful for avoiding library recompilation and redundant invocation checks
|
|
||||||
syntax.ss, record.ss, primdata.ss, front.ss, misc.ms, system.stex
|
|
||||||
- add support for continuation attachments
|
|
||||||
cpnanopass.ss, np-languages.ss, 4.ss, prims.ss, inspect.ss,
|
|
||||||
cmacro.ss, primdata.ss, library.ss types.ss, mkheader.ss,
|
|
||||||
alloc.c, gc.c, schsig.c, thread.c, externs.h,
|
|
||||||
4.ms, control.stex, release_notes.stex
|
|
||||||
- add hashtable-cells
|
|
||||||
newhash.ss, primdata.ss,
|
|
||||||
hash.ms, root-experr*,
|
|
||||||
objects.stex, release_notes.stex
|
|
||||||
- fix handling of calling code's address for locking around a callable,
|
|
||||||
where the cp register copy in the thread context could be changed
|
|
||||||
in the callable prep before S_call_help gets it
|
|
||||||
cpnanopass.ss, x86_64.ss, x86.ss, foreign2.c, foreign.ms
|
|
||||||
|
|
|
@ -28,20 +28,18 @@ MDMain = ..\boot\$m\mainmd.obj
|
||||||
ResFile = ..\boot\$m\scheme.res
|
ResFile = ..\boot\$m\scheme.res
|
||||||
|
|
||||||
# We use MD so that we can link with and load DLLs built against msvcrxxx.dll
|
# We use MD so that we can link with and load DLLs built against msvcrxxx.dll
|
||||||
CFLAGS=/nologo /Ox /W3 /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS
|
CFLAGS=/nologo /Ox /W3 /Zi /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS
|
||||||
MDCFLAGS=$(CFLAGS) /MD
|
MDCFLAGS=$(CFLAGS) /MD
|
||||||
MTCFLAGS=$(CFLAGS) /MT
|
MTCFLAGS=$(CFLAGS) /MT
|
||||||
DLLLDFLAGS=/machine:X64 /release /nologo
|
DLLLDFLAGS=/debug:full /machine:X64 /nologo
|
||||||
# stack limit is 1MB by default. this is not enough for one of the mats in foreign.ms, which
|
# stack limit is 1MB by default. this is not enough for one of the mats in foreign.ms, which
|
||||||
# builds up nested C & Scheme stack frames. 2MB seems to be enough, but we set to 16MB.
|
# builds up nested C & Scheme stack frames. 2MB seems to be enough, but we set to 16MB.
|
||||||
EXELDFLAGS=/machine:X64 /incremental:no /release /nologo /STACK:0x1000000
|
EXELDFLAGS=/debug:full /machine:X64 /incremental:no /nologo /STACK:0x1000000
|
||||||
|
|
||||||
# use following flags for debugging
|
# use following flags for debugging
|
||||||
# CFLAGS=/nologo /Od /W3 /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS
|
# CFLAGS=/nologo /Od /W3 /Zi /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS
|
||||||
# MDCFLAGS=$(CFLAGS) /Zi /MDd
|
# MDCFLAGS=$(CFLAGS) /MDd
|
||||||
# MTCFLAGS=$(CFLAGS) /Zi /MTd
|
# MTCFLAGS=$(CFLAGS) /MTd
|
||||||
# DLLLDFLAGS=/machine:X64 /debug /nologo /nodefaultlib:msvcrt
|
|
||||||
# EXELDFLAGS=/machine:X64 /incremental:no /debug /nologo /STACK:0x1000000
|
|
||||||
|
|
||||||
SystemLib=rpcrt4.lib ole32.lib advapi32.lib User32.lib
|
SystemLib=rpcrt4.lib ole32.lib advapi32.lib User32.lib
|
||||||
MDZlibLib=..\zlib\zlib.lib
|
MDZlibLib=..\zlib\zlib.lib
|
||||||
|
|
|
@ -28,16 +28,17 @@ MDMain = ..\boot\$m\mainmd.obj
|
||||||
ResFile = ..\boot\$m\scheme.res
|
ResFile = ..\boot\$m\scheme.res
|
||||||
|
|
||||||
# We use MD so that we can link with and load DLLs built against msvcrxxx.dll
|
# We use MD so that we can link with and load DLLs built against msvcrxxx.dll
|
||||||
CFLAGS=/nologo /fp:precise /Ox /W3 /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DI386 /DWIN32 /D_CRT_SECURE_NO_WARNINGS
|
CFLAGS=/nologo /fp:precise /Ox /W3 /Zi /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DI386 /DWIN32 /D_CRT_SECURE_NO_WARNINGS
|
||||||
MDCFLAGS=$(CFLAGS) /MD
|
MDCFLAGS=$(CFLAGS) /MD
|
||||||
MTCFLAGS=$(CFLAGS) /MT
|
MTCFLAGS=$(CFLAGS) /MT
|
||||||
DLLLDFLAGS=/machine:ix86 /release /nologo
|
DLLLDFLAGS=/debug:full /machine:ix86 /nologo
|
||||||
# see note in Makefile.a6nt regarding stack size. we use 8MB here to be consistent.
|
# see note in Makefile.a6nt regarding stack size. we use 8MB here to be consistent.
|
||||||
EXELDFLAGS=/machine:ix86 /incremental:no /release /nologo /STACK:0x800000
|
EXELDFLAGS=/debug:full /machine:ix86 /incremental:no /nologo /STACK:0x800000
|
||||||
|
|
||||||
# use following flags for debugging
|
# use following flags for debugging
|
||||||
# CFLAGS=/nologo /Od /W3 /MDd /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DI386 /DNO_UNISTD_H
|
# CFLAGS=/nologo /fp:precise /Od /W3 /Zi /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DI386 /DWIN32 /D_CRT_SECURE_NO_WARNINGS
|
||||||
# LDFLAGS=/machine:ix86 /incremental:no /release /nologo /debug
|
# MDCFLAGS=$(CFLAGS) /MDd
|
||||||
|
# MTCFLAGS=$(CFLAGS) /MTd
|
||||||
|
|
||||||
SystemLib=rpcrt4.lib ole32.lib advapi32.lib User32.lib
|
SystemLib=rpcrt4.lib ole32.lib advapi32.lib User32.lib
|
||||||
MDZlibLib=..\zlib\zlib.lib
|
MDZlibLib=..\zlib\zlib.lib
|
||||||
|
|
|
@ -28,20 +28,18 @@ MDMain = ..\boot\$m\mainmd.obj
|
||||||
ResFile = ..\boot\$m\scheme.res
|
ResFile = ..\boot\$m\scheme.res
|
||||||
|
|
||||||
# We use MD so that we can link with and load DLLs built against msvcrxxx.dll
|
# We use MD so that we can link with and load DLLs built against msvcrxxx.dll
|
||||||
CFLAGS=/nologo /Ox /W3 /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS
|
CFLAGS=/nologo /Ox /W3 /Zi /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS
|
||||||
MDCFLAGS=$(CFLAGS) /MD
|
MDCFLAGS=$(CFLAGS) /MD
|
||||||
MTCFLAGS=$(CFLAGS) /MT
|
MTCFLAGS=$(CFLAGS) /MT
|
||||||
DLLLDFLAGS=/machine:X64 /release /nologo
|
DLLLDFLAGS=/debug:full /machine:X64 /nologo
|
||||||
# stack limit is 1MB by default. this is not enough for one of the mats in foreign.ms, which
|
# stack limit is 1MB by default. this is not enough for one of the mats in foreign.ms, which
|
||||||
# builds up nested C & Scheme stack frames. 2MB seems to be enough, but we set to 16MB.
|
# builds up nested C & Scheme stack frames. 2MB seems to be enough, but we set to 16MB.
|
||||||
EXELDFLAGS=/machine:X64 /incremental:no /release /nologo /STACK:0x1000000
|
EXELDFLAGS=/debug:full /machine:X64 /incremental:no /nologo /STACK:0x1000000
|
||||||
|
|
||||||
# use following flags for debugging
|
# use following flags for debugging
|
||||||
# CFLAGS=/nologo /Od /W3 /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS
|
# CFLAGS=/nologo /Od /W3 /Zi /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DX86_64 /DWIN32 /D_CRT_SECURE_NO_WARNINGS
|
||||||
# MDCFLAGS=$(CFLAGS) /Zi /MDd
|
# MDCFLAGS=$(CFLAGS) /MDd
|
||||||
# MTCFLAGS=$(CFLAGS) /Zi /MTd
|
# MTCFLAGS=$(CFLAGS) /MTd
|
||||||
# DLLLDFLAGS=/machine:X64 /debug /nologo /nodefaultlib:msvcrt
|
|
||||||
# EXELDFLAGS=/machine:X64 /incremental:no /debug /nologo /STACK:0x1000000
|
|
||||||
|
|
||||||
SystemLib=rpcrt4.lib ole32.lib advapi32.lib User32.lib
|
SystemLib=rpcrt4.lib ole32.lib advapi32.lib User32.lib
|
||||||
MDZlibLib=..\zlib\zlib.lib
|
MDZlibLib=..\zlib\zlib.lib
|
||||||
|
|
|
@ -28,16 +28,17 @@ MDMain = ..\boot\$m\mainmd.obj
|
||||||
ResFile = ..\boot\$m\scheme.res
|
ResFile = ..\boot\$m\scheme.res
|
||||||
|
|
||||||
# We use MD so that we can link with and load DLLs built against msvcrxxx.dll
|
# We use MD so that we can link with and load DLLs built against msvcrxxx.dll
|
||||||
CFLAGS=/nologo /fp:precise /Ox /W3 /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DI386 /DWIN32 /D_CRT_SECURE_NO_WARNINGS
|
CFLAGS=/nologo /fp:precise /Ox /W3 /Zi /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DI386 /DWIN32 /D_CRT_SECURE_NO_WARNINGS
|
||||||
MDCFLAGS=$(CFLAGS) /MD
|
MDCFLAGS=$(CFLAGS) /MD
|
||||||
MTCFLAGS=$(CFLAGS) /MT
|
MTCFLAGS=$(CFLAGS) /MT
|
||||||
DLLLDFLAGS=/machine:ix86 /release /nologo
|
DLLLDFLAGS=/debug:full /machine:ix86 /nologo
|
||||||
# see note in Makefile.a6nt regarding stack size. we use 8MB here to be consistent.
|
# see note in Makefile.a6nt regarding stack size. we use 8MB here to be consistent.
|
||||||
EXELDFLAGS=/machine:ix86 /incremental:no /release /nologo /STACK:0x800000
|
EXELDFLAGS=/debug:full /machine:ix86 /incremental:no /nologo /STACK:0x800000
|
||||||
|
|
||||||
# use following flags for debugging
|
# use following flags for debugging
|
||||||
# CFLAGS=/nologo /Od /W3 /MDd /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DI386 /DNO_UNISTD_H
|
# CFLAGS=/nologo /fp:precise /Od /W3 /Zi /I$(SchemeInclude) /I..\zlib /DUSE_ANSI_PROTOTYPES /DI386 /DWIN32 /D_CRT_SECURE_NO_WARNINGS
|
||||||
# LDFLAGS=/machine:ix86 /incremental:no /release /nologo /debug
|
# MDCFLAGS=$(CFLAGS) /MDd
|
||||||
|
# MTCFLAGS=$(CFLAGS) /MTd
|
||||||
|
|
||||||
SystemLib=rpcrt4.lib ole32.lib advapi32.lib User32.lib
|
SystemLib=rpcrt4.lib ole32.lib advapi32.lib User32.lib
|
||||||
MDZlibLib=..\zlib\zlib.lib
|
MDZlibLib=..\zlib\zlib.lib
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
m = a6le
|
m = a6le
|
||||||
Cpu = X86_64
|
Cpu = X86_64
|
||||||
|
|
||||||
mdclib = -lm -ldl $(LIBNCURSES) -lrt
|
mdclib = -lm -ldl $(LIBNCURSES) -lrt -luuid
|
||||||
C = ${CC} ${CPPFLAGS} -m64 -msse2 -Wpointer-arith -Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 ${CFLAGS}
|
C = ${CC} ${CPPFLAGS} -m64 -msse2 -Wpointer-arith -Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 ${CFLAGS}
|
||||||
o = o
|
o = o
|
||||||
mdsrc = i3le.c
|
mdsrc = i3le.c
|
||||||
|
|
|
@ -27,6 +27,7 @@ include Mf-base
|
||||||
${Scheme}: make.bat
|
${Scheme}: make.bat
|
||||||
cmd.exe /c make.bat
|
cmd.exe /c make.bat
|
||||||
cp ../bin/$m/scheme.exe ../bin/$m/petite.exe
|
cp ../bin/$m/scheme.exe ../bin/$m/petite.exe
|
||||||
|
cp ../bin/$m/scheme.pdb ../bin/$m/petite.pdb
|
||||||
|
|
||||||
make.bat: vs.bat
|
make.bat: vs.bat
|
||||||
echo '@echo off' > $@
|
echo '@echo off' > $@
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
m = arm32le
|
m = arm32le
|
||||||
Cpu = ARMV6
|
Cpu = ARMV6
|
||||||
|
|
||||||
mdclib = -lm -ldl $(LIBNCURSES) -lrt
|
mdclib = -lm -ldl $(LIBNCURSES) -lrt -luuid
|
||||||
C = ${CC} ${CPPFLAGS} -Wpointer-arith -Wextra -Werror -Wno-implicit-fallthrough -O2 ${CFLAGS}
|
C = ${CC} ${CPPFLAGS} -Wpointer-arith -Wextra -Werror -Wno-implicit-fallthrough -O2 ${CFLAGS}
|
||||||
o = o
|
o = o
|
||||||
mdsrc = arm32le.c
|
mdsrc = arm32le.c
|
||||||
|
|
|
@ -23,7 +23,7 @@ Main=../boot/$m/main.$o
|
||||||
Scheme=../bin/$m/scheme
|
Scheme=../bin/$m/scheme
|
||||||
|
|
||||||
kernelsrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-ocd.c gc-oce.c\
|
kernelsrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-ocd.c gc-oce.c\
|
||||||
number.c schsig.c io.c new-io.c print.c fasl.c stats.c foreign.c prim.c prim5.c flushcache.c\
|
number.c schsig.c io.c new-io.c print.c fasl.c vfasl.c stats.c foreign.c prim.c prim5.c flushcache.c\
|
||||||
schlib.c thread.c expeditor.c scheme.c
|
schlib.c thread.c expeditor.c scheme.c
|
||||||
|
|
||||||
kernelobj=${kernelsrc:%.c=%.$o} ${mdobj}
|
kernelobj=${kernelsrc:%.c=%.$o} ${mdobj}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
m = i3le
|
m = i3le
|
||||||
Cpu = I386
|
Cpu = I386
|
||||||
|
|
||||||
mdclib = -lm -ldl $(LIBNCURSES) -lrt
|
mdclib = -lm -ldl $(LIBNCURSES) -lrt -luuid
|
||||||
C = ${CC} ${CPPFLAGS} -m32 -msse2 -Wpointer-arith -Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 -fno-stack-protector ${CFLAGS}
|
C = ${CC} ${CPPFLAGS} -m32 -msse2 -Wpointer-arith -Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 -fno-stack-protector ${CFLAGS}
|
||||||
o = o
|
o = o
|
||||||
mdsrc = i3le.c
|
mdsrc = i3le.c
|
||||||
|
|
|
@ -27,6 +27,7 @@ include Mf-base
|
||||||
${Scheme}: make.bat
|
${Scheme}: make.bat
|
||||||
cmd.exe /c make.bat
|
cmd.exe /c make.bat
|
||||||
cp ../bin/$m/scheme.exe ../bin/$m/petite.exe
|
cp ../bin/$m/scheme.exe ../bin/$m/petite.exe
|
||||||
|
cp ../bin/$m/scheme.pdb ../bin/$m/petite.pdb
|
||||||
|
|
||||||
make.bat: vs.bat
|
make.bat: vs.bat
|
||||||
echo '@echo off' > $@
|
echo '@echo off' > $@
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
m = ppc32le
|
m = ppc32le
|
||||||
Cpu = PPC32
|
Cpu = PPC32
|
||||||
|
|
||||||
mdclib = -lm -ldl $(LIBNCURSES) -lrt
|
mdclib = -lm -ldl $(LIBNCURSES) -lrt -luuid
|
||||||
C = ${CC} ${CPPFLAGS} -m32 -Wpointer-arith -Wextra -Werror -Wno-implicit-fallthrough -O2 ${CFLAGS}
|
C = ${CC} ${CPPFLAGS} -m32 -Wpointer-arith -Wextra -Werror -Wno-implicit-fallthrough -O2 ${CFLAGS}
|
||||||
o = o
|
o = o
|
||||||
mdsrc = ppc32.c
|
mdsrc = ppc32.c
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
m = ta6le
|
m = ta6le
|
||||||
Cpu = X86_64
|
Cpu = X86_64
|
||||||
|
|
||||||
mdclib = -lm -ldl $(LIBNCURSES) -lpthread -lrt
|
mdclib = -lm -ldl $(LIBNCURSES) -lpthread -lrt -luuid
|
||||||
C = ${CC} ${CPPFLAGS} -m64 -msse2 -Wpointer-arith -Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 -D_REENTRANT -pthread ${CFLAGS}
|
C = ${CC} ${CPPFLAGS} -m64 -msse2 -Wpointer-arith -Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 -D_REENTRANT -pthread ${CFLAGS}
|
||||||
o = o
|
o = o
|
||||||
mdsrc = i3le.c
|
mdsrc = i3le.c
|
||||||
|
|
|
@ -27,6 +27,7 @@ include Mf-base
|
||||||
${Scheme}: make.bat
|
${Scheme}: make.bat
|
||||||
cmd.exe /c make.bat
|
cmd.exe /c make.bat
|
||||||
cp ../bin/$m/scheme.exe ../bin/$m/petite.exe
|
cp ../bin/$m/scheme.exe ../bin/$m/petite.exe
|
||||||
|
cp ../bin/$m/scheme.pdb ../bin/$m/petite.pdb
|
||||||
|
|
||||||
make.bat: vs.bat
|
make.bat: vs.bat
|
||||||
echo '@echo off' > $@
|
echo '@echo off' > $@
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
m = ti3le
|
m = ti3le
|
||||||
Cpu = I386
|
Cpu = I386
|
||||||
|
|
||||||
mdclib = -lm -ldl $(LIBNCURSES) -lpthread -lrt
|
mdclib = -lm -ldl $(LIBNCURSES) -lpthread -lrt -luuid
|
||||||
C = ${CC} ${CPPFLAGS} -m32 -msse2 -Wpointer-arith -Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 -D_REENTRANT -pthread ${CFLAGS}
|
C = ${CC} ${CPPFLAGS} -m32 -msse2 -Wpointer-arith -Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 -D_REENTRANT -pthread ${CFLAGS}
|
||||||
o = o
|
o = o
|
||||||
mdsrc = i3le.c
|
mdsrc = i3le.c
|
||||||
|
|
|
@ -27,6 +27,7 @@ include Mf-base
|
||||||
${Scheme}: make.bat
|
${Scheme}: make.bat
|
||||||
cmd.exe /c make.bat
|
cmd.exe /c make.bat
|
||||||
cp ../bin/$m/scheme.exe ../bin/$m/petite.exe
|
cp ../bin/$m/scheme.exe ../bin/$m/petite.exe
|
||||||
|
cp ../bin/$m/scheme.pdb ../bin/$m/petite.pdb
|
||||||
|
|
||||||
make.bat: vs.bat
|
make.bat: vs.bat
|
||||||
echo '@echo off' > $@
|
echo '@echo off' > $@
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
m = tppc32le
|
m = tppc32le
|
||||||
Cpu = PPC32
|
Cpu = PPC32
|
||||||
|
|
||||||
mdclib = -lm -ldl $(LIBNCURSES) -lpthread -lrt
|
mdclib = -lm -ldl $(LIBNCURSES) -lpthread -lrt -luuid
|
||||||
C = ${CC} ${CPPFLAGS} -m32 -Wpointer-arith -Wextra -Werror -Wno-implicit-fallthrough -O2 -D_REENTRANT -pthread ${CFLAGS}
|
C = ${CC} ${CPPFLAGS} -m32 -Wpointer-arith -Wextra -Werror -Wno-implicit-fallthrough -O2 -D_REENTRANT -pthread ${CFLAGS}
|
||||||
o = o
|
o = o
|
||||||
mdsrc = ppc32le.c
|
mdsrc = ppc32le.c
|
||||||
|
|
41
c/alloc.c
41
c/alloc.c
|
@ -150,14 +150,6 @@ ptr S_compute_bytes_allocated(xg, xs) ptr xg; ptr xs; {
|
||||||
return Sunsigned(n);
|
return Sunsigned(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr S_thread_get_more_room(t, n) iptr t; iptr n; {
|
|
||||||
ptr x;
|
|
||||||
tc_mutex_acquire()
|
|
||||||
find_room(space_new, 0, t, n, x);
|
|
||||||
tc_mutex_release()
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void maybe_fire_collector() {
|
static void maybe_fire_collector() {
|
||||||
ISPC s;
|
ISPC s;
|
||||||
uptr bytes, fudge;
|
uptr bytes, fudge;
|
||||||
|
@ -369,24 +361,29 @@ void S_scan_remembered_set() {
|
||||||
|
|
||||||
void S_get_more_room() {
|
void S_get_more_room() {
|
||||||
ptr tc = get_thread_context();
|
ptr tc = get_thread_context();
|
||||||
ptr xp; uptr ap, eap, real_eap, type, size;
|
ptr xp; uptr ap, type, size;
|
||||||
|
|
||||||
tc_mutex_acquire()
|
|
||||||
|
|
||||||
ap = (uptr)AP(tc);
|
|
||||||
eap = (uptr)EAP(tc);
|
|
||||||
real_eap = (uptr)REAL_EAP(tc);
|
|
||||||
|
|
||||||
xp = XP(tc);
|
xp = XP(tc);
|
||||||
if ((type = TYPEBITS(xp)) == 0) type = typemod;
|
if ((type = TYPEBITS(xp)) == 0) type = typemod;
|
||||||
size = ap - (iptr)UNTYPE(xp,type);
|
ap = (uptr)UNTYPE(xp, type);
|
||||||
ap -= size;
|
size = (uptr)((iptr)AP(tc) - (iptr)ap);
|
||||||
|
|
||||||
|
XP(tc) = S_get_more_room_help(tc, ap, type, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr S_get_more_room_help(ptr tc, uptr ap, uptr type, uptr size) {
|
||||||
|
ptr x; uptr eap, real_eap;
|
||||||
|
|
||||||
|
eap = (uptr)EAP(tc);
|
||||||
|
real_eap = (uptr)REAL_EAP(tc);
|
||||||
|
|
||||||
|
tc_mutex_acquire()
|
||||||
|
|
||||||
S_scan_dirty((ptr **)eap, (ptr **)real_eap);
|
S_scan_dirty((ptr **)eap, (ptr **)real_eap);
|
||||||
eap = real_eap;
|
eap = real_eap;
|
||||||
|
|
||||||
if (eap - ap >= size) {
|
if (eap - ap >= size) {
|
||||||
XP(tc) = TYPE(ap, type);
|
x = TYPE(ap, type);
|
||||||
ap += size;
|
ap += size;
|
||||||
if (eap - ap > alloc_waste_maximum) {
|
if (eap - ap > alloc_waste_maximum) {
|
||||||
AP(tc) = (ptr)ap;
|
AP(tc) = (ptr)ap;
|
||||||
|
@ -398,20 +395,22 @@ void S_get_more_room() {
|
||||||
} else if (eap - ap > alloc_waste_maximum) {
|
} else if (eap - ap > alloc_waste_maximum) {
|
||||||
AP(tc) = (ptr)ap;
|
AP(tc) = (ptr)ap;
|
||||||
EAP(tc) = (ptr)eap;
|
EAP(tc) = (ptr)eap;
|
||||||
find_room(space_new, 0, type, size, XP(tc));
|
find_room(space_new, 0, type, size, x);
|
||||||
} else {
|
} else {
|
||||||
S_G.bytes_of_space[space_new][0] -= eap - ap;
|
S_G.bytes_of_space[space_new][0] -= eap - ap;
|
||||||
S_reset_allocation_pointer(tc);
|
S_reset_allocation_pointer(tc);
|
||||||
ap = (uptr)AP(tc);
|
ap = (uptr)AP(tc);
|
||||||
if (size + alloc_waste_maximum <= (uptr)EAP(tc) - ap) {
|
if (size + alloc_waste_maximum <= (uptr)EAP(tc) - ap) {
|
||||||
XP(tc) = TYPE(ap, type);
|
x = TYPE(ap, type);
|
||||||
AP(tc) = (ptr)(ap + size);
|
AP(tc) = (ptr)(ap + size);
|
||||||
} else {
|
} else {
|
||||||
find_room(space_new, 0, type, size, XP(tc));
|
find_room(space_new, 0, type, size, x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tc_mutex_release()
|
tc_mutex_release()
|
||||||
|
|
||||||
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* S_cons_in is always called with mutex */
|
/* S_cons_in is always called with mutex */
|
||||||
|
|
10
c/externs.h
10
c/externs.h
|
@ -59,6 +59,7 @@ extern void S_dirty_set PROTO((ptr *loc, ptr x));
|
||||||
extern void S_scan_dirty PROTO((ptr **p, ptr **endp));
|
extern void S_scan_dirty PROTO((ptr **p, ptr **endp));
|
||||||
extern void S_scan_remembered_set PROTO((void));
|
extern void S_scan_remembered_set PROTO((void));
|
||||||
extern void S_get_more_room PROTO((void));
|
extern void S_get_more_room PROTO((void));
|
||||||
|
extern ptr S_get_more_room_help PROTO((ptr tc, uptr ap, uptr type, uptr size));
|
||||||
extern ptr S_cons_in PROTO((ISPC s, IGEN g, ptr car, ptr cdr));
|
extern ptr S_cons_in PROTO((ISPC s, IGEN g, ptr car, ptr cdr));
|
||||||
extern ptr S_symbol PROTO((ptr name));
|
extern ptr S_symbol PROTO((ptr name));
|
||||||
extern ptr S_rational PROTO((ptr n, ptr d));
|
extern ptr S_rational PROTO((ptr n, ptr d));
|
||||||
|
@ -89,7 +90,6 @@ extern ptr S_string PROTO((const char *s, iptr n));
|
||||||
extern ptr S_bignum PROTO((iptr n, IBOOL sign));
|
extern ptr S_bignum PROTO((iptr n, IBOOL sign));
|
||||||
extern ptr S_code PROTO((ptr tc, iptr type, iptr n));
|
extern ptr S_code PROTO((ptr tc, iptr type, iptr n));
|
||||||
extern ptr S_relocation_table PROTO((iptr n));
|
extern ptr S_relocation_table PROTO((iptr n));
|
||||||
extern ptr S_thread_get_more_room PROTO((iptr t, iptr n));
|
|
||||||
|
|
||||||
/* fasl.c */
|
/* fasl.c */
|
||||||
extern void S_fasl_init PROTO((void));
|
extern void S_fasl_init PROTO((void));
|
||||||
|
@ -102,6 +102,13 @@ char *S_lookup_machine_type PROTO((uptr n));
|
||||||
extern void S_set_code_obj PROTO((char *who, IFASLCODE typ, ptr p, iptr n,
|
extern void S_set_code_obj PROTO((char *who, IFASLCODE typ, ptr p, iptr n,
|
||||||
ptr x, iptr o));
|
ptr x, iptr o));
|
||||||
extern ptr S_get_code_obj PROTO((IFASLCODE typ, ptr p, iptr n, iptr o));
|
extern ptr S_get_code_obj PROTO((IFASLCODE typ, ptr p, iptr n, iptr o));
|
||||||
|
extern int S_fasl_stream_read PROTO((void *stream, octet *dest, iptr n));
|
||||||
|
extern int S_fasl_intern_rtd(ptr *x);
|
||||||
|
|
||||||
|
/* vfasl.c */
|
||||||
|
extern ptr S_to_vfasl PROTO((ptr v));
|
||||||
|
extern ptr S_vfasl PROTO((ptr bv, void *stream, iptr len));
|
||||||
|
extern ptr S_vfasl_to PROTO((ptr v));
|
||||||
|
|
||||||
/* flushcache.c */
|
/* flushcache.c */
|
||||||
extern void S_record_code_mod PROTO((ptr tc, uptr addr, uptr bytes));
|
extern void S_record_code_mod PROTO((ptr tc, uptr addr, uptr bytes));
|
||||||
|
@ -153,6 +160,7 @@ extern void S_resize_oblist PROTO((void));
|
||||||
extern ptr S_intern PROTO((const unsigned char *s));
|
extern ptr S_intern PROTO((const unsigned char *s));
|
||||||
extern ptr S_intern_sc PROTO((const string_char *s, iptr n, ptr name_str));
|
extern ptr S_intern_sc PROTO((const string_char *s, iptr n, ptr name_str));
|
||||||
extern ptr S_intern3 PROTO((const string_char *pname, iptr plen, const string_char *uname, iptr ulen, ptr pname_str, ptr uame_str));
|
extern ptr S_intern3 PROTO((const string_char *pname, iptr plen, const string_char *uname, iptr ulen, ptr pname_str, ptr uame_str));
|
||||||
|
extern ptr S_intern4 PROTO((ptr sym));
|
||||||
extern void S_intern_gensym PROTO((ptr g));
|
extern void S_intern_gensym PROTO((ptr g));
|
||||||
extern void S_retrofit_nonprocedure_code PROTO((void));
|
extern void S_retrofit_nonprocedure_code PROTO((void));
|
||||||
|
|
||||||
|
|
89
c/fasl.c
89
c/fasl.c
|
@ -237,7 +237,7 @@ static void ppc32_set_jump PROTO((void *address, uptr item, IBOOL callp));
|
||||||
static uptr ppc32_get_jump PROTO((void *address));
|
static uptr ppc32_get_jump PROTO((void *address));
|
||||||
#endif /* PPC32 */
|
#endif /* PPC32 */
|
||||||
#ifdef X86_64
|
#ifdef X86_64
|
||||||
static void x86_64_set_jump PROTO((void *address, uptr item, IBOOL callp));
|
static void x86_64_set_jump PROTO((void *address, uptr item, IBOOL callp, IBOOL force_abs));
|
||||||
static uptr x86_64_get_jump PROTO((void *address));
|
static uptr x86_64_get_jump PROTO((void *address));
|
||||||
#endif /* X86_64 */
|
#endif /* X86_64 */
|
||||||
#ifdef SPARC64
|
#ifdef SPARC64
|
||||||
|
@ -374,6 +374,11 @@ static INT uf_read(unbufFaslFile uf, octet *s, iptr n) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int S_fasl_stream_read(void *stream, octet *dest, iptr n)
|
||||||
|
{
|
||||||
|
return uf_read((unbufFaslFile)stream, dest, n);
|
||||||
|
}
|
||||||
|
|
||||||
static octet uf_bytein(unbufFaslFile uf) {
|
static octet uf_bytein(unbufFaslFile uf) {
|
||||||
octet buf[1];
|
octet buf[1];
|
||||||
if (uf_read(uf, buf, 1) < 0)
|
if (uf_read(uf, buf, 1) < 0)
|
||||||
|
@ -451,16 +456,21 @@ static ptr fasl_entry(ptr tc, unbufFaslFile uf) {
|
||||||
ty = uf_bytein(uf);
|
ty = uf_bytein(uf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ty != fasl_type_fasl_size)
|
if ((ty != fasl_type_fasl_size)
|
||||||
|
&& (ty != fasl_type_vfasl_size))
|
||||||
S_error1("", "malformed fasl-object header found in ~a", uf->path);
|
S_error1("", "malformed fasl-object header found in ~a", uf->path);
|
||||||
|
|
||||||
ffo.size = uf_uptrin(uf);
|
ffo.size = uf_uptrin(uf);
|
||||||
|
|
||||||
ffo.buf = buf;
|
if (ty == fasl_type_vfasl_size) {
|
||||||
ffo.next = ffo.end = ffo.buf;
|
x = S_vfasl((ptr)0, uf, ffo.size);
|
||||||
ffo.uf = uf;
|
} else {
|
||||||
|
ffo.buf = buf;
|
||||||
faslin(tc, &x, S_G.null_vector, &strbuf, &ffo);
|
ffo.next = ffo.end = ffo.buf;
|
||||||
|
ffo.uf = uf;
|
||||||
|
|
||||||
|
faslin(tc, &x, S_G.null_vector, &strbuf, &ffo);
|
||||||
|
}
|
||||||
|
|
||||||
S_flush_instruction_cache(tc);
|
S_flush_instruction_cache(tc);
|
||||||
return x;
|
return x;
|
||||||
|
@ -694,27 +704,10 @@ static void faslin(ptr tc, ptr *x, ptr t, ptr *pstrbuf, faslFile f) {
|
||||||
*x = rtd;
|
*x = rtd;
|
||||||
return;
|
return;
|
||||||
} case fasl_type_rtd: {
|
} case fasl_type_rtd: {
|
||||||
ptr rtd, rtd_uid, plist, ls;
|
|
||||||
|
|
||||||
fasl_record(tc, x, t, pstrbuf, f);
|
fasl_record(tc, x, t, pstrbuf, f);
|
||||||
rtd = *x;
|
if (S_fasl_intern_rtd(x) < 0) {
|
||||||
rtd_uid = RECORDDESCUID(rtd);
|
S_error2("", "incompatible record type ~s in ~a", RECORDDESCNAME(*x), f->uf->path);
|
||||||
|
|
||||||
/* see if uid's property list already registers an rtd */
|
|
||||||
plist = SYMSPLIST(rtd_uid);
|
|
||||||
for (ls = plist; ls != Snil; ls = Scdr(Scdr(ls))) {
|
|
||||||
if (Scar(ls) == S_G.rtd_key) {
|
|
||||||
ptr old_rtd = Scar(Scdr(ls));
|
|
||||||
/* if so, check new rtd against old rtd and return old rtd */
|
|
||||||
if (!rtd_equiv(rtd, old_rtd))
|
|
||||||
S_error2("", "incompatible record type ~s in ~a", RECORDDESCNAME(rtd), f->uf->path);
|
|
||||||
*x = old_rtd;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if not, register it */
|
|
||||||
SETSYMSPLIST(rtd_uid, Scons(S_G.rtd_key, Scons(rtd, plist)));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case fasl_type_record: {
|
case fasl_type_record: {
|
||||||
|
@ -1106,6 +1099,33 @@ static void fasl_record(ptr tc, ptr *x, ptr t, ptr *pstrbuf, faslFile f) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Result: 0 => interned; 1 => replaced; -1 => inconsistent */
|
||||||
|
int S_fasl_intern_rtd(ptr *x)
|
||||||
|
{
|
||||||
|
ptr rtd, rtd_uid, plist, ls;
|
||||||
|
|
||||||
|
rtd = *x;
|
||||||
|
rtd_uid = RECORDDESCUID(rtd);
|
||||||
|
|
||||||
|
/* see if uid's property list already registers an rtd */
|
||||||
|
plist = SYMSPLIST(rtd_uid);
|
||||||
|
for (ls = plist; ls != Snil; ls = Scdr(Scdr(ls))) {
|
||||||
|
if (Scar(ls) == S_G.rtd_key) {
|
||||||
|
ptr old_rtd = Scar(Scdr(ls));
|
||||||
|
/* if so, check new rtd against old rtd and return old rtd */
|
||||||
|
if (!rtd_equiv(rtd, old_rtd))
|
||||||
|
return -1;
|
||||||
|
else
|
||||||
|
*x = old_rtd;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if not, register it */
|
||||||
|
SETSYMSPLIST(rtd_uid, Scons(S_G.rtd_key, Scons(rtd, plist)));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* limited version for checking rtd fields */
|
/* limited version for checking rtd fields */
|
||||||
static IBOOL equalp(x, y) ptr x, y; {
|
static IBOOL equalp(x, y) ptr x, y; {
|
||||||
if (x == y) return 1;
|
if (x == y) return 1;
|
||||||
|
@ -1121,7 +1141,10 @@ static IBOOL equalp(x, y) ptr x, y; {
|
||||||
}
|
}
|
||||||
|
|
||||||
static IBOOL rtd_equiv(x, y) ptr x, y; {
|
static IBOOL rtd_equiv(x, y) ptr x, y; {
|
||||||
return RECORDINSTTYPE(x) == RECORDINSTTYPE(y) &&
|
return ((RECORDINSTTYPE(x) == RECORDINSTTYPE(y))
|
||||||
|
/* recognize `base-rtd` shape: */
|
||||||
|
|| ((RECORDINSTTYPE(x) == x)
|
||||||
|
&& (RECORDINSTTYPE(y) == y))) &&
|
||||||
RECORDDESCPARENT(x) == RECORDDESCPARENT(y) &&
|
RECORDDESCPARENT(x) == RECORDDESCPARENT(y) &&
|
||||||
equalp(RECORDDESCPM(x), RECORDDESCPM(y)) &&
|
equalp(RECORDDESCPM(x), RECORDDESCPM(y)) &&
|
||||||
equalp(RECORDDESCMPM(x), RECORDDESCMPM(y)) &&
|
equalp(RECORDDESCMPM(x), RECORDDESCMPM(y)) &&
|
||||||
|
@ -1164,7 +1187,7 @@ void S_set_code_obj(who, typ, p, n, x, o) char *who; IFASLCODE typ; iptr n, o; p
|
||||||
|
|
||||||
address = (void *)((uptr)p + n);
|
address = (void *)((uptr)p + n);
|
||||||
item = (uptr)x + o;
|
item = (uptr)x + o;
|
||||||
switch (typ) {
|
switch (typ & ~reloc_force_abs) {
|
||||||
case reloc_abs:
|
case reloc_abs:
|
||||||
*(uptr *)address = item;
|
*(uptr *)address = item;
|
||||||
break;
|
break;
|
||||||
|
@ -1198,10 +1221,10 @@ void S_set_code_obj(who, typ, p, n, x, o) char *who; IFASLCODE typ; iptr n, o; p
|
||||||
#endif /* I386 */
|
#endif /* I386 */
|
||||||
#ifdef X86_64
|
#ifdef X86_64
|
||||||
case reloc_x86_64_jump:
|
case reloc_x86_64_jump:
|
||||||
x86_64_set_jump(address, item, 0);
|
x86_64_set_jump(address, item, 0, typ & reloc_force_abs);
|
||||||
break;
|
break;
|
||||||
case reloc_x86_64_call:
|
case reloc_x86_64_call:
|
||||||
x86_64_set_jump(address, item, 1);
|
x86_64_set_jump(address, item, 1, typ & reloc_force_abs);
|
||||||
break;
|
break;
|
||||||
#endif /* X86_64 */
|
#endif /* X86_64 */
|
||||||
#ifdef SPARC64
|
#ifdef SPARC64
|
||||||
|
@ -1241,7 +1264,7 @@ ptr S_get_code_obj(typ, p, n, o) IFASLCODE typ; iptr n, o; ptr p; {
|
||||||
void *address; uptr item;
|
void *address; uptr item;
|
||||||
|
|
||||||
address = (void *)((uptr)p + n);
|
address = (void *)((uptr)p + n);
|
||||||
switch (typ) {
|
switch (typ & ~reloc_force_abs) {
|
||||||
case reloc_abs:
|
case reloc_abs:
|
||||||
item = *(uptr *)address;
|
item = *(uptr *)address;
|
||||||
break;
|
break;
|
||||||
|
@ -1419,9 +1442,9 @@ static uptr ppc32_get_jump(void *address) {
|
||||||
#endif /* PPC32 */
|
#endif /* PPC32 */
|
||||||
|
|
||||||
#ifdef X86_64
|
#ifdef X86_64
|
||||||
static void x86_64_set_jump(void *address, uptr item, IBOOL callp) {
|
static void x86_64_set_jump(void *address, uptr item, IBOOL callp, IBOOL force_abs) {
|
||||||
I64 disp = (I64)item - ((I64)address + 5); /* 5 = size of call instruction */
|
I64 disp = (I64)item - ((I64)address + 5); /* 5 = size of call instruction */
|
||||||
if ((I32)disp == disp) {
|
if ((I32)disp == disp && !force_abs) {
|
||||||
*(octet *)address = callp ? 0xE8 : 0xE9; /* call or jmp disp32 opcode */
|
*(octet *)address = callp ? 0xE8 : 0xE9; /* call or jmp disp32 opcode */
|
||||||
*(I32 *)((uptr)address + 1) = (I32)disp;
|
*(I32 *)((uptr)address + 1) = (I32)disp;
|
||||||
*((octet *)address + 5) = 0x90; /* nop */
|
*((octet *)address + 5) = 0x90; /* nop */
|
||||||
|
|
|
@ -151,4 +151,9 @@ EXTERN struct {
|
||||||
ptr eqvp;
|
ptr eqvp;
|
||||||
ptr equalp;
|
ptr equalp;
|
||||||
ptr symboleqp;
|
ptr symboleqp;
|
||||||
|
|
||||||
|
/* vfasl.c */
|
||||||
|
struct vfasl_hash_table *c_entries;
|
||||||
|
struct vfasl_hash_table *library_entries;
|
||||||
|
struct vfasl_hash_table *library_entry_codes;
|
||||||
} S_G;
|
} S_G;
|
||||||
|
|
48
c/intern.c
48
c/intern.c
|
@ -361,7 +361,7 @@ void S_intern_gensym(sym) ptr sym; {
|
||||||
tc_mutex_release()
|
tc_mutex_release()
|
||||||
S_error1("intern-gensym", "unique name ~s already interned", uname_str);
|
S_error1("intern-gensym", "unique name ~s already interned", uname_str);
|
||||||
}
|
}
|
||||||
if (Sstring_ref(str, i) != uname[i]) break;
|
if (STRIT(str, i) != uname[i]) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -374,12 +374,58 @@ void S_intern_gensym(sym) ptr sym; {
|
||||||
tc_mutex_release()
|
tc_mutex_release()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* must hold mutex */
|
||||||
|
ptr S_intern4(sym) ptr sym; {
|
||||||
|
ptr name = SYMNAME(sym);
|
||||||
|
|
||||||
|
if (name == Sfalse) {
|
||||||
|
/* gensym whose name wasn't generated, so far */
|
||||||
|
return sym;
|
||||||
|
} else {
|
||||||
|
ptr uname_str = (Sstringp(name) ? name : Scar(name));
|
||||||
|
if (uname_str == Sfalse) {
|
||||||
|
/* gensym that wasn't interned, so far */
|
||||||
|
return sym;
|
||||||
|
} else {
|
||||||
|
const string_char *uname = &STRIT(uname_str, 0);
|
||||||
|
iptr ulen = Sstring_length(uname_str);
|
||||||
|
iptr hc = UNFIX(SYMHASH(sym));
|
||||||
|
iptr idx = hc % S_G.oblist_length;
|
||||||
|
bucket *b;
|
||||||
|
|
||||||
|
b = S_G.oblist[idx];
|
||||||
|
while (b != NULL) {
|
||||||
|
ptr x = b->sym;
|
||||||
|
ptr x_name = SYMNAME(x);
|
||||||
|
if (Sstringp(name) == Sstringp(x_name)) {
|
||||||
|
ptr str = (Sstringp(x_name) ? x_name : Scar(x_name));
|
||||||
|
if (Sstring_length(str) == ulen) {
|
||||||
|
iptr i;
|
||||||
|
for (i = 0; ; i += 1) {
|
||||||
|
if (i == ulen) {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
if (STRIT(str, i) != uname[i]) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
b = b->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
oblist_insert(sym, idx, GENERATION(sym));
|
||||||
|
|
||||||
|
return sym;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* retrofit existing symbols once nonprocedure_code is available */
|
/* retrofit existing symbols once nonprocedure_code is available */
|
||||||
void S_retrofit_nonprocedure_code() {
|
void S_retrofit_nonprocedure_code() {
|
||||||
ptr npc, sym, val; bucket_list *bl;
|
ptr npc, sym, val; bucket_list *bl;
|
||||||
|
|
||||||
npc = S_G.nonprocedure_code;
|
npc = S_G.nonprocedure_code;
|
||||||
|
|
||||||
|
/* FIXME */
|
||||||
/* assuming this happens early, before collector has been called, so need look only for generation 0 symbols */
|
/* assuming this happens early, before collector has been called, so need look only for generation 0 symbols */
|
||||||
for (bl = S_G.buckets_of_generation[0]; bl != NULL; bl = bl->cdr) {
|
for (bl = S_G.buckets_of_generation[0]; bl != NULL; bl = bl->cdr) {
|
||||||
sym = bl->car->sym;
|
sym = bl->car->sym;
|
||||||
|
|
|
@ -1546,6 +1546,8 @@ void S_prim5_init() {
|
||||||
Sforeign_symbol("(cs)getpid", (void *)s_getpid);
|
Sforeign_symbol("(cs)getpid", (void *)s_getpid);
|
||||||
Sforeign_symbol("(cs)fasl_read", (void *)S_fasl_read);
|
Sforeign_symbol("(cs)fasl_read", (void *)S_fasl_read);
|
||||||
Sforeign_symbol("(cs)bv_fasl_read", (void *)S_bv_fasl_read);
|
Sforeign_symbol("(cs)bv_fasl_read", (void *)S_bv_fasl_read);
|
||||||
|
Sforeign_symbol("(cs)to_vfasl", (void *)S_to_vfasl);
|
||||||
|
Sforeign_symbol("(cs)vfasl_to", (void *)S_vfasl_to);
|
||||||
Sforeign_symbol("(cs)s_decode_float", (void *)s_decode_float);
|
Sforeign_symbol("(cs)s_decode_float", (void *)s_decode_float);
|
||||||
|
|
||||||
Sforeign_symbol("(cs)new_open_input_fd", (void *)S_new_open_input_fd);
|
Sforeign_symbol("(cs)new_open_input_fd", (void *)S_new_open_input_fd);
|
||||||
|
|
|
@ -228,7 +228,9 @@ static void initialize_seginfo(seginfo *si, ISPC s, IGEN g) {
|
||||||
|
|
||||||
si->space = s;
|
si->space = s;
|
||||||
si->generation = g;
|
si->generation = g;
|
||||||
|
si->sorted = 0;
|
||||||
si->min_dirty_byte = 0xff;
|
si->min_dirty_byte = 0xff;
|
||||||
|
si->trigger_ephemerons = NULL;
|
||||||
for (d = 0; d < cards_per_segment; d += sizeof(ptr)) {
|
for (d = 0; d < cards_per_segment; d += sizeof(ptr)) {
|
||||||
iptr *dp = (iptr *)(si->dirty_bytes + d);
|
iptr *dp = (iptr *)(si->dirty_bytes + d);
|
||||||
/* fill sizeof(iptr) bytes at a time with 0xff */
|
/* fill sizeof(iptr) bytes at a time with 0xff */
|
||||||
|
@ -264,7 +266,6 @@ iptr S_find_segments(s, g, n) ISPC s; IGEN g; iptr n; {
|
||||||
|
|
||||||
chunk->nused_segs += 1;
|
chunk->nused_segs += 1;
|
||||||
initialize_seginfo(si, s, g);
|
initialize_seginfo(si, s, g);
|
||||||
si->sorted = 0;
|
|
||||||
si->next = S_G.occupied_segments[s][g];
|
si->next = S_G.occupied_segments[s][g];
|
||||||
S_G.occupied_segments[s][g] = si;
|
S_G.occupied_segments[s][g] = si;
|
||||||
S_G.number_of_empty_segments -= 1;
|
S_G.number_of_empty_segments -= 1;
|
||||||
|
@ -303,7 +304,6 @@ iptr S_find_segments(s, g, n) ISPC s; IGEN g; iptr n; {
|
||||||
S_G.occupied_segments[s][g] = si;
|
S_G.occupied_segments[s][g] = si;
|
||||||
for (j = n, nextsi = si; j > 0; j -= 1, nextsi = nextsi->next) {
|
for (j = n, nextsi = si; j > 0; j -= 1, nextsi = nextsi->next) {
|
||||||
initialize_seginfo(nextsi, s, g);
|
initialize_seginfo(nextsi, s, g);
|
||||||
nextsi->sorted = 0;
|
|
||||||
}
|
}
|
||||||
S_G.number_of_empty_segments -= n;
|
S_G.number_of_empty_segments -= n;
|
||||||
return si->number;
|
return si->number;
|
||||||
|
|
66
c/stats.c
66
c/stats.c
|
@ -53,57 +53,33 @@ static long adjust_time_zone(ptr dtvec, struct tm *tmxp, ptr given_tzoff);
|
||||||
#include <rpc.h>
|
#include <rpc.h>
|
||||||
|
|
||||||
ptr S_unique_id() {
|
ptr S_unique_id() {
|
||||||
union {UUID uuid; INT foo[4];} u;
|
union {UUID uuid; U32 foo[4];} u;
|
||||||
u.foo[0] = 0;
|
u.foo[0] = 0;
|
||||||
u.foo[1] = 0;
|
u.foo[1] = 0;
|
||||||
u.foo[2] = 0;
|
u.foo[2] = 0;
|
||||||
u.foo[3] = 0;
|
u.foo[3] = 0;
|
||||||
|
UuidCreate(&u.uuid);
|
||||||
UuidCreate(&u.uuid);
|
return S_add(S_ash(Sunsigned32(u.foo[0]), Sinteger(8*3*sizeof(U32))),
|
||||||
return S_add(S_ash(Sunsigned(u.foo[0]), Sinteger(8*3*sizeof(INT))),
|
S_add(S_ash(Sunsigned32(u.foo[1]), Sinteger(8*2*sizeof(U32))),
|
||||||
S_add(S_ash(Sunsigned(u.foo[1]), Sinteger(8*2*sizeof(INT))),
|
S_add(S_ash(Sunsigned32(u.foo[2]), Sinteger(8*sizeof(U32))),
|
||||||
S_add(S_ash(Sunsigned(u.foo[2]), Sinteger(8*sizeof(INT))),
|
Sunsigned32(u.foo[3]))));
|
||||||
Sunsigned(u.foo[3]))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* WIN32 */
|
#else /* WIN32 */
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <uuid/uuid.h>
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <netdb.h>
|
|
||||||
|
|
||||||
static INT gethostip(void) {
|
|
||||||
char hostname[MAXHOSTNAMELEN+1];
|
|
||||||
struct hostent *h;
|
|
||||||
char **p;
|
|
||||||
struct in_addr in;
|
|
||||||
|
|
||||||
if (gethostname(hostname, MAXHOSTNAMELEN)) return 0;
|
|
||||||
if ((h = gethostbyname(hostname)) == NULL) return 0;
|
|
||||||
p = h->h_addr_list;
|
|
||||||
if (*p == NULL) return 0;
|
|
||||||
|
|
||||||
memcpy(&in.s_addr, *p, sizeof (in.s_addr));
|
|
||||||
return in.s_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
ptr S_unique_id() {
|
ptr S_unique_id() {
|
||||||
struct timeval tp;
|
union {uuid_t uuid; U32 foo[4];} u;
|
||||||
time_t sec;
|
u.foo[0] = 0;
|
||||||
pid_t pid;
|
u.foo[1] = 0;
|
||||||
INT ip;
|
u.foo[2] = 0;
|
||||||
|
u.foo[3] = 0;
|
||||||
(void) gettimeofday(&tp,NULL);
|
uuid_generate(u.uuid);
|
||||||
|
return S_add(S_ash(Sunsigned32(u.foo[0]), Sinteger(8*3*sizeof(U32))),
|
||||||
pid = getpid();
|
S_add(S_ash(Sunsigned32(u.foo[1]), Sinteger(8*2*sizeof(U32))),
|
||||||
ip = gethostip();
|
S_add(S_ash(Sunsigned32(u.foo[2]), Sinteger(8*sizeof(U32))),
|
||||||
sec = tp.tv_sec;
|
Sunsigned32(u.foo[3]))));
|
||||||
|
|
||||||
return S_add(S_ash(Sunsigned(pid), Sinteger(8*(sizeof(sec)+sizeof(ip)))),
|
|
||||||
S_add(S_ash(Sunsigned(ip), Sinteger(8*(sizeof(sec)))),
|
|
||||||
Sunsigned(sec)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* WIN32 */
|
#endif /* WIN32 */
|
||||||
|
|
|
@ -96,7 +96,7 @@ typedef int IFASLCODE; /* fasl type codes */
|
||||||
ptr _tc = tc;\
|
ptr _tc = tc;\
|
||||||
uptr _ap = (uptr)AP(_tc);\
|
uptr _ap = (uptr)AP(_tc);\
|
||||||
if ((uptr)n > ((uptr)EAP(_tc) - _ap)) {\
|
if ((uptr)n > ((uptr)EAP(_tc) - _ap)) {\
|
||||||
(x) = S_thread_get_more_room(t, n);\
|
(x) = S_get_more_room_help(_tc, _ap, t, n);\
|
||||||
} else {\
|
} else {\
|
||||||
(x) = TYPE(_ap,t);\
|
(x) = TYPE(_ap,t);\
|
||||||
AP(_tc) = (ptr)(_ap + n);\
|
AP(_tc) = (ptr)(_ap + n);\
|
||||||
|
|
|
@ -49,7 +49,7 @@ albeit scoped where the bindings of the \scheme{let-syntax} or
|
||||||
in a library or RNRS top-level program unless the
|
in a library or RNRS top-level program unless the
|
||||||
\scheme{scheme} library is included in the library or
|
\scheme{scheme} library is included in the library or
|
||||||
top-level programs imports.
|
top-level programs imports.
|
||||||
These forms are described in Chatper~\ref{CHPTSYNTAX}.
|
These forms are described in Chapter~\ref{CHPTSYNTAX}.
|
||||||
|
|
||||||
In Revised$^6$ Report Scheme, definitions can appear at the front of
|
In Revised$^6$ Report Scheme, definitions can appear at the front of
|
||||||
a \scheme{lambda} or similar body (e.g., a \scheme{let} or \scheme{letrec}
|
a \scheme{lambda} or similar body (e.g., a \scheme{let} or \scheme{letrec}
|
||||||
|
@ -66,8 +66,8 @@ procedure.
|
||||||
The macro expander uses the same two-pass algorithm for expanding
|
The macro expander uses the same two-pass algorithm for expanding
|
||||||
top-level \scheme{begin} expressions as it uses for a \scheme{lambda},
|
top-level \scheme{begin} expressions as it uses for a \scheme{lambda},
|
||||||
\scheme{library}, or top-level program body.
|
\scheme{library}, or top-level program body.
|
||||||
(This algorithm is described in Section~\ref{SECTSYNTAXDEFINITIONS} of {\TSPLFOUR}.)
|
(This algorithm is described in Section~\ref{TSPL:SECTSYNTAXDEFINITIONS} of
|
||||||
As a result,
|
{\TSPLFOUR}.) As a result,
|
||||||
|
|
||||||
\schemedisplay
|
\schemedisplay
|
||||||
(begin
|
(begin
|
||||||
|
@ -85,7 +85,7 @@ and
|
||||||
|
|
||||||
both result in the giving \scheme{x} the value 3,
|
both result in the giving \scheme{x} the value 3,
|
||||||
even though an unbound variable reference to \scheme{a} would result if
|
even though an unbound variable reference to \scheme{a} would result if
|
||||||
the two forms within the latter \scheme{begin} expression where run
|
the two forms within the latter \scheme{begin} expression were run
|
||||||
independently at top level.
|
independently at top level.
|
||||||
|
|
||||||
Similarly, the \scheme{begin} form produced by a use of
|
Similarly, the \scheme{begin} form produced by a use of
|
||||||
|
@ -136,7 +136,7 @@ for internal variable definitions, for backward compatibility.
|
||||||
|
|
||||||
%----------------------------------------------------------------------------
|
%----------------------------------------------------------------------------
|
||||||
\noskipentryheader
|
\noskipentryheader
|
||||||
\formdef{define-values}{\categorysyntax}{(define-values formals \var{expr})}
|
\formdef{define-values}{\categorysyntax}{(define-values \var{formals} \var{expr})}
|
||||||
\listlibraries
|
\listlibraries
|
||||||
\endnoskipentryheader
|
\endnoskipentryheader
|
||||||
|
|
||||||
|
|
17
csug/io.stex
17
csug/io.stex
|
@ -309,8 +309,8 @@ predicate \scheme{transcoder?}, which should be standard but is not.
|
||||||
\var{endianness} must be the symbol \scheme{big} or the symbol
|
\var{endianness} must be the symbol \scheme{big} or the symbol
|
||||||
\scheme{little}.
|
\scheme{little}.
|
||||||
|
|
||||||
The codec returned by \scheme{utf-16-codec} can be used to create
|
The codec returned by \scheme{utf-16-codec} can be used to create and
|
||||||
process data written UFT-16 format.
|
process data written UTF-16 format.
|
||||||
When called without the \var{endianness} argument or with \var{endianness}
|
When called without the \var{endianness} argument or with \var{endianness}
|
||||||
\scheme{big}, \scheme{utf-16-codec} returns a codec for standard UTF-16
|
\scheme{big}, \scheme{utf-16-codec} returns a codec for standard UTF-16
|
||||||
data, i.e., one that defaults to big-endian format if no byte-order mark
|
data, i.e., one that defaults to big-endian format if no byte-order mark
|
||||||
|
@ -1359,11 +1359,7 @@ If \var{?transcoder} is present and not \scheme{#f}, it must be a
|
||||||
transcoder, and this procedure returns a textual input port
|
transcoder, and this procedure returns a textual input port
|
||||||
whose transcoder is \var{?transcoder}.
|
whose transcoder is \var{?transcoder}.
|
||||||
Otherwise, this procedure returns a binary input port.
|
Otherwise, this procedure returns a binary input port.
|
||||||
The buffer mode \var{b-mode} defaults to \scheme{block}, which differs from
|
The buffer mode \var{b-mode} defaults to \scheme{block}.
|
||||||
\scheme{block} in {\ChezScheme} only for textual output ports.
|
|
||||||
See the lead-in to Section~\ref{TSPL:SECTOPENINGFILES} of {\TSPLFOUR}
|
|
||||||
for a description of the constraints on and effects of the other
|
|
||||||
arguments.
|
|
||||||
|
|
||||||
The Revised$^6$ Report version of this procedure does not accept the
|
The Revised$^6$ Report version of this procedure does not accept the
|
||||||
optional \var{b-mode} and \var{?transcoder} arguments, which limits
|
optional \var{b-mode} and \var{?transcoder} arguments, which limits
|
||||||
|
@ -1985,9 +1981,6 @@ whose transcoder is \var{?transcoder}.
|
||||||
Otherwise, this procedure returns a binary output port.
|
Otherwise, this procedure returns a binary output port.
|
||||||
The buffer mode \var{b-mode} defaults to \scheme{line}, which differs from
|
The buffer mode \var{b-mode} defaults to \scheme{line}, which differs from
|
||||||
\scheme{block} in {\ChezScheme} only for textual output ports.
|
\scheme{block} in {\ChezScheme} only for textual output ports.
|
||||||
See the lead-in to Section~\ref{TSPL:SECTOPENINGFILES} of {\TSPLFOUR}
|
|
||||||
for a description of the constraints on and effects of the other
|
|
||||||
arguments.
|
|
||||||
|
|
||||||
The Revised$^6$ Report version of this procedure does not accept the
|
The Revised$^6$ Report version of this procedure does not accept the
|
||||||
optional \var{b-mode} and \var{?transcoder} arguments, which limits
|
optional \var{b-mode} and \var{?transcoder} arguments, which limits
|
||||||
|
@ -3687,9 +3680,9 @@ are involved.
|
||||||
|
|
||||||
\begin{tabular}{llllllll}
|
\begin{tabular}{llllllll}
|
||||||
path & abs & first & rest & parent & last & root & ext \\
|
path & abs & first & rest & parent & last & root & ext \\
|
||||||
\scheme{c:} & \scheme{#t} & \scheme{c:} & \scheme{_} & \scheme{c:} & \scheme{_} & \scheme{c:} & \scheme{_} \\
|
\scheme{c:} & \scheme{#f} & \scheme{c:} & \scheme{_} & \scheme{c:} & \scheme{_} & \scheme{c:} & \scheme{_} \\
|
||||||
\scheme{c:/} & \scheme{#t} & \scheme{c:/} & \scheme{_} & \scheme{c:/} & \scheme{_} & \scheme{c:/} & \scheme{_} \\
|
\scheme{c:/} & \scheme{#t} & \scheme{c:/} & \scheme{_} & \scheme{c:/} & \scheme{_} & \scheme{c:/} & \scheme{_} \\
|
||||||
\scheme{c:a/b} & \scheme{#t} & \scheme{c:} & \scheme{a/b} & \scheme{c:a} & \scheme{b} & \scheme{c:a/b} & \scheme{_} \\
|
\scheme{c:a/b} & \scheme{#f} & \scheme{c:} & \scheme{a/b} & \scheme{c:a} & \scheme{b} & \scheme{c:a/b} & \scheme{_} \\
|
||||||
\scheme{//s/a/b.c} & \scheme{#t} & \scheme{//s} & \scheme{a/b.c} & \scheme{//s/a} & \scheme{b.c} & \scheme{//s/a/b} & \scheme{c} \\
|
\scheme{//s/a/b.c} & \scheme{#t} & \scheme{//s} & \scheme{a/b.c} & \scheme{//s/a} & \scheme{b.c} & \scheme{//s/a/b} & \scheme{c} \\
|
||||||
\scheme{//s.com} & \scheme{#t} & \scheme{//s.com} & \scheme{_} & \scheme{//s.com} & \scheme{_} & \scheme{//s.com} & \scheme{_} \\
|
\scheme{//s.com} & \scheme{#t} & \scheme{//s.com} & \scheme{_} & \scheme{//s.com} & \scheme{_} & \scheme{//s.com} & \scheme{_} \\
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
|
|
|
@ -1418,10 +1418,8 @@ The pretty name of a gensym is returned by the procedure
|
||||||
|
|
||||||
In both the first and second forms, the unique name is an
|
In both the first and second forms, the unique name is an
|
||||||
automatically generated globally unique name.
|
automatically generated globally unique name.
|
||||||
Globally unique names are constructed (lazily---see below)
|
Globally unique names are constructed (lazily---see below) from the
|
||||||
from some combination of a unique machine identifier (such as the
|
combination of a universally unique identifier and an internal
|
||||||
network address), the current process identifier (PID), and the
|
|
||||||
time at which the Scheme session began, along with an internal
|
|
||||||
counter.
|
counter.
|
||||||
In the third form of gensym, the unique name of the new gensym is
|
In the third form of gensym, the unique name of the new gensym is
|
||||||
\var{unique-name}, which must be a string.
|
\var{unique-name}, which must be a string.
|
||||||
|
|
|
@ -1887,7 +1887,7 @@ the annotation is returned.
|
||||||
\endentryheader
|
\endentryheader
|
||||||
|
|
||||||
\var{sfd} must be a source-file descriptor.
|
\var{sfd} must be a source-file descriptor.
|
||||||
\var{bfd} must be an exact nonnegative integer and should be the
|
\var{bfp} must be an exact nonnegative integer and should be the
|
||||||
character position of the next character to be read from
|
character position of the next character to be read from
|
||||||
\var{textual-input-port}.
|
\var{textual-input-port}.
|
||||||
|
|
||||||
|
|
|
@ -3170,7 +3170,7 @@ A \scheme{profile} form has the effect of accounting to the source
|
||||||
position identified by \var{source-object} the number of times the
|
position identified by \var{source-object} the number of times the
|
||||||
\scheme{profile} form is executed.
|
\scheme{profile} form is executed.
|
||||||
Profile forms are generated implicitly by the expander for source
|
Profile forms are generated implicitly by the expander for source
|
||||||
expressions in annorated input, e.g., input read by the compiler or
|
expressions in annotated input, e.g., input read by the compiler or
|
||||||
interpreter from a Scheme source file, so this form is typically
|
interpreter from a Scheme source file, so this form is typically
|
||||||
useful only when unannotated source code is produced by the front
|
useful only when unannotated source code is produced by the front
|
||||||
end for some language that targets Scheme.
|
end for some language that targets Scheme.
|
||||||
|
@ -3307,7 +3307,7 @@ frequently executed code.
|
||||||
This value of this parameter must be a string or \scheme{#f}.
|
This value of this parameter must be a string or \scheme{#f}.
|
||||||
If it is a string, the string should contain an HTML cascading style sheet (CSS)
|
If it is a string, the string should contain an HTML cascading style sheet (CSS)
|
||||||
color specifier.
|
color specifier.
|
||||||
If the parameter is set to string, \scheme{profile-dump-html} includes line numbers
|
If the parameter is set to a string, \scheme{profile-dump-html} includes line numbers
|
||||||
in its html rendering of each source file, using the specified color.
|
in its html rendering of each source file, using the specified color.
|
||||||
If the parameter is set to \scheme{#f}, no line numbers are included.
|
If the parameter is set to \scheme{#f}, no line numbers are included.
|
||||||
|
|
||||||
|
@ -3324,7 +3324,7 @@ This procedure produces a dump of all
|
||||||
profile information present in \var{dump}, which defaults to
|
profile information present in \var{dump}, which defaults to
|
||||||
the value returned by \scheme{profile-dump}.
|
the value returned by \scheme{profile-dump}.
|
||||||
It returns a list of entries, each of which is itself a list containing the
|
It returns a list of entries, each of which is itself a list containing the
|
||||||
following elements identify one block of code and how many times it
|
following elements identifying one block of code and how many times it
|
||||||
has been executed.
|
has been executed.
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
|
|
|
@ -23,6 +23,9 @@ build:
|
||||||
install: build
|
install: build
|
||||||
$(MAKE) -f Mf-install
|
$(MAKE) -f Mf-install
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
$(MAKE) -f Mf-install uninstall
|
||||||
|
|
||||||
test: build
|
test: build
|
||||||
(cd mats ; $(MAKE) allx)
|
(cd mats ; $(MAKE) allx)
|
||||||
@echo "test run complete. check $(PREFIX)mats/summary for errors."
|
@echo "test run complete. check $(PREFIX)mats/summary for errors."
|
||||||
|
|
|
@ -21,6 +21,9 @@ build:
|
||||||
install:
|
install:
|
||||||
(cd $(workarea) && $(MAKE) install)
|
(cd $(workarea) && $(MAKE) install)
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
(cd $(workarea) && $(MAKE) uninstall)
|
||||||
|
|
||||||
test:
|
test:
|
||||||
(cd $(workarea) && $(MAKE) test PREFIX=$(workarea)/)
|
(cd $(workarea) && $(MAKE) test PREFIX=$(workarea)/)
|
||||||
|
|
||||||
|
|
|
@ -79,17 +79,12 @@ SchemeScriptPath=${Bin}/${InstallScriptName}
|
||||||
install: bininstall libbininstall maninstall liblibinstall
|
install: bininstall libbininstall maninstall liblibinstall
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
@echo To uninstall all machine types:
|
rm -rf ${Lib}
|
||||||
@echo rm -rf ${Lib}
|
rm -f ${PetitePath}
|
||||||
@echo rm -f ${PetitePath}
|
rm -f ${SchemePath}
|
||||||
@echo rm -f ${SchemePath}
|
rm -f ${SchemeScriptPath}
|
||||||
@echo rm -f ${Man}/${InstallPetiteName}.1'{,.gz}'
|
rm -f ${Man}/${InstallPetiteName}.1{,.gz}
|
||||||
@echo rm -f ${Man}/${InstallSchemeName}.1'{,.gz}'
|
rm -f ${Man}/${InstallSchemeName}.1{,.gz}
|
||||||
@echo ""
|
|
||||||
@echo To uninstall just machine-type $m
|
|
||||||
@echo rm -rf ${Lib}/$m
|
|
||||||
@echo rm -f ${PetitePath}
|
|
||||||
@echo rm -f ${SchemePath}
|
|
||||||
|
|
||||||
scheme.1 petite.1: scheme.1.in
|
scheme.1 petite.1: scheme.1.in
|
||||||
sed -e "s;{InstallBin};${InstallBin};g" \
|
sed -e "s;{InstallBin};${InstallBin};g" \
|
||||||
|
|
42
mats/6.ms
42
mats/6.ms
|
@ -1673,7 +1673,7 @@
|
||||||
(begin (define-record $acyclic ((immutable notme))) (record-reader '$acyclic (type-descriptor $acyclic)))
|
(begin (define-record $acyclic ((immutable notme))) (record-reader '$acyclic (type-descriptor $acyclic)))
|
||||||
|
|
||||||
(xmat
|
(xmat
|
||||||
"; Test error \"fasl object created by different release\"\n; This one is the list (a b c d) created by version 5.9b\n\n#@ |