+ The tests for the type and size of cl_fixnum have been grouped.

FIXNUM_BITS and CHAR_BIT do not rely now on "char" being 8-bit
  large.
+ All configuration settings are now grouped in config.h. This file
  has two parts, and the second one, containing flags which are only
  needed during the build process, is deleted when installing ECL.
+ File critical.h merged into lwp.h.
This commit is contained in:
jjgarcia 2002-11-20 17:26:21 +00:00
parent c7d4c73767
commit cfb16c1920
23 changed files with 264 additions and 308 deletions

View file

@ -1016,8 +1016,8 @@ ECL 0.7
RECURSIVE-P is NIL. Furthermore, EOF is detected when EOF-ERROR-P
is true, regardless of the value of RECURSIVE-P.
ECL 0.7b
========
ECL 0.8
=======
* Errors fixed:
@ -1112,6 +1112,19 @@ ECL 0.7b
- cl_special_form_p() renamed to cl_special_operator_p().
- If a wrong number of arguments is passed to a function, the name of
the function is mentioned in the error message, whenever possible.
- The tests for the type and size of cl_fixnum have been
grouped. FIXNUM_BITS and CHAR_BIT do not rely now on "char" being
8-bit large.
- All configuration settings are now grouped in config.h. This file
has two parts, and the second one, containing flags which are only
needed during the build process, is deleted when installing ECL.
- File critical.h merged into lwp.h.
* ANSI compatibility:
- DEFINE-SYMBOL-MACRO finally implemented.
@ -1120,6 +1133,13 @@ ECL 0.7b
- Added function ENSURE-DIRECTORIES-EXIST.
- CODE-CHAR would reject negative numbers.
- Remove si::*inhibit-macro-special*. When a special operator is
redefined as a macro, preserve the special nature of the
operator. Complain when user tries to redefine a special operator
as a function.
TODO:
=====

60
src/aclocal.m4 vendored
View file

@ -99,6 +99,9 @@ configure___LDFLAGS=LDFLAGS
configure___SHARED_LDFLAGS=SHARED_LDFLAGS
#endif
configure___ecl_setjmp=ecl_setjmp
configure___ecl_longjmp=ecl_longjmp
configure___architecture=ARCHITECTURE
configure___software_type=SOFTWARE_TYPE
configure___software_version=SOFTWARE_VERSION
@ -127,6 +130,10 @@ AC_MSG_CHECKING(for software type)
AC_MSG_RESULT([${software_type}])
AC_MSG_CHECKING(for software version)
AC_MSG_RESULT([${software_version}])
AC_MSG_CHECKING(use setjmp or _setjmp)
AC_MSG_RESULT([${ecl_setjmp}])
AC_MSG_CHECKING(use longjmp or _longjmp)
AC_MSG_RESULT([${ecl_longjmp}])
])
dnl
dnl --------------------------------------------------------------
@ -196,46 +203,37 @@ dnl enough that convertion back and forth to pointer implies no
dnl loss of information.
AC_DEFUN(ECL_FIXNUM_TYPE,[
AC_MSG_CHECKING(appropiate type for fixnums)
dnl
dnl 1.- Guess the type of a fixnum
dnl
AC_TRY_RUN([#include <stdio.h>
int main() {
const char *int_type;
int bits;
FILE *f=fopen("conftestval", "w");
if (!f) exit(1);
if (sizeof(int) >= sizeof(void*)) {
fprintf(f, "int\n");
unsigned int t = 1, l;
int_type="int";
for (bits=0; ((t << 1) >> 1) == t; bits++, t <<= 1);
l = (~0) << (bits - 2);
fprintf(f,"CL_FIXNUM_MIN='%d';",l);
fprintf(f,"CL_FIXNUM_MAX='%d';",-(l+1));
} else if (sizeof(long) >= sizeof(void*)) {
fprintf(f, "long\n");
unsigned long int t = 1, l;
int_type="long int";
for (bits=0; ((t << 1) >> 1) == t; bits++, t <<= 1);
l = (~0) << (bits - 2);
fprintf(f,"CL_FIXNUM_MIN='%ld';",l);
fprintf(f,"CL_FIXNUM_MAX='%ld';",-(l+1));
} else
exit(1);
fprintf(f,"CL_FIXNUM_TYPE='%s';",int_type);
fprintf(f,"CL_FIXNUM_BITS='%d'",bits);
exit(0);
}],
cl_fixnum=`cat conftestval`
AC_MSG_RESULT([${cl_fixnum}])
AC_DEFINE_UNQUOTED(CL_FIXNUM_TYPE,${cl_fixnum}),
AC_MSG_ERROR(There is no appropiate integer type for the cl_fixnum type))
dnl
dnl 2.- Guess the size of a fixnum
dnl
AC_MSG_CHECKING(most positive fixnum)
AC_TRY_RUN([#include <stdio.h>
int main() {
${cl_fixnum} i=0,j,k;
FILE *f=fopen("conftestval", "w");
if (!f) exit(1);
do {
k = i * 2 + 1;
if (k == i) exit(1);
i = k;
j = (i << 2) >> 2;
fprintf(stderr,"%d\n",i);
} while (i == j);
fprintf(f, "0x%xL\n", (long)i >> 1);
exit(0);
}],
cl_fixnum_limit=`cat conftestval`
AC_MSG_RESULT([${cl_fixnum_limit}])
AC_DEFINE_UNQUOTED(MOST_POSITIVE_FIXNUM, ${cl_fixnum_limit}),
eval "`cat conftestval`"
AC_MSG_RESULT([${CL_FIXNUM_TYPE}])
AC_SUBST(CL_FIXNUM_TYPE)
AC_SUBST(CL_FIXNUM_BITS)
AC_SUBST(CL_FIXNUM_MAX)
AC_SUBST(CL_FIXNUM_MIN),
AC_MSG_ERROR(There is no appropiate integer type for the cl_fixnum type))
])

