diff --git a/src/CHANGELOG b/src/CHANGELOG index c478099e6..5b6c745c0 100644 --- a/src/CHANGELOG +++ b/src/CHANGELOG @@ -741,6 +741,12 @@ ECLS 0.3b - Bit fiddling operations with negative fixnums now work (i.e. LOGAND, LOGOR, LOGBITP, etc). +* System design and portability: + + - Remove unportable code of the type "va_list d = cs". + + - Simplify gathering of &rest and &key arguments in compiled code. + TODO: ===== diff --git a/src/c/big.d b/src/c/big.d index 39a9c9882..27fd380be 100644 --- a/src/c/big.d +++ b/src/c/big.d @@ -83,7 +83,7 @@ big_register_normalize(cl_object x) if (y <= MOST_POSITIVE_FIX) return(MAKE_FIXNUM(y)); } else if (s == -1) { - if (y <= -MOST_POSITIVE_FIX) + if (y <= -MOST_NEGATIVE_FIX) return(MAKE_FIXNUM(-y)); } return big_register_copy(x); diff --git a/src/c/character.d b/src/c/character.d index 7be8aed5f..cbd082e13 100644 --- a/src/c/character.d +++ b/src/c/character.d @@ -153,14 +153,17 @@ char_eq(cl_object x, cl_object y) @(defun char/= (&rest cs) int i, j; + cl_object c; @ /* INV: char_eq() checks types of its arguments */ if (narg == 0) @(return Ct) - for (i = narg-1; i; i--) { - cl_object c = cl_nextarg(cs); - va_list ds = cs; - for (j = i; j; j--) + c = cl_nextarg(cs); + for (i = 2; i<=narg; i++) { + va_list ds; + va_start(ds, narg); + c = cl_nextarg(cs); + for (j = 1; j 0; i--) { - CAR(rest) = *(p++); - rest = CDR(rest); - } - } + if (rest != NULL) *rest = Cnil; for (i = 0; i < 2*nkey; i++) vars[i] = Cnil; /* default values: NIL, supplied: NIL */ @@ -256,6 +259,10 @@ parse_key( for (; narg>=2; narg-= 2) { cl_object keyword = *(args++); cl_object value = *(args++); + if (rest != NULL) { + rest = &CDR(*rest = CONS(keyword, Cnil)); + rest = &CDR(*rest = CONS(value, Cnil)); + } for (i = 0; i < nkey; i++) { if (keys[i] == keyword) { if (vars[nkey+i] == Cnil) { @@ -266,27 +273,33 @@ parse_key( } } /* the key is a new one */ - if (!allow_other_keys) { - if (keyword == @':allow-other-keys') - allow_other_keys = (value != Cnil); - else { - cl_object *p = args; - /* look for :allow-other-keys t */ - for (i = narg-2; i >= 0; i -= 2, p -=2) - if (*(p++) == @':allow-other-keys') { - allow_other_keys = (*(p++) != Cnil); - break; - } - if (!allow_other_keys) - FEprogram_error("Unrecognized key ~a", 1, keyword); - } - } + if (keyword == @':allow-other-keys') { + if (supplied_allow_other_keys == OBJNULL) + supplied_allow_other_keys = value; + } else if (unknown_keyword != OBJNULL) + unknown_keyword = keyword; go_on: } - if (narg != 0) FEprogram_error("Odd number of keys", 0); + if (narg != 0) + FEprogram_error("Odd number of keys", 0); + if (unknown_keyword != OBJNULL && !allow_other_keys && + supplied_allow_other_keys != Cnil) + FEprogram_error("Unknown keyword ~S", 1, unknown_keyword); } #ifdef NO_ARGS_ARRAY +cl_object +va_grab_rest_args(int narg, va_list args) +{ + cl_object rest = Cnil; + cl_object *r = &rest; + while (narg--) { + *r = CONS(cl_nextarg(args), Cnil); + r = &CDR(*r); + } + return rest; +} + void va_parse_key( int narg, /* number of actual args */ @@ -295,19 +308,14 @@ va_parse_key( cl_object *keys, /* keywords for the function */ cl_object *vars, /* where to put values (vars[0..nkey-1]) and suppliedp (vars[nkey..2*nkey-1]) */ - cl_object rest, /* rest variable or NULL */ + cl_object *rest, /* if rest != NULL, where to collect rest values */ bool allow_other_keys) /* whether other key are allowed */ { int i; + cl_object supplied_allow_other_keys = OBJNULL; + cl_object unknown_keyword = OBJNULL; - /* fill in the rest arg list */ - if (rest != OBJNULL) { - va_list p = args; - for (i = narg; i > 0; i--) { - CAR(rest) = cl_nextarg(p); - rest = CDR(rest); - } - } + if (rest != NULL) *rest = Cnil; for (i = 0; i < 2*nkey; i++) vars[i] = Cnil; /* default values: NIL, supplied: NIL */ @@ -316,6 +324,10 @@ va_parse_key( for (; narg>=2; narg-= 2) { cl_object keyword = cl_nextarg(args); cl_object value = cl_nextarg(args); + if (rest != NULL) { + rest = &CDR(*rest = CONS(keyword, Cnil)); + rest = &CDR(*rest = CONS(value, Cnil)); + } for (i = 0; i < nkey; i++) { if (keys[i] == keyword) { if (vars[nkey+i] == Cnil) { @@ -326,24 +338,18 @@ va_parse_key( } } /* the key is a new one */ - if (!allow_other_keys) { - if (keyword == @':allow-other-keys') - allow_other_keys = (value != Cnil); - else { - va_list p = args; - /* look for :allow-other-keys t */ - for (i = narg-2; i >= 0; i -= 2, p -=2) - if (cl_nextarg(p) == @':allow-other-keys') { - allow_other_keys = (cl_nextarg(p) != Cnil); - break; - } - if (!allow_other_keys) - FEprogram_error("Unrecognized key ~a", 1, keyword); - } - } + if (keyword == @':allow-other-keys') { + if (supplied_allow_other_keys == OBJNULL) + supplied_allow_other_keys = value; + } else if (unknown_keyword != OBJNULL) + unknown_keyword = keyword; go_on: } - if (narg != 0) FEprogram_error("Odd number of keys", 0); + if (narg != 0) + FEprogram_error("Odd number of keys", 0); + if (unknown_keyword != OBJNULL && !allow_other_keys && + supplied_allow_other_keys != Cnil) + FEprogram_error("Unknown keyword ~S", 1, unknown_keyword); } #endif NO_ARGS_ARRAY diff --git a/src/c/dpp.c b/src/c/dpp.c index 87d4f7216..c2c4e6836 100644 --- a/src/c/dpp.c +++ b/src/c/dpp.c @@ -644,8 +644,8 @@ put_declaration(void) fprintf(out, "\tKEYS[%d]=K%s;\n", i, keyword[i].k_key); } put_lineno(); - fprintf(out, "\tva_parse_key(narg-%d, ARGS, %d, KEYS, KEY_VARS, %s, %d);\n", - nreq+nopt, nkey, rest_flag ? rest_var : "OBJNULL", allow_other_keys_flag); + fprintf(out, "\tva_parse_key(narg-%d, ARGS, %d, KEYS, KEY_VARS, NULL, %d);\n", + nreq+nopt, nkey, allow_other_keys_flag); for (i = 0; i < nkey; i++) { put_lineno(); fprintf(out, "\tif (KEY_VARS[%d]==Cnil) {\n", nkey+i); diff --git a/src/c/num_comp.d b/src/c/num_comp.d index 7543806c4..378dd5878 100644 --- a/src/c/num_comp.d +++ b/src/c/num_comp.d @@ -256,15 +256,17 @@ number_compare(cl_object x, cl_object y) } } -@(defun /= (&rest nums) +@(defun /= (&rest nums &aux numi) int i, j; @ if (narg == 0) FEtoo_few_arguments(&narg); - for (i = narg-1; i; i--) { - cl_object numi = cl_nextarg(nums); - va_list numb = nums; - for (j = i; j; j--) + numi = cl_nextarg(nums); + for (i = 2; i<=narg; i++) { + va_list numb; + va_start(numb, narg); + numi = cl_nextarg(nums); + for (j = 1; j0;p=CDR(p))") - (wt-nl " CAR(p)=") (wt-va_arg (eq 'CALL-LAMBDA kind)) (wt ";i++;}") + (if (eq 'CALL-LAMBDA kind) + (wt "=grab_rest_args(narg,args);") + (wt "=va_grab_rest_args(narg,args);")) (bind rest-loc rest)) (when *tail-recursion-info* @@ -584,32 +581,17 @@ (if optionals (wt-nl "narg -= i;") (wt-nl "narg -=" nreq ";")) - (when rest - (wt-nl rest-loc) - (if (eq (var-type rest) :DYNAMIC-EXTENT) - (wt "=(ALLOCA_CONS(narg), ON_STACK_MAKE_LIST(narg));") - (wt "=make_list(narg);")) - ;; don't clobber narg, needed by parse_key - (wt-nl "{ int n=narg; cl_object p=" rest-loc ";") - (wt-nl " for(;n-->0;p=CDR(p))") - (wt-nl " CAR(p)=") (wt-va_arg call-lambda) (wt ";i++;}") - (bind rest-loc rest)) (wt-h "#define L" cfun "keys (&" (add-keyword (caar keywords)) ")") (dolist (kwd (rest keywords)) (add-keyword (first kwd))) (wt-nl "{ cl_object keyvars[" (* 2 nkey) "];") - (when rest - (if call-lambda - (wt-nl "args -= narg;") - (wt-nl "va_start(args," last-arg ");"))) (wt-nl (if call-lambda "parse_key(narg,args," "va_parse_key(narg,args,") - (length keywords) ",L" cfun "keys,keyvars,") - (if rest - (wt rest-loc) - (wt "OBJNULL")) + (length keywords) ",L" cfun "keys,keyvars") + (if rest (wt ",&" rest-loc) (wt ",NULL")) (wt (if allow-other-keys ",TRUE);" ",FALSE);")) + (when rest (bind rest-loc rest)) ;;; Bind keywords. (let ((KEYVARS[i] `(KEYVARS 0)) ; create, since we clobber it diff --git a/src/cmp/cmpwt.lsp b/src/cmp/cmpwt.lsp index 8681209dd..0b2a47ad9 100644 --- a/src/cmp/cmpwt.lsp +++ b/src/cmp/cmpwt.lsp @@ -114,8 +114,8 @@ (*print-array* t) (*read-default-float-format* 'single-float) ;(*package* *compiler-package*) - ;(sys::*print-package* *compiler-package*) - (sys::*print-package* (symbol-package 'nil)) + ;(sys::*print-package* (symbol-package nil)) + (sys::*print-package* *compiler-package*) (sys::*print-structure* t)) (wt-filtered-data (typecase expr @@ -140,8 +140,10 @@ (si::select-package (let ((output (t1ordinary form))) (cmp-eval form) - (let ((package-name (cadr form))) - (setq *compiler-package* (si::select-package package-name))) + (let ((package-name (string (cadr form)))) + (setq *compiler-package* (si::select-package package-name)) + (setq package-name (package-name *compiler-package*)) + (wt-filtered-data (format nil "#!0 ~s" package-name))) output)) ;#+nil(wt-filtered-data (format nil "#!0 ~s" (string package-name))))) (si::%defpackage diff --git a/src/configure b/src/configure index dcf22137f..cc1449171 100755 --- a/src/configure +++ b/src/configure @@ -11,8 +11,6 @@ ac_help= ac_default_prefix=/usr/local # Any additions from configure.in: -ac_help="$ac_help - --disable-clos Don't include CLOS." ac_help="$ac_help --enable-boehm Enable Boehm & Weiser's garbage collector." ac_help="$ac_help @@ -545,7 +543,7 @@ echo "***" exit 2; fi -ECLS_VERSION=0.2 +ECLS_VERSION=0.3 ac_aux_dir= @@ -574,7 +572,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:578: checking host system type" >&5 +echo "configure:576: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -603,14 +601,6 @@ echo "$ac_t""$host" 1>&6 -# Check whether --enable-clos or --disable-clos was given. -if test "${enable_clos+set}" = set; then - enableval="$enable_clos" - clos=`test "$enable_clos" != "no"` -else - clos=1 -fi - # Check whether --enable-boehm or --disable-boehm was given. if test "${enable_boehm+set}" = set; then enableval="$enable_boehm" @@ -644,7 +634,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:648: checking for $ac_word" >&5 +echo "configure:638: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -674,7 +664,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:678: checking for $ac_word" >&5 +echo "configure:668: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -725,7 +715,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:729: checking for $ac_word" >&5 +echo "configure:719: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -757,7 +747,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:761: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:751: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -768,12 +758,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 772 "configure" +#line 762 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -799,12 +789,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:803: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:793: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:808: checking whether we are using GNU C" >&5 +echo "configure:798: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -813,7 +803,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:817: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:807: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -832,7 +822,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:836: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:826: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -867,7 +857,7 @@ if test "$GCC" != "yes"; then { echo "configure: error: Cannot build ECLS without GCC" 1>&2; exit 1; } fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:871: checking how to run the C preprocessor" >&5 +echo "configure:861: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -882,13 +872,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:892: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:882: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -899,13 +889,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:909: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:899: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -916,13 +906,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:926: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:916: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -949,7 +939,7 @@ echo "$ac_t""$CPP" 1>&6 # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:953: checking for $ac_word" >&5 +echo "configure:943: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -988,7 +978,7 @@ fi # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:992: checking for a BSD compatible install" >&5 +echo "configure:982: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1041,7 +1031,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # sets variables INSTALL, INSTALL_DATA, INSTALL_PROGRAM echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:1045: checking whether ln -s works" >&5 +echo "configure:1035: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1094,7 +1084,7 @@ fi echo $ac_n "checking for getpwnam in -lsun""... $ac_c" 1>&6 -echo "configure:1098: checking for getpwnam in -lsun" >&5 +echo "configure:1088: checking for getpwnam in -lsun" >&5 ac_lib_var=`echo sun'_'getpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1102,7 +1092,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsun $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1145,17 +1135,17 @@ for ac_hdr in sys/resource.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:1149: checking for $ac_hdr" >&5 +echo "configure:1139: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1159: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1149: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1185,17 +1175,17 @@ for ac_hdr in sys/utsname.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:1189: checking for $ac_hdr" >&5 +echo "configure:1179: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1199: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1225,17 +1215,17 @@ for ac_hdr in float.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:1229: checking for $ac_hdr" >&5 +echo "configure:1219: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1239: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1229: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1264,12 +1254,12 @@ done for ac_func in nanosleep do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1268: checking for $ac_func" >&5 +echo "configure:1258: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -1317,7 +1307,7 @@ fi done echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1321: checking for POSIXized ISC" >&5 +echo "configure:1311: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1416,19 +1406,19 @@ eval `${CPP} -D${host} ${tempcname} \ rm ${tempcname} echo $ac_n "checking for ld flags when building shared libraries""... $ac_c" 1>&6 -echo "configure:1420: checking for ld flags when building shared libraries" >&5 +echo "configure:1410: checking for ld flags when building shared libraries" >&5 echo "$ac_t""${SHARED_LDFLAGS}" 1>&6 echo $ac_n "checking for required libraries""... $ac_c" 1>&6 -echo "configure:1423: checking for required libraries" >&5 +echo "configure:1413: checking for required libraries" >&5 echo "$ac_t""${CLIBS}" 1>&6 echo $ac_n "checking for architecture""... $ac_c" 1>&6 -echo "configure:1426: checking for architecture" >&5 +echo "configure:1416: checking for architecture" >&5 echo "$ac_t""${architecture}" 1>&6 echo $ac_n "checking for software type""... $ac_c" 1>&6 -echo "configure:1429: checking for software type" >&5 +echo "configure:1419: checking for software type" >&5 echo "$ac_t""${software_type}" 1>&6 echo $ac_n "checking for software version""... $ac_c" 1>&6 -echo "configure:1432: checking for software version" >&5 +echo "configure:1422: checking for software version" >&5 echo "$ac_t""${software_version}" 1>&6 @@ -1457,12 +1447,8 @@ test "${boehm}" && cat >> confdefs.h <<\EOF EOF echo $ac_n "checking for clos""... $ac_c" 1>&6 -echo "configure:1461: checking for clos" >&5 +echo "configure:1451: checking for clos" >&5 echo "$ac_t""${clos}" 1>&6 -test "${clos}" && cat >> confdefs.h <<\EOF -#define CLOS 1 -EOF - test "${tk}" && cat >> confdefs.h <<\EOF #define TK 1 EOF @@ -1494,13 +1480,13 @@ EOF echo $ac_n "checking whether stack growns downwards""... $ac_c" 1>&6 -echo "configure:1498: checking whether stack growns downwards" >&5 +echo "configure:1484: checking whether stack growns downwards" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF @@ -1539,12 +1525,12 @@ fi echo $ac_n "checking if arguments can be accessed through vector""... $ac_c" 1>&6 -echo "configure:1543: checking if arguments can be accessed through vector" >&5 +echo "configure:1529: checking if arguments can be accessed through vector" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < @@ -1569,7 +1555,7 @@ int main() { } EOF -if { (eval echo configure:1573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -1588,12 +1574,12 @@ fi echo $ac_n "checking appropiate type for fixnums""... $ac_c" 1>&6 -echo "configure:1592: checking appropiate type for fixnums" >&5 +echo "configure:1578: checking appropiate type for fixnums" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < int main() { @@ -1608,7 +1594,7 @@ int main() { exit(0); } EOF -if { (eval echo configure:1612: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1598: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cl_fixnum=`cat conftestval` echo "$ac_t""${cl_fixnum}" 1>&6 @@ -1626,12 +1612,12 @@ rm -fr conftest* fi echo $ac_n "checking most positive fixnum""... $ac_c" 1>&6 -echo "configure:1630: checking most positive fixnum" >&5 +echo "configure:1616: checking most positive fixnum" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < int main() { @@ -1649,7 +1635,7 @@ int main() { exit(0); } EOF -if { (eval echo configure:1653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cl_fixnum_limit=`cat conftestval` echo "$ac_t""${cl_fixnum_limit}" 1>&6 @@ -1669,14 +1655,14 @@ fi echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:1673: checking whether byte ordering is bigendian" >&5 +echo "configure:1659: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -1687,11 +1673,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:1691: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1677: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -1702,7 +1688,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:1706: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1692: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -1722,7 +1708,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -1764,7 +1750,7 @@ fi # Uses ac_ vars as temps to allow command line to override cache and checks. # --without-x overrides everything else, but does not touch the cache. echo $ac_n "checking for X""... $ac_c" 1>&6 -echo "configure:1768: checking for X" >&5 +echo "configure:1754: checking for X" >&5 # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then @@ -1826,12 +1812,12 @@ if test "$ac_x_includes" = NO; then # First, try using that file with no special directory specified. cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1821: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1900,14 +1886,14 @@ if test "$ac_x_libraries" = NO; then ac_save_LIBS="$LIBS" LIBS="-l$x_direct_test_library $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* LIBS="$ac_save_LIBS" # We can link X programs with no special library path. @@ -2013,17 +1999,17 @@ else case "`(uname -sr) 2>/dev/null`" in "SunOS 5"*) echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6 -echo "configure:2017: checking whether -R must be followed by a space" >&5 +echo "configure:2003: checking whether -R must be followed by a space" >&5 ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_R_nospace=yes else @@ -2039,14 +2025,14 @@ rm -f conftest* else LIBS="$ac_xsave_LIBS -R $x_libraries" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2036: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_R_space=yes else @@ -2078,7 +2064,7 @@ rm -f conftest* # libraries were built with DECnet support. And karl@cs.umb.edu says # the Alpha needs dnet_stub (dnet does not exist). echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6 -echo "configure:2082: checking for dnet_ntoa in -ldnet" >&5 +echo "configure:2068: checking for dnet_ntoa in -ldnet" >&5 ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2086,7 +2072,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldnet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2119,7 +2105,7 @@ fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6 -echo "configure:2123: checking for dnet_ntoa in -ldnet_stub" >&5 +echo "configure:2109: checking for dnet_ntoa in -ldnet_stub" >&5 ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2127,7 +2113,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldnet_stub $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2167,12 +2153,12 @@ fi # The nsl library prevents programs from opening the X display # on Irix 5.2, according to dickey@clark.net. echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6 -echo "configure:2171: checking for gethostbyname" >&5 +echo "configure:2157: checking for gethostbyname" >&5 if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_gethostbyname=yes" else @@ -2216,7 +2202,7 @@ fi if test $ac_cv_func_gethostbyname = no; then echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6 -echo "configure:2220: checking for gethostbyname in -lnsl" >&5 +echo "configure:2206: checking for gethostbyname in -lnsl" >&5 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2224,7 +2210,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2265,12 +2251,12 @@ fi # -lsocket must be given before -lnsl if both are needed. # We assume that if connect needs -lnsl, so does gethostbyname. echo $ac_n "checking for connect""... $ac_c" 1>&6 -echo "configure:2269: checking for connect" >&5 +echo "configure:2255: checking for connect" >&5 if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_connect=yes" else @@ -2314,7 +2300,7 @@ fi if test $ac_cv_func_connect = no; then echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:2318: checking for connect in -lsocket" >&5 +echo "configure:2304: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2322,7 +2308,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2357,12 +2343,12 @@ fi # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX. echo $ac_n "checking for remove""... $ac_c" 1>&6 -echo "configure:2361: checking for remove" >&5 +echo "configure:2347: checking for remove" >&5 if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2375: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_remove=yes" else @@ -2406,7 +2392,7 @@ fi if test $ac_cv_func_remove = no; then echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6 -echo "configure:2410: checking for remove in -lposix" >&5 +echo "configure:2396: checking for remove in -lposix" >&5 ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2414,7 +2400,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lposix $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2449,12 +2435,12 @@ fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. echo $ac_n "checking for shmat""... $ac_c" 1>&6 -echo "configure:2453: checking for shmat" >&5 +echo "configure:2439: checking for shmat" >&5 if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_shmat=yes" else @@ -2498,7 +2484,7 @@ fi if test $ac_cv_func_shmat = no; then echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6 -echo "configure:2502: checking for shmat in -lipc" >&5 +echo "configure:2488: checking for shmat in -lipc" >&5 ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2506,7 +2492,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lipc $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2507: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2550,7 +2536,7 @@ fi # libraries we check for below, so use a different variable. # --interran@uluru.Stanford.EDU, kb@cs.umb.edu. echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6 -echo "configure:2554: checking for IceConnectionNumber in -lICE" >&5 +echo "configure:2540: checking for IceConnectionNumber in -lICE" >&5 ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2558,7 +2544,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else diff --git a/src/configure.in b/src/configure.in index bc0f0dc7b..9cff5a42f 100644 --- a/src/configure.in +++ b/src/configure.in @@ -45,9 +45,6 @@ AC_SUBST(infodir) AC_SUBST(builddir) AC_SUBST(top_srcdir) AC_SUBST(TKLIBS) -AC_ARG_ENABLE(clos, - [ --disable-clos Don't include CLOS.], - clos=`test "$enable_clos" != "no"`, clos=1) AC_ARG_ENABLE(boehm, [ --enable-boehm Enable Boehm & Weiser's garbage collector.], boehm="$enable_boehm") @@ -171,7 +168,6 @@ test "${boehm}" && CLIBS="-lgc ${CLIBS}" test "${boehm}" && AC_DEFINE(GBC_BOEHM) AC_MSG_CHECKING(for clos) AC_MSG_RESULT([${clos}]) -test "${clos}" && AC_DEFINE(CLOS) test "${tk}" && AC_DEFINE(TK) test "${clx}" && AC_DEFINE(CLX) test "${tcp}" -o "${clx}" && AC_DEFINE(TCP) diff --git a/src/h/config.h.in b/src/h/config.h.in index e4d3f7dbb..06e8512b5 100644 --- a/src/h/config.h.in +++ b/src/h/config.h.in @@ -17,7 +17,7 @@ * OPTIONS * * -------------------------------------------------------------------- */ -#undef CLOS +#define CLOS /* Always use CLOS */ #undef THREADS #undef TK diff --git a/src/h/external.h b/src/h/external.h index e9b0299f3..db54178b5 100644 --- a/src/h/external.h +++ b/src/h/external.h @@ -186,7 +186,8 @@ extern int aset_bv(cl_object x, cl_index index, int value); extern void throw(cl_object tag) __attribute__((noreturn)); extern void return_from(cl_object block_id, cl_object block_name) __attribute__((noreturn)); extern void go(cl_object tag_id, cl_object label) __attribute__((noreturn)); -extern void parse_key(int narg, cl_object *args, int nkey, cl_object *keys, cl_object *vars, cl_object rest, bool allow_other_keys); +extern void parse_key(int narg, cl_object *args, int nkey, cl_object *keys, cl_object *vars, cl_object *rest, bool allow_other_keys); +extern cl_object grab_rest_args(int narg, cl_object *args); extern void check_other_key(cl_object l, int n, ...); @@ -255,13 +256,15 @@ extern cl_object va_APPLY(int narg, cl_object (*fn)(), va_list args); extern cl_object va_APPLY_closure(int narg, cl_object (*fn)(), cl_object data, va_list args); extern cl_object va_gcall(int narg, cl_object fun, va_list args); extern cl_object va_lambda_apply(int narg, cl_object fun, va_list args); -extern void va_parse_key(int narg, va_list args, int nkey, cl_object *keys, cl_object *vars, cl_object rest, bool allow_other_keys); +extern void va_parse_key(int narg, va_list args, int nkey, cl_object *keys, cl_object *vars, cl_object *rest, bool allow_other_keys); +extern cl_object va_grab_rest_args(int narg, va_list args); #else #define va_APPLY(x,y,z) APPLY(x,y,&va_arg(z,cl_object)) #define va_APPLY_closure(x,y,p,z) APPLY_closure(x,y,p,&va_arg(z,cl_object)) #define va_gcall(x,y,z) gcall(x,y,&va_arg(z,cl_object)) #define va_lambda_apply(x,y,z) lambda_apply(x,y,&va_arg(z,cl_object)) #define va_parse_key(a,b,c,d,e,f,g) parse_key(a,&va_arg(b,cl_object),c,d,e,f,g) +#define va_grab_rest_args(a,b) grab_rest_args(a,&va_arg(b,cl_object)) #endif /* file.c */