View file

@ -30,7 +30,7 @@ HFILES = ../h/config.h $(HDIR)/ecl.h $(HDIR)/ecl-cmp.h\
$(HDIR)/machines.h $(HDIR)/object.h $(HDIR)/cs.h $(HDIR)/stacks.h\
$(HDIR)/external.h $(HDIR)/eval.h\
$(HDIR)/number.h $(HDIR)/page.h $(HDIR)/unify.h\
$(HDIR)/lwp.h $(HDIR)/critical.h
$(HDIR)/lwp.h
OBJS = main.o symbol.o package.o list.o\
apply.o eval.o interpreter.o compiler.o disassembler.o \
clos.o instance.o gfun.o reference.o character.o\
@ -57,6 +57,8 @@ all: $(DPP) ../libecl.a cinit.o
install: $(HFILES)
$(INSTALL_DATA) $(HFILES) $(PREFIX)$(libdir)/h/
sed ',-CUT-,$$d' ../h/config.h > ../h/config-install.h
$(INSTALL_DATA) ../h/config-install.h $(PREFIX)$(libdir)/h/config.h
../libecl.a: $(OBJS)
ar cr $@ $(OBJS)

View file

@ -14,12 +14,9 @@
See file '../Copyright' for full details.
*/
#include <limits.h>
#include "ecl.h"
#ifndef CHAR_BIT
#define CHAR_BIT (sizeof(char)*8)
#endif
static void displace (cl_object from, cl_object to, cl_object offset);
static void check_displaced (cl_object dlist, cl_object orig, cl_index newdim);
extern cl_elttype get_elttype (cl_object x);

View file

@ -14,13 +14,10 @@
See file '../Copyright' for full details.
*/
#include <limits.h>
#include "ecl.h"
#include "ecl-inl.h"
#ifndef CHAR_BIT
#define CHAR_BIT (sizeof(char)*8)
#endif
cl_object
si_specialp(cl_object sym)
{

View file

@ -22,6 +22,7 @@
*/
#include <ecl.h>
#include "machines.h"
#if defined(BSD) && !defined(MSDOS)
#include <sys/ioctl.h>

View file

@ -14,6 +14,7 @@
*/
#include "ecl.h"
#include "machines.h"
#include "ecl-inl.h"
#ifdef __mips

View file

@ -35,6 +35,7 @@ int data_start = (int)&data_start;
#include <stdlib.h>
#include "ecl.h"
#include "machines.h"
#ifdef TK
# include "tk.h"
#endif

View file

@ -14,15 +14,13 @@
See file '../Copyright' for full details.
*/
#include <limits.h>
#include <math.h>
#include <ctype.h>
#include "ecl.h"
#include "internal.h"
#include "ecl-inl.h"
#ifndef CHAR_BIT
#define CHAR_BIT (sizeof(char)*8)
#endif
/******************************* EXPORTS ******************************/
cl_object standard_readtable;

View file

@ -14,13 +14,10 @@
See file '../Copyright' for full details.
*/
#include <limits.h>
#include "ecl.h"
#include "ecl-inl.h"
#ifndef CHAR_BIT
#define CHAR_BIT (sizeof(char)*8)
#endif
#undef endp
#define endp(obje) (endp_temp = (obje), CONSP(endp_temp) ? \

View file

@ -20,8 +20,9 @@
#include <sys/types.h>
#include <pwd.h>
#include <sys/stat.h>
#include "ecl.h"
#include <stdlib.h>
#include "ecl.h"
#include "machines.h"
#ifdef BSD
#include <dirent.h>
#else

View file

@ -14,76 +14,9 @@
See file '../Copyright' for full details.
*/
#include <stdlib.h>
#include "ecl.h"
#include <stdlib.h>
#if 0
#if !defined(__stdlib_h) && !defined(_STDLIB_H_) && !defined(__STDLIB_H__) && !defined(_STDLIB_H)
#include <signal.h>
int
system(const char *command)
{
char buf[4];
extern sigint();
signal(SIGINT, SIG_IGN);
write(4, command, strlen(command)+1);
read(5, buf, 1);
signal(SIGINT, sigint);
return(buf[0]<<8);
}
#endif /* __STDLIB_H__ */
#if defined(__FreeBSD__) || defined(__NetBSD__)
/* due to the calls to realloc in system.c/exec.c (memory which hasn't been
malloc'ed can't be realloced in ecl) we have to patch this a bit.
We use execv and supply the arg list, so execl doesn't have to realloc. CvdL */
#include <sys/types.h>
#include <sys/signal.h>
#include <sys/wait.h>
#include <signal.h>
#include <stdlib.h>
#include <stddef.h>
#include <unistd.h>
#include <paths.h>
int
system(const char *command)
{
union wait pstat;
pid_t pid;
int omask;
sig_t intsave, quitsave;
if (!command) /* just checking... */
return(1);
omask = sigblock(sigmask(SIGCHLD));
switch(pid = vfork()) {
case -1: /* error */
(void)sigsetmask(omask);
pstat.w_status = 0;
pstat.w_retcode = 127;
return(pstat.w_status);
case 0: { /* child */
char *args[] = { "sh", "-c", command, (char *)NULL };
(void)sigsetmask(omask);
execv(_PATH_BSHELL, args);
_exit(127);
}
}
intsave = signal(SIGINT, SIG_IGN);
quitsave = signal(SIGQUIT, SIG_IGN);
pid = waitpid(pid, (int *)&pstat, 0);
(void)sigsetmask(omask);
(void)signal(SIGINT, intsave);
(void)signal(SIGQUIT, quitsave);
return(pid == -1 ? -1 : pstat.w_status);
}
#endif
#endif
#include "machines.h"
cl_object
si_system(cl_object cmd)

109
src/configure vendored
View file

@ -1312,8 +1312,6 @@ test -z "$host_alias" &&
host_alias=$ac_cv_host
ac_config_headers="$ac_config_headers h/config.h"
@ -3796,6 +3794,9 @@ configure___LDFLAGS=LDFLAGS
configure___SHARED_LDFLAGS=SHARED_LDFLAGS
#endif
configure___ecl_setjmp=ecl_setjmp
configure___ecl_longjmp=ecl_longjmp
configure___architecture=ARCHITECTURE
configure___software_type=SOFTWARE_TYPE
configure___software_version=SOFTWARE_VERSION
@ -3835,6 +3836,14 @@ echo "$as_me:$LINENO: checking for software version" >&5
echo $ECHO_N "checking for software version... $ECHO_C" >&6
echo "$as_me:$LINENO: result: ${software_version}" >&5
echo "${ECHO_T}${software_version}" >&6
echo "$as_me:$LINENO: checking use setjmp or _setjmp" >&5
echo $ECHO_N "checking use setjmp or _setjmp... $ECHO_C" >&6
echo "$as_me:$LINENO: result: ${ecl_setjmp}" >&5
echo "${ECHO_T}${ecl_setjmp}" >&6
echo "$as_me:$LINENO: checking use longjmp or _longjmp" >&5
echo $ECHO_N "checking use longjmp or _longjmp... $ECHO_C" >&6
echo "$as_me:$LINENO: result: ${ecl_longjmp}" >&5
echo "${ECHO_T}${ecl_longjmp}" >&6
if test "x$prefix" = "xNONE"; then prefix=${ac_default_prefix}; fi
@ -4086,14 +4095,28 @@ else
#include "confdefs.h"
#include <stdio.h>
int main() {
const char *int_type;
int bits;
FILE *f=fopen("conftestval", "w");
if (!f) exit(1);
if (sizeof(int) >= sizeof(void*)) {
fprintf(f, "int\n");
unsigned int t = 1, l;
int_type="int";
for (bits=0; ((t << 1) >> 1) == t; bits++, t <<= 1);
l = (~0) << (bits - 2);
fprintf(f,"CL_FIXNUM_MIN='%d';",l);
fprintf(f,"CL_FIXNUM_MAX='%d';",-(l+1));
} else if (sizeof(long) >= sizeof(void*)) {
fprintf(f, "long\n");
unsigned long int t = 1, l;
int_type="long int";
for (bits=0; ((t << 1) >> 1) == t; bits++, t <<= 1);
l = (~0) << (bits - 2);
fprintf(f,"CL_FIXNUM_MIN='%ld';",l);
fprintf(f,"CL_FIXNUM_MAX='%ld';",-(l+1));
} else
exit(1);
fprintf(f,"CL_FIXNUM_TYPE='%s';",int_type);
fprintf(f,"CL_FIXNUM_BITS='%d'",bits);
exit(0);
}
_ACEOF
@ -4108,67 +4131,12 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
cl_fixnum=`cat conftestval`
echo "$as_me:$LINENO: result: ${cl_fixnum}" >&5
echo "${ECHO_T}${cl_fixnum}" >&6
cat >>confdefs.h <<_ACEOF
#define CL_FIXNUM_TYPE ${cl_fixnum}
_ACEOF
eval "`cat conftestval`"
echo "$as_me:$LINENO: result: ${CL_FIXNUM_TYPE}" >&5
echo "${ECHO_T}${CL_FIXNUM_TYPE}" >&6
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
( exit $ac_status )
{ { echo "$as_me:$LINENO: error: There is no appropiate integer type for the cl_fixnum type" >&5
echo "$as_me: error: There is no appropiate integer type for the cl_fixnum type" >&2;}
{ (exit 1); exit 1; }; }
fi
rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
echo "$as_me:$LINENO: checking most positive fixnum" >&5
echo $ECHO_N "checking most positive fixnum... $ECHO_C" >&6
if test "$cross_compiling" = yes; then
{ { echo "$as_me:$LINENO: error: cannot run test program while cross compiling" >&5
echo "$as_me: error: cannot run test program while cross compiling" >&2;}
{ (exit 1); exit 1; }; }
else
cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
#include "confdefs.h"
#include <stdio.h>
int main() {
${cl_fixnum} i=0,j,k;
FILE *f=fopen("conftestval", "w");
if (!f) exit(1);
do {
k = i * 2 + 1;
if (k == i) exit(1);
i = k;
j = (i << 2) >> 2;
fprintf(stderr,"%d\n",i);
} while (i == j);
fprintf(f, "0x%xL\n", (long)i >> 1);
exit(0);
}
_ACEOF
rm -f conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && { ac_try='./conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
cl_fixnum_limit=`cat conftestval`
echo "$as_me:$LINENO: result: ${cl_fixnum_limit}" >&5
echo "${ECHO_T}${cl_fixnum_limit}" >&6
cat >>confdefs.h <<_ACEOF
#define MOST_POSITIVE_FIXNUM ${cl_fixnum_limit}
_ACEOF
else
echo "$as_me: program exited with status $ac_status" >&5
@ -5614,6 +5582,10 @@ ac_config_files="$ac_config_files compile.lsp compile_rest.lsp bare.lsp lsp/conf
ac_config_files="$ac_config_files ecl-config:util/ecl-config"
ac_config_files="$ac_config_files h/configpre:h/config.h.in"
ac_config_headers="$ac_config_headers h/config.h:h/configpre"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
@ -6106,7 +6078,8 @@ do
"cmp/defsys.lsp" ) CONFIG_FILES="$CONFIG_FILES cmp/defsys.lsp" ;;
"clos/defsys.lsp" ) CONFIG_FILES="$CONFIG_FILES clos/defsys.lsp" ;;
"ecl-config" ) CONFIG_FILES="$CONFIG_FILES ecl-config:util/ecl-config" ;;
"h/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS h/config.h" ;;
"h/configpre" ) CONFIG_FILES="$CONFIG_FILES h/configpre:h/config.h.in" ;;
"h/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS h/config.h:h/configpre" ;;
*) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
{ (exit 1); exit 1; }; };;
@ -6223,6 +6196,8 @@ s,@SHARED_LDFLAGS@,$SHARED_LDFLAGS,;t t
s,@architecture@,$architecture,;t t
s,@software_type@,$software_type,;t t
s,@software_version@,$software_version,;t t
s,@ecl_setjmp@,$ecl_setjmp,;t t
s,@ecl_longjmp@,$ecl_longjmp,;t t
s,@SHORT_SITE_NAME@,$SHORT_SITE_NAME,;t t
s,@LONG_SITE_NAME@,$LONG_SITE_NAME,;t t
s,@EXTRA_OBJS@,$EXTRA_OBJS,;t t
@ -6241,6 +6216,10 @@ s,@MACHINE_VERSION@,$MACHINE_VERSION,;t t
s,@OS_TYPE@,$OS_TYPE,;t t
s,@OS_RELEASE@,$OS_RELEASE,;t t
s,@DOWN_STACK@,$DOWN_STACK,;t t
s,@CL_FIXNUM_TYPE@,$CL_FIXNUM_TYPE,;t t
s,@CL_FIXNUM_BITS@,$CL_FIXNUM_BITS,;t t
s,@CL_FIXNUM_MAX@,$CL_FIXNUM_MAX,;t t
s,@CL_FIXNUM_MIN@,$CL_FIXNUM_MIN,;t t
s,@X_CFLAGS@,$X_CFLAGS,;t t
s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t
s,@X_LIBS@,$X_LIBS,;t t

View file

@ -37,7 +37,6 @@ AC_SUBST(ECL_VERSION)
dnl Guess operating system of host. We do not allow cross-compiling.
AC_CANONICAL_HOST
AC_CONFIG_HEADER(h/config.h)
AC_SUBST(host)
AC_SUBST(bindir)
AC_SUBST(mandir)
@ -109,6 +108,8 @@ AC_SUBST(SHARED_LDFLAGS)dnl Flags for shared libraries linker
AC_SUBST(architecture)dnl Type of processor for which this is compiled
AC_SUBST(software_type)dnl Type of operating system
AC_SUBST(software_version)dnl Version number of operating system
AC_SUBST(ecl_setjmp)dnl Function to use for setjmp
AC_SUBST(ecl_longjmp)dnl Function to use for longjmp
AC_SUBST(SHORT_SITE_NAME)dnl Short name for the machine we built this on
AC_SUBST(LONG_SITE_NAME)dnl Long name for the machine we built this on
AC_SUBST(EXTRA_OBJS)dnl Extra *.o files to be compiled into libecl.a
@ -321,10 +322,15 @@ fi
dnl ---------------------------------------------------------------------
dnl Final pass over configuration files
dnl
dnl Notice that we build ${builddir}/h/configpre.h fron ${srcdir}/h/config.h.in,
dnl and then use all AC_DEF* to build h/config.h from h/configpre.h
dnl
AC_CONFIG_FILES(compile.lsp compile_rest.lsp bare.lsp
lsp/config.lsp cmp/cmpcfg.lsp lsp/load.lsp clos/load.lsp cmp/load.lsp
../Makefile Makefile c/Makefile doc/Makefile
tk/Makefile clx/defsys.lsp tests/Makefile ansi-tests/Makefile gabriel/Makefile
lsp/defsys.lsp cmp/defsys.lsp clos/defsys.lsp)
AC_CONFIG_FILES([ecl-config:util/ecl-config],[chmod +x ecl-config])
AC_CONFIG_FILES([h/configpre:h/config.h.in])
AC_CONFIG_HEADER([h/config.h:h/configpre])
AC_OUTPUT

View file

@ -3,6 +3,7 @@
*/
/*
Copyright (c) 1990, Giuseppe Attardi.
Copyright (c) 2001, Juan Jose Garcia Ripoll.
ECoLisp is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
@ -12,17 +13,77 @@
See file '../Copyright' for full details.
*/
/*
* FEATURES LINKED IN
*/
/* Always use CLOS */
#define CLOS
/* -------------------------------------------------------------------- *
* OPTIONS *
* -------------------------------------------------------------------- */
/* Use Boehm's garbage collector */
#undef GBC_BOEHM
#define CLOS /* Always use CLOS */
/* Userland threads? */
#undef THREADS
#undef TK
/* Network streams */
#undef TCP
/*
* C TYPES AND SYSTEM LIMITS
*/
/*
* The integer type
*
* cl_fixnum must be an integer type, large enough to hold a pointer.
* Ideally, according to the ISOC99 standard, we should use intptr_t,
* but the required headers are not present in all systems. Hence we
* use autoconf to guess the following values.
*/
#define FIXNUM_BITS @CL_FIXNUM_BITS@
#define MOST_POSITIVE_FIXNUM ((cl_fixnum)@CL_FIXNUM_MAX@)
#define MOST_NEGATIVE_FIXNUM ((cl_fixnum)@CL_FIXNUM_MIN@)
typedef @CL_FIXNUM_TYPE@ cl_fixnum;
typedef unsigned @CL_FIXNUM_TYPE@ cl_index;
typedef unsigned @CL_FIXNUM_TYPE@ cl_hashkey;
/*
* The character type
*/
#define CHAR_CODE_LIMIT 256
/*
* Array limits
*/
#define ARANKLIM 64 /* array rank limit */
#define ADIMLIM 16*1024*1024 /* array dimension limit */
#define ATOTLIM 16*1024*1024 /* array total limit */
/*
* Function limits
*/
/* Maximum number of function arguments */
#define CALL_ARGUMENTS_LIMIT @CL_FIXNUM_MAX@
/* Maximum number of required arguments */
#define LAMBDA_PARAMETERS_LIMIT 64
/* Numb. of args. which can be passed using the C stack */
#define C_ARGUMENTS_LIMIT 64
/* Which functions to use for setting jump points */
#define ecl_setjmp @ecl_setjmp@
#define ecl_longjmp @ecl_longjmp@
/* -CUT-: Everything below this mark will not be installed */
/* -------------------------------------------------------------------- *
* BUILD OPTIONS WHICH NEED NOT BE EXPORTED *
* -------------------------------------------------------------------- */
/*
* FEATURES LINKED IN:
*/
/* CLX */
#undef CLX
/* Locatives */
@ -37,51 +98,21 @@
/* Program Development Environment */
#undef PDE
/* Use Boehm's garbage collector */
#undef GBC_BOEHM
/* Tcl/Tk library */
#undef TK
/* Allow loading dynamically linked code */
#undef ENABLE_DLOPEN
/* Undefine this if you do not want ECL to check for circular lists */
/* Undefine this if you do not want ECL to check for circular lists */
#define ECL_SAFE
/* Allow STREAM operations to work on arbitrary objects */
#undef ECL_CLOS_STREAMS
/* -------------------------------------------------------------------- *
* PARAMETERS *
* -------------------------------------------------------------------- */
#define LISP_PAGESIZE 2048 /* Page size in bytes */
#define MAXPAGE 16384 /* Maximum Memory Size */
#define BDSSIZE 2048 /* Size of Binding Stack */
#define BDSGETA 16 /* Safety zone of BDS */
#define FRSSIZE 1024 /* Size of Frame Stack */
#define FRSGETA 16 /* Safety zone of FRS */
#ifdef THREADS
#define CSSIZE 7500 /* Size of C Stack of each thread */
#define CSGETA 500
#else
#define CSSIZE 20000 /* Size of C Stack */
#define CSGETA 4000
#endif
#define VSSIZE 128 /* Size of return values stack */
/* Maximum number of function arguments */
#define CALL_ARGUMENTS_LIMIT MOST_POSITIVE_FIXNUM
/* Maximum number of required arguments */
#define LAMBDA_PARAMETERS_LIMIT 64
/* Numb. of args. which can be passed using the C stack */
#define C_ARGUMENTS_LIMIT 64
#define BIGNUM_REGISTER_SIZE 16 /* Size in words of each register */
/* -------------------------------------------------------------------- *
* SYSTEM FEATURES *
* -------------------------------------------------------------------- */
#define CL_FIXNUM_TYPE 1 /* Integer type for fixnums */
#define MOST_POSITIVE_FIXNUM 1 /* Positive limit for fixnums */
/*
* SYSTEM FEATURES:
*/
/* Stack grows downwards */
#undef DOWN_STACK
@ -97,3 +128,33 @@
#undef HAVE_ISNANF
/* float.h for epsilons, maximum real numbers, etc */
#undef HAVE_FLOAT_H
/*
* PARAMETERS:
*/
/*
* Memory limits for the old garbage collector.
*/
#define LISP_PAGESIZE 2048 /* Page size in bytes */
#define MAXPAGE 16384 /* Maximum Memory Size */
/*
* The lisp environment has several stacks. These are their limits:
*/
#define BDSSIZE 2048 /* Size of Binding Stack */
#define BDSGETA 16 /* Safety zone of BDS */
#define FRSSIZE 1024 /* Size of Frame Stack */
#define FRSGETA 16 /* Safety zone of FRS */
#ifdef THREADS
#define CSSIZE 7500 /* Size of C Stack of each thread */
#define CSGETA 500
#else
#define CSSIZE 20000 /* Size of C Stack */
#define CSGETA 4000
#endif
#define VSSIZE 128 /* Size of return values stack */
/* We reserve these many bytes for computation with bignums registers */
#define BIGNUM_REGISTER_SIZE 16

View file

@ -1,43 +0,0 @@
/*
critical.h -- Mutual exclusion.
*/
/*
Copyright (c) 1990, Giuseppe Attardi.
ECoLisp 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.
See file '../Copyright' for full details.
*/
/*
* SCHEDULER STOPPING
*/
#ifdef THREADS
#define BUSY 1
#define CRITICAL 5
#define ACTIVE 1
#define INACTIVE 0
#define SCHEDULER_INT 1
#define ERROR_INT 2
extern bool scheduler_interrupted;
extern int critical_level;
#define start_critical_section() {critical_level++;}
#define end_critical_section() { critical_level--; \
if (scheduler_interrupted) \
if (critical_level == 0) \
interruption_handler(); }
#endif /* THREADS */
/*
* EMPTY MACROS FOR SINGLE-THREADED CODE
*/
#ifndef THREADS
#define start_critical_section()
#define end_critical_section()
#endif /* !THREADS */

View file

@ -13,20 +13,22 @@
See file '../Copyright' for full details.
*/
#include "config.h"
#include "machines.h"
#include <sys/param.h>
#include <sys/types.h>
#include <stddef.h>
#include <stdio.h>
#include <stdarg.h>
#include <setjmp.h>
#include <math.h>
#include <sys/types.h>
#include "config.h"
#include "gmp.h"
#include "object.h"
#include "stacks.h"
#ifdef THREADS
#include "lwp.h"
#include "critical.h"
# include "lwp.h"
#else
# define start_critical_section()
# define end_critical_section()
#endif
#include "external.h"
#include "eval.h"
@ -40,12 +42,6 @@
if ((int *)(&narg) < cs_limit) \
cs_overflow()
#define LINK_ARGS &narg
#define TRAMPOLINK(narg, vv, lk) \
cl_va_list args; cl_va_start(args, narg, narg, 0); \
return(link_call(vv, (cl_objectfn *)lk, narg, args))
#define cclosure_call funcall
#define Creturn(v) return((VALUES(0)=(v),1))
#define Cexit return(0)

View file

@ -15,21 +15,22 @@
#include <sys/param.h> /* includes <sys/signal.h> and <sys/types.h> */
#include <sys/types.h> /* for EMX */
#include "config.h"
#include "machines.h"
#include <stddef.h>
#include <stdio.h>
#include <stdarg.h>
#include <setjmp.h>
#include "config.h"
#include "gmp.h"
#include "object.h"
#include "stacks.h"
#include "critical.h"
#ifdef THREADS
# include "lwp.h"
#else
# define start_critical_section()
# define end_critical_section()
#endif
#ifndef _ARGS
#define _ARGS(x) x
# define _ARGS(x) x
#endif
#include "external.h"
/*#include "ecl-inl.h"*/

View file

@ -16,6 +16,12 @@
extern "C" {
#endif
/* -------------------------------------------------------------------- *
* FUNCTIONS, VARIABLES AND TYPES NOT FOR GENERAL USE *
* -------------------------------------------------------------------- */
#include "machines.h"
/* all_symbols.d */
extern cl_index cl_num_symbols_in_core;
@ -54,6 +60,9 @@ extern void edit_double(int n, double d, int *sp, char *s, int *ep);
extern void cl_setup_printer(cl_object strm);
extern void cl_write_object(cl_object x);
/* read.d */
#define RTABSIZE CHAR_CODE_LIMIT /* read table size */
#ifdef __cplusplus
}
#endif

View file

@ -225,3 +225,23 @@ typedef struct pd {
#define REALQUANTUM 100000 /* "" */
#define STACK_SIZE (CSSIZE+CSGETA) /* Words */
/*
* SCHEDULER STOPPING
*/
#define BUSY 1
#define CRITICAL 5
#define ACTIVE 1
#define INACTIVE 0
#define SCHEDULER_INT 1
#define ERROR_INT 2
extern bool scheduler_interrupted;
extern int critical_level;
#define start_critical_section() {critical_level++;}
#define end_critical_section() { critical_level--; \
if (scheduler_interrupted) \
if (critical_level == 0) \
interruption_handler(); }

View file

@ -19,6 +19,7 @@
# define stack_align(n) (((n) + 03) & ~03)
#endif
#ifndef ecl_setjmp
#if defined(linux)
# define ecl_setjmp setjmp
# define ecl_longjmp longjmp
@ -26,6 +27,7 @@
# define ecl_setjmp _setjmp
# define ecl_longjmp _longjmp
#endif
#endif
#ifdef __linux__
# define FILE_CNT(fp) ((fp)->_IO_read_end - (fp)->_IO_read_ptr)

View file

@ -19,15 +19,7 @@ extern "C" {
#endif
/*
Some system constants.
*/
/*
INV: CHAR_CODE_LIMIT is a power of two and <= MOST_POSITIVE_FIXNUM/2
INV: PHTABSIZE is a power of two
INV: ARANKLIM is of type "index"
INV: fixnum, cl_index are large enough to hold a pointer
INV: symbol and cons share cons.car = symbol.dbind, cons.cdr = symbol.sfun.
Integer and boolean types (see config.h)
*/
#define TRUE 1 /* boolean true value */
@ -35,20 +27,9 @@ extern "C" {
#define CHAR_CODE_LIMIT 256 /* ASCII character code limit */
#define PHTABSIZE 512 /* number of entries in the package hash table */
#define ARANKLIM 64 /* array rank limit */
#define ADIMLIM 16*1024*1024 /* array dimension limit */
#define ATOTLIM 16*1024*1024 /* array total limit */
#define RTABSIZE CHAR_CODE_LIMIT /* read table size */
#ifndef __cplusplus
typedef int bool;
#endif
typedef CL_FIXNUM_TYPE cl_fixnum;
typedef unsigned CL_FIXNUM_TYPE cl_index;
typedef unsigned CL_FIXNUM_TYPE cl_hashkey;
typedef unsigned char byte;
/*
@ -73,8 +54,6 @@ typedef cl_object (*cl_objectfn)(int narg, ...);
/* Immediate fixnums: */
#define FIXNUM_TAG 1
#define FIXNUM_BITS ((sizeof)(cl_fixnum)/sizeof(byte)*8 - 2)
#define MOST_NEGATIVE_FIXNUM (-MOST_POSITIVE_FIXNUM-1)
#define MAKE_FIXNUM(n) ((cl_object)(((cl_fixnum)(n) << 2) | FIXNUM_TAG))
#define FIXNUM_MINUSP(n) ((cl_fixnum)(n) < 0)
#define FIXNUM_PLUSP(n) ((cl_fixnum)(n) >= (cl_fixnum)MAKE_FIXNUM(0))

View file

@ -201,7 +201,7 @@ extern size_t cssize;
extern cl_object *Values;
#else
extern int NValues;
extern cl_object Values[VSSIZE];
extern cl_object Values[];
#endif
/*****************************