1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 03:40:34 +02:00

* First batch of libguile changes for Elisp support.

* Fixed a few typos.
* Minor rationalization of macros relating to source breakpoints.
This commit is contained in:
Neil Jerram 2002-01-22 23:31:39 +00:00
parent 229d2c9c07
commit c96d76b88d
28 changed files with 275 additions and 195 deletions

View file

@ -1,3 +1,98 @@
2002-01-22 Neil Jerram <neil@ossau.uklinux.net>
Other changes unrelated to Elisp...
* eval.c (scm_m_if): Use s_if rather than repeating string literal
"if".
(comments): Fix a few typos.
(scm_for_each): Add parentheses around oddly unparenthesized
if/while conditions.
* read.c (scm_read_opts): Add full stop at end of doc for
`keywords' option.
* script.c (scm_compile_shell_switches): Use scm_str2symbol
instead of gh_symbol2scm.
* srcprop.h (SRCPROPBRK): Return C type rather than SCM.
(SRCBRKP): Use SRCPROPBRK rather than duplicating its logic.
* srcprop.c (scm_srcprops_to_plist, scm_source_property): Change
SRCPROPBRK (x) to SCM_BOOL (SRCPROPBRK (x)).
First batch of changes for Elisp support...
* alist.c, async.c, boolean.c, dynl.c, eval.c, filesys.c,
fluids.c, list.c, load.c, options.c, posix.c, print.c, sort.c,
throw.c, vectors.c, weaks.c: Add #include for lang.h.
* eval.c, eval.h, init.c, lang.c, lang.h: Use SCM_ENABLE_ELISP to
conditionalize compilation and initialization of Elisp support
function.
* alist.c (scm_assq, scm_assv, scm_assoc), async.c
(scm_asyncs_pending, scm_run_asyncs, noop), backtrace.c
(scm_set_print_params_x), dynl.c (scm_make_argv_from_stringlist),
filesys.c (fill_select_type, retrieve_select_type), fluids.c
(scm_swap_fluids, scm_swap_fluids_reverse), list.c (scm_null_p,
scm_ilength, scm_append_x, scm_last_pair, scm_reverse,
scm_reverse_x, scm_list_ref, scm_list_set_x, scm_list_cdr_set_x,
scm_c_memq, scm_memv), load.c (scm_search_path), options.c
(change_option_setting, scm_options), posix.c (environ_list_to_c),
print.c (scm_iprlist), throw.c (scm_exit_status), vectors.c
(scm_vector), weaks.c (scm_weak_vector): Use SCM_NULL_OR_NIL_P
instead of SCM_NULLP.
* boolean.c (scm_not): Use `SCM_FALSEP || SCM_NILP' instead of
just SCM_FALSEP.
* boolean.c (scm_boolean_p): Use `SCM_BOOLP || SCM_NILP' instead
of just SCM_BOOLP.
* eval.c (scm_lisp_nil, scm_lisp_t, s_nil_ify, scm_m_nil_ify,
s_t_ify, scm_m_t_ify, s_0_cond, scm_m_0_cond, s_0_ify,
scm_m_0_ify, s_1_ify, scm_m_1_ify): Removed.
(scm_m_atfop): Support function aliasing. Support both function
args, which need transformation, and macro args, which do not.
Add explanatory comments.
(SCM_CEVAL): In switch cases for SCM_IM_AND, SCM_IM_COND,
SCM_IM_DO, SCM_IM_IF and SCM_IM_OR, add `|| SCM_NILP' to existing
checks for SCM_FALSEP. In switch case for SCM_IM_NIL_COND, use
SCM_NULLP || SCM_NILP instead of checks against (removed)
scm_lisp_nil. Removed switch cases for SCM_IM_NIL_IFY,
SCM_IM_T_IFY, SCM_IM_0_COND, SCM_IM_0_IFY, SCM_IM_1_IFY.
* lang.c (scm_nil_cons, scm_nil_car, scm_nil_cdr, scm_null,
scm_m_while, scm_nil_eq): Commented out; I don't think we need
these, but I don't want to remove them yet, just in case.
(scm_init_lang): Define `%nil' variable on Scheme level to hold
Elisp nil value.
* lang.h (SCM_NILP): Test against Elisp nil value instead of
against (removed) scm_lisp_nil.
(SCM_NILNULLP, SCM_NIL2EOL, SCM_EOL2NIL): Commented out.
(SCM_NULL_OR_NIL_P): New.
* list.c (scm_append): Use SCM_VALIDATE_NULL_OR_NIL instead of
SCM_VALIDATE_NULL.
* print.c (scm_isymnames): Fix comment. Remove #@nil-ify,
#@t-ify, #@0-cond, #@0-ify, #@1-ify. Add #nil (for SCM_ELISP_NIL
value).
* sort.c (scm_sorted_p, scm_merge, scm_merge_list_x, scm_merge_x,
scm_sort_x, scm_sort, scm_stable_sort_x, scm_stable_sort): Use
SCM_NULL_OR_NIL_P instead of SCM_NULLP. In constructions like `if
(SCM_NULLP (x)) return SCM_EOL;', return x rather than SCM_EOL.
* tags.h (SCM_IM_NIL_IFY, SCM_IM_T_IFY, SCM_IM_0_COND,
SCM_IM_0_IFY, SCM_IM_1_IFY): Removed.
(SCM_IM_BIND, SCM_IM_DELAY, SCM_IM_CALL_WITH_VALUES, SCM_UNBOUND):
Numbering shifted down accordingly.
(SCM_ELISP_NIL): New IFLAG.
* validate.h (SCM_VALIDATE_NULL_OR_NIL): New.
2002-01-10 Dirk Herrmann <D.Herrmann@tu-bs.de> 2002-01-10 Dirk Herrmann <D.Herrmann@tu-bs.de>
* eval.c: Removed outdated references to "everr". Improved some * eval.c: Removed outdated references to "everr". Improved some

View file

@ -44,6 +44,7 @@
#include "libguile/_scm.h" #include "libguile/_scm.h"
#include "libguile/eq.h" #include "libguile/eq.h"
#include "libguile/list.h" #include "libguile/list.h"
#include "libguile/lang.h"
#include "libguile/validate.h" #include "libguile/validate.h"
#include "libguile/alist.h" #include "libguile/alist.h"
@ -144,7 +145,7 @@ SCM_DEFINE (scm_assq, "assq", 2, 0, 0,
if (SCM_EQ_P (SCM_CAR (tmp), key)) if (SCM_EQ_P (SCM_CAR (tmp), key))
return tmp; return tmp;
} }
SCM_ASSERT_TYPE (SCM_NULLP (ls), alist, SCM_ARG2, FUNC_NAME, SCM_ASSERT_TYPE (SCM_NULL_OR_NIL_P (ls), alist, SCM_ARG2, FUNC_NAME,
"association list"); "association list");
return SCM_BOOL_F; return SCM_BOOL_F;
} }
@ -165,7 +166,7 @@ SCM_DEFINE (scm_assv, "assv", 2, 0, 0,
if (SCM_NFALSEP (scm_eqv_p (SCM_CAR (tmp), key))) if (SCM_NFALSEP (scm_eqv_p (SCM_CAR (tmp), key)))
return tmp; return tmp;
} }
SCM_ASSERT_TYPE (SCM_NULLP (ls), alist, SCM_ARG2, FUNC_NAME, SCM_ASSERT_TYPE (SCM_NULL_OR_NIL_P (ls), alist, SCM_ARG2, FUNC_NAME,
"association list"); "association list");
return SCM_BOOL_F; return SCM_BOOL_F;
} }
@ -186,7 +187,7 @@ SCM_DEFINE (scm_assoc, "assoc", 2, 0, 0,
if (SCM_NFALSEP (scm_equal_p (SCM_CAR (tmp), key))) if (SCM_NFALSEP (scm_equal_p (SCM_CAR (tmp), key)))
return tmp; return tmp;
} }
SCM_ASSERT_TYPE (SCM_NULLP (ls), alist, SCM_ARG2, FUNC_NAME, SCM_ASSERT_TYPE (SCM_NULL_OR_NIL_P (ls), alist, SCM_ARG2, FUNC_NAME,
"association list"); "association list");
return SCM_BOOL_F; return SCM_BOOL_F;
} }

View file

@ -48,6 +48,7 @@
#include "libguile/throw.h" #include "libguile/throw.h"
#include "libguile/root.h" #include "libguile/root.h"
#include "libguile/smob.h" #include "libguile/smob.h"
#include "libguile/lang.h"
#include "libguile/validate.h" #include "libguile/validate.h"
#include "libguile/async.h" #include "libguile/async.h"
@ -128,7 +129,7 @@ scm_asyncs_pending ()
{ {
SCM pos; SCM pos;
pos = scm_asyncs; pos = scm_asyncs;
while (!SCM_NULLP (pos)) while (!SCM_NULL_OR_NIL_P (pos))
{ {
SCM a = SCM_CAR (pos); SCM a = SCM_CAR (pos);
if (ASYNC_GOT_IT (a)) if (ASYNC_GOT_IT (a))
@ -356,7 +357,7 @@ SCM_DEFINE (scm_run_asyncs, "run-asyncs", 1, 0, 0,
#else #else
scm_asyncs_pending_p = 0; scm_asyncs_pending_p = 0;
#endif #endif
while (! SCM_NULLP (list_of_a)) while (! SCM_NULL_OR_NIL_P (list_of_a))
{ {
SCM a; SCM a;
SCM_VALIDATE_CONS (1, list_of_a); SCM_VALIDATE_CONS (1, list_of_a);
@ -385,7 +386,7 @@ SCM_DEFINE (scm_noop, "noop", 0, 0, 1,
#define FUNC_NAME s_scm_noop #define FUNC_NAME s_scm_noop
{ {
SCM_VALIDATE_REST_ARGUMENT (args); SCM_VALIDATE_REST_ARGUMENT (args);
return (SCM_NULLP (args) ? SCM_BOOL_F : SCM_CAR (args)); return (SCM_NULL_OR_NIL_P (args) ? SCM_BOOL_F : SCM_CAR (args));
} }
#undef FUNC_NAME #undef FUNC_NAME

View file

@ -302,7 +302,7 @@ SCM_DEFINE (scm_set_print_params_x, "set-print-params!", 1, 0, 0,
print_params_t *new_params; print_params_t *new_params;
SCM_VALIDATE_NONEMPTYLIST_COPYLEN (2, params, n); SCM_VALIDATE_NONEMPTYLIST_COPYLEN (2, params, n);
for (ls = params; !SCM_NULLP (ls); ls = SCM_CDR (ls)) for (ls = params; !SCM_NULL_OR_NIL_P (ls); ls = SCM_CDR (ls))
SCM_ASSERT (scm_ilength (SCM_CAR (params)) == 2 SCM_ASSERT (scm_ilength (SCM_CAR (params)) == 2
&& SCM_INUMP (SCM_CAAR (ls)) && SCM_INUMP (SCM_CAAR (ls))
&& SCM_INUM (SCM_CAAR (ls)) >= 0 && SCM_INUM (SCM_CAAR (ls)) >= 0

View file

@ -46,6 +46,7 @@
#include "libguile/validate.h" #include "libguile/validate.h"
#include "libguile/boolean.h" #include "libguile/boolean.h"
#include "libguile/lang.h"
@ -54,7 +55,7 @@ SCM_DEFINE (scm_not, "not", 1, 0, 0,
"Return @code{#t} iff @var{x} is @code{#f}, else return @code{#f}.") "Return @code{#t} iff @var{x} is @code{#f}, else return @code{#f}.")
#define FUNC_NAME s_scm_not #define FUNC_NAME s_scm_not
{ {
return SCM_BOOL(SCM_FALSEP(x)); return SCM_BOOL(SCM_FALSEP (x) || SCM_NILP (x));
} }
#undef FUNC_NAME #undef FUNC_NAME
@ -64,7 +65,7 @@ SCM_DEFINE (scm_boolean_p, "boolean?", 1, 0, 0,
"Return @code{#t} iff @var{obj} is either @code{#t} or @code{#f}.") "Return @code{#t} iff @var{obj} is either @code{#t} or @code{#f}.")
#define FUNC_NAME s_scm_boolean_p #define FUNC_NAME s_scm_boolean_p
{ {
return SCM_BOOL (SCM_BOOLP (obj)); return SCM_BOOL (SCM_BOOLP (obj) || SCM_NILP (obj));
} }
#undef FUNC_NAME #undef FUNC_NAME

View file

@ -72,6 +72,7 @@ maybe_drag_in_eprintf ()
#include "libguile/ports.h" #include "libguile/ports.h"
#include "libguile/strings.h" #include "libguile/strings.h"
#include "libguile/deprecation.h" #include "libguile/deprecation.h"
#include "libguile/lang.h"
#include "libguile/validate.h" #include "libguile/validate.h"
/* Create a new C argv array from a scheme list of strings. */ /* Create a new C argv array from a scheme list of strings. */
@ -97,7 +98,7 @@ scm_make_argv_from_stringlist (SCM args,int *argcp,const char *subr,int argn)
argc = scm_ilength (args); argc = scm_ilength (args);
SCM_ASSERT (argc >= 0, args, argn, subr); SCM_ASSERT (argc >= 0, args, argn, subr);
argv = (char **) scm_must_malloc ((argc + 1) * sizeof (char *), subr); argv = (char **) scm_must_malloc ((argc + 1) * sizeof (char *), subr);
for (i = 0; !SCM_NULLP (args); args = SCM_CDR (args), ++i) { for (i = 0; !SCM_NULL_OR_NIL_P (args); args = SCM_CDR (args), ++i) {
SCM arg = SCM_CAR (args); SCM arg = SCM_CAR (args);
size_t len; size_t len;
char *dst; char *dst;

View file

@ -100,6 +100,7 @@ char *alloca ();
#include "libguile/validate.h" #include "libguile/validate.h"
#include "libguile/eval.h" #include "libguile/eval.h"
#include "libguile/lang.h"
@ -537,7 +538,7 @@ SCM
scm_m_if (SCM xorig, SCM env SCM_UNUSED) scm_m_if (SCM xorig, SCM env SCM_UNUSED)
{ {
long len = scm_ilength (SCM_CDR (xorig)); long len = scm_ilength (SCM_CDR (xorig));
SCM_ASSYNT (len >= 2 && len <= 3, scm_s_expression, "if"); SCM_ASSYNT (len >= 2 && len <= 3, scm_s_expression, s_if);
return scm_cons (SCM_IM_IF, SCM_CDR (xorig)); return scm_cons (SCM_IM_IF, SCM_CDR (xorig));
} }
@ -1073,10 +1074,7 @@ scm_m_cont (SCM xorig, SCM env SCM_UNUSED)
return scm_cons (SCM_IM_CONT, SCM_CDR (xorig)); return scm_cons (SCM_IM_CONT, SCM_CDR (xorig));
} }
/* Multi-language support */ #ifdef SCM_ENABLE_ELISP
SCM_GLOBAL_SYMBOL (scm_lisp_nil, "nil");
SCM_GLOBAL_SYMBOL (scm_lisp_t, "t");
SCM_SYNTAX (s_nil_cond, "nil-cond", scm_makmmacro, scm_m_nil_cond); SCM_SYNTAX (s_nil_cond, "nil-cond", scm_makmmacro, scm_m_nil_cond);
@ -1088,52 +1086,6 @@ scm_m_nil_cond (SCM xorig, SCM env SCM_UNUSED)
return scm_cons (SCM_IM_NIL_COND, SCM_CDR (xorig)); return scm_cons (SCM_IM_NIL_COND, SCM_CDR (xorig));
} }
SCM_SYNTAX (s_nil_ify, "nil-ify", scm_makmmacro, scm_m_nil_ify);
SCM
scm_m_nil_ify (SCM xorig, SCM env SCM_UNUSED)
{
SCM_ASSYNT (scm_ilength (SCM_CDR (xorig)) == 1, scm_s_expression, "nil-ify");
return scm_cons (SCM_IM_NIL_IFY, SCM_CDR (xorig));
}
SCM_SYNTAX (s_t_ify, "t-ify", scm_makmmacro, scm_m_t_ify);
SCM
scm_m_t_ify (SCM xorig, SCM env SCM_UNUSED)
{
SCM_ASSYNT (scm_ilength (SCM_CDR (xorig)) == 1, scm_s_expression, "t-ify");
return scm_cons (SCM_IM_T_IFY, SCM_CDR (xorig));
}
SCM_SYNTAX (s_0_cond, "0-cond", scm_makmmacro, scm_m_0_cond);
SCM
scm_m_0_cond (SCM xorig, SCM env SCM_UNUSED)
{
long len = scm_ilength (SCM_CDR (xorig));
SCM_ASSYNT (len >= 1 && (len & 1) == 1, scm_s_expression, "0-cond");
return scm_cons (SCM_IM_0_COND, SCM_CDR (xorig));
}
SCM_SYNTAX (s_0_ify, "0-ify", scm_makmmacro, scm_m_0_ify);
SCM
scm_m_0_ify (SCM xorig, SCM env SCM_UNUSED)
{
SCM_ASSYNT (scm_ilength (SCM_CDR (xorig)) == 1, scm_s_expression, "0-ify");
return scm_cons (SCM_IM_0_IFY, SCM_CDR (xorig));
}
SCM_SYNTAX (s_1_ify, "1-ify", scm_makmmacro, scm_m_1_ify);
SCM
scm_m_1_ify (SCM xorig, SCM env SCM_UNUSED)
{
SCM_ASSYNT (scm_ilength (SCM_CDR (xorig)) == 1, scm_s_expression, "1-ify");
return scm_cons (SCM_IM_1_IFY, SCM_CDR (xorig));
}
SCM_SYNTAX (s_atfop, "@fop", scm_makmmacro, scm_m_atfop); SCM_SYNTAX (s_atfop, "@fop", scm_makmmacro, scm_m_atfop);
SCM SCM
@ -1142,12 +1094,45 @@ scm_m_atfop (SCM xorig, SCM env SCM_UNUSED)
SCM x = SCM_CDR (xorig), var; SCM x = SCM_CDR (xorig), var;
SCM_ASSYNT (scm_ilength (x) >= 1, scm_s_expression, "@fop"); SCM_ASSYNT (scm_ilength (x) >= 1, scm_s_expression, "@fop");
var = scm_symbol_fref (SCM_CAR (x)); var = scm_symbol_fref (SCM_CAR (x));
/* Passing the symbol name as the `subr' arg here isn't really
right, but without it it can be very difficult to work out from
the error message which function definition was missing. In any
case, we shouldn't really use SCM_ASSYNT here at all, but instead
something equivalent to (signal void-function (list SYM)) in
Elisp. */
SCM_ASSYNT (SCM_VARIABLEP (var), SCM_ASSYNT (SCM_VARIABLEP (var),
"Symbol's function definition is void", NULL); "Symbol's function definition is void",
SCM_SYMBOL_CHARS (SCM_CAR (x)));
/* Support `defalias'. */
while (SCM_SYMBOLP (SCM_VARIABLE_REF (var)))
{
var = scm_symbol_fref (SCM_VARIABLE_REF (var));
SCM_ASSYNT (SCM_VARIABLEP (var),
"Symbol's function definition is void",
SCM_SYMBOL_CHARS (SCM_CAR (x)));
}
/* Use `var' here rather than `SCM_VARIABLE_REF (var)' because the
former allows for automatically picking up redefinitions of the
corresponding symbol. */
SCM_SETCAR (x, var); SCM_SETCAR (x, var);
/* If the variable contains a procedure, leave the
`transformer-macro' in place so that the procedure's arguments
get properly transformed, and change the initial @fop to
SCM_IM_APPLY. */
if (!SCM_MACROP (SCM_VARIABLE_REF (var)))
{
SCM_SETCAR (xorig, SCM_IM_APPLY);
return xorig;
}
/* Otherwise (the variable contains a macro), the arguments should
not be transformed, so cut the `transformer-macro' out and return
the resulting expression starting with the variable. */
SCM_SETCDR (x, SCM_CDADR (x));
return x; return x;
} }
#endif /* SCM_ENABLE_ELISP */
/* (@bind ((var exp) ...) body ...) /* (@bind ((var exp) ...) body ...)
This will assign the values of the `exp's to the global variables This will assign the values of the `exp's to the global variables
@ -1158,7 +1143,7 @@ scm_m_atfop (SCM xorig, SCM env SCM_UNUSED)
error when a symbol appears more than once among the `var's. error when a symbol appears more than once among the `var's.
All `exp's are evaluated before any `var' is set. All `exp's are evaluated before any `var' is set.
This of this as `let' for dynamic scope. Think of this as `let' for dynamic scope.
It is memoized into (#@bind ((var ...) . (reversed-val ...)) body ...). It is memoized into (#@bind ((var ...) . (reversed-val ...)) body ...).
@ -1325,7 +1310,7 @@ scm_macroexp (SCM x, SCM env)
* generating the source for a stackframe in a backtrace, and in * generating the source for a stackframe in a backtrace, and in
* display_expression. * display_expression.
* *
* Unmemoizing is not a realiable process. You can not in general * Unmemoizing is not a reliable process. You cannot in general
* expect to get the original source back. * expect to get the original source back.
* *
* However, GOOPS currently relies on this for method compilation. * However, GOOPS currently relies on this for method compilation.
@ -2018,7 +2003,7 @@ dispatch:
x = SCM_CDR (x); x = SCM_CDR (x);
while (!SCM_NULLP (SCM_CDR (x))) while (!SCM_NULLP (SCM_CDR (x)))
{ {
if (SCM_FALSEP (EVALCAR (x, env))) if (SCM_FALSEP (t.arg1 = EVALCAR (x, env)) || SCM_NILP (t.arg1))
RETURN (SCM_BOOL_F); RETURN (SCM_BOOL_F);
else else
x = SCM_CDR (x); x = SCM_CDR (x);
@ -2129,7 +2114,7 @@ dispatch:
goto begin; goto begin;
} }
t.arg1 = EVALCAR (proc, env); t.arg1 = EVALCAR (proc, env);
if (!SCM_FALSEP (t.arg1)) if (!SCM_FALSEP (t.arg1) && !SCM_NILP (t.arg1))
{ {
x = SCM_CDR (proc); x = SCM_CDR (proc);
if (SCM_NULLP (x)) if (SCM_NULLP (x))
@ -2164,7 +2149,8 @@ dispatch:
} }
env = EXTEND_ENV (SCM_CAR (x), t.arg1, env); env = EXTEND_ENV (SCM_CAR (x), t.arg1, env);
x = SCM_CDDR (x); x = SCM_CDDR (x);
while (proc = SCM_CAR (x), SCM_FALSEP (EVALCAR (proc, env))) while (proc = SCM_CAR (x),
SCM_FALSEP (t.arg1 = EVALCAR (proc, env)) || SCM_NILP (t.arg1))
{ {
for (proc = SCM_CADR (x); SCM_NIMP (proc); proc = SCM_CDR (proc)) for (proc = SCM_CADR (x); SCM_NIMP (proc); proc = SCM_CDR (proc))
{ {
@ -2186,7 +2172,7 @@ dispatch:
case SCM_BIT8(SCM_IM_IF): case SCM_BIT8(SCM_IM_IF):
x = SCM_CDR (x); x = SCM_CDR (x);
if (!SCM_FALSEP (EVALCAR (x, env))) if (!SCM_FALSEP (t.arg1 = EVALCAR (x, env)) && !SCM_NILP (t.arg1))
x = SCM_CDR (x); x = SCM_CDR (x);
else if (SCM_IMP (x = SCM_CDDR (x))) else if (SCM_IMP (x = SCM_CDDR (x)))
RETURN (SCM_UNSPECIFIED); RETURN (SCM_UNSPECIFIED);
@ -2249,7 +2235,7 @@ dispatch:
while (!SCM_NULLP (SCM_CDR (x))) while (!SCM_NULLP (SCM_CDR (x)))
{ {
SCM val = EVALCAR (x, env); SCM val = EVALCAR (x, env);
if (!SCM_FALSEP (val)) if (!SCM_FALSEP (val) && !SCM_NILP (val))
RETURN (val); RETURN (val);
else else
x = SCM_CDR (x); x = SCM_CDR (x);
@ -2478,12 +2464,15 @@ dispatch:
= SCM_UNPACK (EVALCAR (proc, env)); = SCM_UNPACK (EVALCAR (proc, env));
RETURN (SCM_UNSPECIFIED); RETURN (SCM_UNSPECIFIED);
#ifdef SCM_ENABLE_ELISP
case (SCM_ISYMNUM (SCM_IM_NIL_COND)): case (SCM_ISYMNUM (SCM_IM_NIL_COND)):
proc = SCM_CDR (x); proc = SCM_CDR (x);
while (SCM_NIMP (x = SCM_CDR (proc))) while (SCM_NIMP (x = SCM_CDR (proc)))
{ {
if (!(SCM_FALSEP (t.arg1 = EVALCAR (proc, env)) if (!(SCM_FALSEP (t.arg1 = EVALCAR (proc, env))
|| SCM_EQ_P (t.arg1, scm_lisp_nil))) || SCM_NILP (t.arg1)
|| SCM_NULLP (t.arg1)))
{ {
if (SCM_EQ_P (SCM_CAR (x), SCM_UNSPECIFIED)) if (SCM_EQ_P (SCM_CAR (x), SCM_UNSPECIFIED))
RETURN (t.arg1); RETURN (t.arg1);
@ -2496,45 +2485,7 @@ dispatch:
PREP_APPLY (SCM_UNDEFINED, SCM_EOL); PREP_APPLY (SCM_UNDEFINED, SCM_EOL);
goto carloop; goto carloop;
case (SCM_ISYMNUM (SCM_IM_NIL_IFY)): #endif /* SCM_ENABLE_ELISP */
x = SCM_CDR (x);
RETURN ((SCM_FALSEP (proc = EVALCAR (x, env)) || SCM_NULLP (proc))
? scm_lisp_nil
: proc);
case (SCM_ISYMNUM (SCM_IM_T_IFY)):
x = SCM_CDR (x);
RETURN (!SCM_FALSEP (EVALCAR (x, env)) ? scm_lisp_t : scm_lisp_nil);
case (SCM_ISYMNUM (SCM_IM_0_COND)):
proc = SCM_CDR (x);
while (SCM_NIMP (x = SCM_CDR (proc)))
{
if (!(SCM_FALSEP (t.arg1 = EVALCAR (proc, env))
|| SCM_EQ_P (t.arg1, SCM_INUM0)))
{
if (SCM_EQ_P (SCM_CAR (x), SCM_UNSPECIFIED))
RETURN (t.arg1);
PREP_APPLY (SCM_UNDEFINED, SCM_EOL);
goto carloop;
}
proc = SCM_CDR (x);
}
x = proc;
PREP_APPLY (SCM_UNDEFINED, SCM_EOL);
goto carloop;
case (SCM_ISYMNUM (SCM_IM_0_IFY)):
x = SCM_CDR (x);
RETURN (SCM_FALSEP (proc = EVALCAR (x, env))
? SCM_INUM0
: proc);
case (SCM_ISYMNUM (SCM_IM_1_IFY)):
x = SCM_CDR (x);
RETURN (!SCM_FALSEP (EVALCAR (x, env))
? SCM_MAKINUM (1)
: SCM_INUM0);
case (SCM_ISYMNUM (SCM_IM_BIND)): case (SCM_ISYMNUM (SCM_IM_BIND)):
{ {
@ -3388,7 +3339,11 @@ SCM_DEFINE (scm_nconc2last, "apply:nconc2last", 1, 0, 0,
SCM *lloc; SCM *lloc;
SCM_VALIDATE_NONEMPTYLIST (1,lst); SCM_VALIDATE_NONEMPTYLIST (1,lst);
lloc = &lst; lloc = &lst;
while (!SCM_NULLP (SCM_CDR (*lloc))) while (!SCM_NULLP (SCM_CDR (*lloc))) /* Perhaps should be
SCM_NULL_OR_NIL_P, but not
needed in 99.99% of cases,
and it could seriously hurt
performance. - Neil */
lloc = SCM_CDRLOC (*lloc); lloc = SCM_CDRLOC (*lloc);
SCM_ASSERT (scm_ilength (SCM_CAR (*lloc)) >= 0, lst, SCM_ARG1, FUNC_NAME); SCM_ASSERT (scm_ilength (SCM_CAR (*lloc)) >= 0, lst, SCM_ARG1, FUNC_NAME);
*lloc = SCM_CAR (*lloc); *lloc = SCM_CAR (*lloc);
@ -3846,9 +3801,9 @@ scm_for_each (SCM proc, SCM arg1, SCM args)
SCM_GASSERTn (len >= 0, g_for_each, scm_cons2 (proc, arg1, args), SCM_GASSERTn (len >= 0, g_for_each, scm_cons2 (proc, arg1, args),
SCM_ARG2, s_for_each); SCM_ARG2, s_for_each);
SCM_VALIDATE_REST_ARGUMENT (args); SCM_VALIDATE_REST_ARGUMENT (args);
if SCM_NULLP (args) if (SCM_NULLP (args))
{ {
while SCM_NIMP (arg1) while (SCM_NIMP (arg1))
{ {
scm_apply (proc, SCM_CAR (arg1), scm_listofnull); scm_apply (proc, SCM_CAR (arg1), scm_listofnull);
arg1 = SCM_CDR (arg1); arg1 = SCM_CDR (arg1);
@ -3865,8 +3820,8 @@ scm_for_each (SCM proc, SCM arg1, SCM args)
arg1 = SCM_EOL; arg1 = SCM_EOL;
for (i = SCM_VECTOR_LENGTH (args) - 1; i >= 0; i--) for (i = SCM_VECTOR_LENGTH (args) - 1; i >= 0; i--)
{ {
if SCM_IMP if (SCM_IMP (ve[i]))
(ve[i]) return SCM_UNSPECIFIED; return SCM_UNSPECIFIED;
arg1 = scm_cons (SCM_CAR (ve[i]), arg1); arg1 = scm_cons (SCM_CAR (ve[i]), arg1);
ve[i] = SCM_CDR (ve[i]); ve[i] = SCM_CDR (ve[i]);
} }
@ -4183,9 +4138,6 @@ scm_init_eval ()
#include "libguile/eval.x" #include "libguile/eval.x"
#endif #endif
scm_c_define ("nil", scm_lisp_nil);
scm_c_define ("t", scm_lisp_t);
scm_add_feature ("delay"); scm_add_feature ("delay");
} }

View file

@ -204,13 +204,10 @@ SCM_API SCM scm_m_letrec (SCM xorig, SCM env);
SCM_API SCM scm_m_let (SCM xorig, SCM env); SCM_API SCM scm_m_let (SCM xorig, SCM env);
SCM_API SCM scm_m_apply (SCM xorig, SCM env); SCM_API SCM scm_m_apply (SCM xorig, SCM env);
SCM_API SCM scm_m_cont (SCM xorig, SCM env); SCM_API SCM scm_m_cont (SCM xorig, SCM env);
#ifdef SCM_ENABLE_ELISP
SCM_API SCM scm_m_nil_cond (SCM xorig, SCM env); SCM_API SCM scm_m_nil_cond (SCM xorig, SCM env);
SCM_API SCM scm_m_nil_ify (SCM xorig, SCM env);
SCM_API SCM scm_m_t_ify (SCM xorig, SCM env);
SCM_API SCM scm_m_0_cond (SCM xorig, SCM env);
SCM_API SCM scm_m_0_ify (SCM xorig, SCM env);
SCM_API SCM scm_m_1_ify (SCM xorig, SCM env);
SCM_API SCM scm_m_atfop (SCM xorig, SCM env); SCM_API SCM scm_m_atfop (SCM xorig, SCM env);
#endif /* SCM_ENABLE_ELISP */
SCM_API SCM scm_m_atbind (SCM xorig, SCM env); SCM_API SCM scm_m_atbind (SCM xorig, SCM env);
SCM_API SCM scm_m_at_call_with_values (SCM xorig, SCM env); SCM_API SCM scm_m_at_call_with_values (SCM xorig, SCM env);
SCM_API int scm_badargsp (SCM formals, SCM args); SCM_API int scm_badargsp (SCM formals, SCM args);

View file

@ -51,6 +51,7 @@
#include "libguile/iselect.h" #include "libguile/iselect.h"
#include "libguile/strings.h" #include "libguile/strings.h"
#include "libguile/vectors.h" #include "libguile/vectors.h"
#include "libguile/lang.h"
#include "libguile/validate.h" #include "libguile/validate.h"
#include "libguile/filesys.h" #include "libguile/filesys.h"
@ -1032,7 +1033,7 @@ fill_select_type (SELECT_TYPE *set, SCM *ports_ready, SCM list_or_vec, int pos)
} }
else else
{ {
while (!SCM_NULLP (list_or_vec)) while (!SCM_NULL_OR_NIL_P (list_or_vec))
{ {
int fd = set_element (set, ports_ready, SCM_CAR (list_or_vec), pos); int fd = set_element (set, ports_ready, SCM_CAR (list_or_vec), pos);
@ -1092,7 +1093,7 @@ retrieve_select_type (SELECT_TYPE *set, SCM ports_ready, SCM list_or_vec)
else else
{ {
/* list_or_vec must be a list. */ /* list_or_vec must be a list. */
while (!SCM_NULLP (list_or_vec)) while (!SCM_NULL_OR_NIL_P (list_or_vec))
{ {
answer_list = get_element (set, SCM_CAR (list_or_vec), answer_list); answer_list = get_element (set, SCM_CAR (list_or_vec), answer_list);
list_or_vec = SCM_CDR (list_or_vec); list_or_vec = SCM_CDR (list_or_vec);

View file

@ -50,6 +50,7 @@
#include "libguile/eval.h" #include "libguile/eval.h"
#include "libguile/ports.h" #include "libguile/ports.h"
#include "libguile/deprecation.h" #include "libguile/deprecation.h"
#include "libguile/lang.h"
#define INITIAL_FLUIDS 10 #define INITIAL_FLUIDS 10
#include "libguile/validate.h" #include "libguile/validate.h"
@ -178,7 +179,7 @@ SCM_DEFINE (scm_fluid_set_x, "fluid-set!", 2, 0, 0,
void void
scm_swap_fluids (SCM fluids, SCM vals) scm_swap_fluids (SCM fluids, SCM vals)
{ {
while (!SCM_NULLP (fluids)) while (!SCM_NULL_OR_NIL_P (fluids))
{ {
SCM fl = SCM_CAR (fluids); SCM fl = SCM_CAR (fluids);
SCM old_val = scm_fluid_ref (fl); SCM old_val = scm_fluid_ref (fl);
@ -195,7 +196,7 @@ same fluid appears multiple times in the fluids list. */
void void
scm_swap_fluids_reverse (SCM fluids, SCM vals) scm_swap_fluids_reverse (SCM fluids, SCM vals)
{ {
if (!SCM_NULLP (fluids)) if (!SCM_NULL_OR_NIL_P (fluids))
{ {
SCM fl, old_val; SCM fl, old_val;

View file

@ -560,7 +560,9 @@ scm_init_guile_1 (SCM_STACKITEM *base)
scm_init_load_path (); scm_init_load_path ();
scm_init_standard_ports (); /* Requires fports */ scm_init_standard_ports (); /* Requires fports */
scm_init_dynamic_linking (); scm_init_dynamic_linking ();
#ifdef SCM_ENABLE_ELISP
scm_init_lang (); scm_init_lang ();
#endif /* SCM_ENABLE_ELISP */
scm_init_script (); scm_init_script ();
scm_init_goops (); scm_init_goops ();

View file

@ -62,6 +62,9 @@
* in all data structures. * in all data structures.
*/ */
#ifdef SCM_ENABLE_ELISP
#if 0
SCM_DEFINE (scm_nil_cons, "nil-cons", 2, 0, 0, SCM_DEFINE (scm_nil_cons, "nil-cons", 2, 0, 0,
(SCM x, SCM y), (SCM x, SCM y),
"Create a new cons cell with @var{x} as the car and @var{y} as\n" "Create a new cons cell with @var{x} as the car and @var{y} as\n"
@ -145,17 +148,24 @@ SCM_DEFINE1 (scm_nil_eq, "nil-eq", scm_tc7_rpsubr,
} }
#undef FUNC_NAME #undef FUNC_NAME
#endif /* 0 */
void void
scm_init_lang () scm_init_lang ()
{ {
#if 0
#ifndef SCM_MAGIC_SNARFER #ifndef SCM_MAGIC_SNARFER
#include "libguile/lang.x" #include "libguile/lang.x"
#endif #endif
scm_make_synt ("nil-while", scm_makacro, scm_m_while); scm_make_synt ("nil-while", scm_makacro, scm_m_while);
#endif
scm_c_define ("%nil", SCM_ELISP_NIL);
} }
#endif /* SCM_ENABLE_ELISP */
/* /*
Local Variables: Local Variables:
c-file-style: "gnu" c-file-style: "gnu"

View file

@ -50,10 +50,14 @@
#ifdef SCM_ENABLE_ELISP
#define SCM_NILP(x) (SCM_EQ_P ((x), SCM_ELISP_NIL))
#if 0
SCM_API SCM scm_lisp_nil; SCM_API SCM scm_lisp_nil;
SCM_API SCM scm_lisp_t; SCM_API SCM scm_lisp_t;
#define SCM_NILP(x) (SCM_EQ_P ((x), scm_lisp_nil))
#define SCM_NILNULLP(x) (SCM_NILP (x) || SCM_NULLP (x)) #define SCM_NILNULLP(x) (SCM_NILP (x) || SCM_NULLP (x))
#define SCM_NIL2EOL(x, tmp) (SCM_EQ_P ((tmp = (x)), scm_lisp_nil) ? SCM_EOL : tmp) #define SCM_NIL2EOL(x, tmp) (SCM_EQ_P ((tmp = (x)), scm_lisp_nil) ? SCM_EOL : tmp)
#define SCM_EOL2NIL(x, tmp) (SCM_NULLP (tmp = (x)) ? scm_lisp_nil : tmp) #define SCM_EOL2NIL(x, tmp) (SCM_NULLP (tmp = (x)) ? scm_lisp_nil : tmp)
@ -68,7 +72,13 @@ SCM_API SCM scm_nil_cdr (SCM x);
SCM_API SCM scm_null (SCM x); SCM_API SCM scm_null (SCM x);
SCM_API SCM scm_m_while (SCM exp, SCM env); SCM_API SCM scm_m_while (SCM exp, SCM env);
SCM_API SCM scm_nil_eq (SCM x, SCM y); SCM_API SCM scm_nil_eq (SCM x, SCM y);
#endif /* 0 */
SCM_API void scm_init_lang (void); SCM_API void scm_init_lang (void);
#else /* ! SCM_ENABLE_ELISP */
#define SCM_NILP(x) 0
#endif /* ! SCM_ENABLE_ELISP */
#define SCM_NULL_OR_NIL_P(x) (SCM_NULLP (x) || SCM_NILP (x))
#endif /* SCM_LANG_H */ #endif /* SCM_LANG_H */

View file

@ -43,6 +43,7 @@
#include "libguile/_scm.h" #include "libguile/_scm.h"
#include "libguile/eq.h" #include "libguile/eq.h"
#include "libguile/lang.h"
#include "libguile/validate.h" #include "libguile/validate.h"
#include "libguile/list.h" #include "libguile/list.h"
@ -165,7 +166,7 @@ SCM_DEFINE (scm_null_p, "null?", 1, 0, 0,
"Return @code{#t} iff @var{x} is the empty list, else @code{#f}.") "Return @code{#t} iff @var{x} is the empty list, else @code{#f}.")
#define FUNC_NAME s_scm_null_p #define FUNC_NAME s_scm_null_p
{ {
return SCM_BOOL (SCM_NULLP (x)); return SCM_BOOL (SCM_NULL_OR_NIL_P (x));
} }
#undef FUNC_NAME #undef FUNC_NAME
@ -192,11 +193,11 @@ scm_ilength(SCM sx)
SCM hare = sx; SCM hare = sx;
do { do {
if (SCM_NULLP(hare)) return i; if (SCM_NULL_OR_NIL_P(hare)) return i;
if (SCM_NCONSP(hare)) return -1; if (SCM_NCONSP(hare)) return -1;
hare = SCM_CDR(hare); hare = SCM_CDR(hare);
i++; i++;
if (SCM_NULLP(hare)) return i; if (SCM_NULL_OR_NIL_P(hare)) return i;
if (SCM_NCONSP(hare)) return -1; if (SCM_NCONSP(hare)) return -1;
hare = SCM_CDR(hare); hare = SCM_CDR(hare);
i++; i++;
@ -259,7 +260,7 @@ SCM_DEFINE (scm_append, "append", 0, 0, 1,
lloc = SCM_CDRLOC (*lloc); lloc = SCM_CDRLOC (*lloc);
arg = SCM_CDR (arg); arg = SCM_CDR (arg);
} }
SCM_VALIDATE_NULL (SCM_ARGn, arg); SCM_VALIDATE_NULL_OR_NIL (SCM_ARGn, arg);
arg = SCM_CAR (args); arg = SCM_CAR (args);
args = SCM_CDR (args); args = SCM_CDR (args);
}; };
@ -288,7 +289,7 @@ SCM_DEFINE (scm_append_x, "append!", 0, 0, 1,
lists = SCM_CDR (lists); lists = SCM_CDR (lists);
if (SCM_NULLP (lists)) { if (SCM_NULLP (lists)) {
return arg; return arg;
} else if (!SCM_NULLP (arg)) { } else if (!SCM_NULL_OR_NIL_P (arg)) {
SCM_VALIDATE_CONS (SCM_ARG1, arg); SCM_VALIDATE_CONS (SCM_ARG1, arg);
SCM_SETCDR (scm_last_pair (arg), scm_append_x (lists)); SCM_SETCDR (scm_last_pair (arg), scm_append_x (lists));
return arg; return arg;
@ -308,8 +309,8 @@ SCM_DEFINE (scm_last_pair, "last-pair", 1, 0, 0,
SCM tortoise = lst; SCM tortoise = lst;
SCM hare = lst; SCM hare = lst;
if (SCM_NULLP (lst)) if (SCM_NULL_OR_NIL_P (lst))
return SCM_EOL; return lst;
SCM_VALIDATE_CONS (SCM_ARG1, lst); SCM_VALIDATE_CONS (SCM_ARG1, lst);
do { do {
@ -340,11 +341,11 @@ SCM_DEFINE (scm_reverse, "reverse", 1, 0, 0,
SCM hare = lst; SCM hare = lst;
do { do {
if (SCM_NULLP(hare)) return result; if (SCM_NULL_OR_NIL_P(hare)) return result;
SCM_ASSERT(SCM_CONSP(hare), lst, 1, FUNC_NAME); SCM_ASSERT(SCM_CONSP(hare), lst, 1, FUNC_NAME);
result = scm_cons (SCM_CAR (hare), result); result = scm_cons (SCM_CAR (hare), result);
hare = SCM_CDR (hare); hare = SCM_CDR (hare);
if (SCM_NULLP(hare)) return result; if (SCM_NULL_OR_NIL_P(hare)) return result;
SCM_ASSERT(SCM_CONSP(hare), lst, 1, FUNC_NAME); SCM_ASSERT(SCM_CONSP(hare), lst, 1, FUNC_NAME);
result = scm_cons (SCM_CAR (hare), result); result = scm_cons (SCM_CAR (hare), result);
hare = SCM_CDR (hare); hare = SCM_CDR (hare);
@ -375,7 +376,7 @@ SCM_DEFINE (scm_reverse_x, "reverse!", 1, 1, 0,
else else
SCM_VALIDATE_LIST (2, new_tail); SCM_VALIDATE_LIST (2, new_tail);
while (SCM_NNULLP (lst)) while (!SCM_NULL_OR_NIL_P (lst))
{ {
SCM old_tail = SCM_CDR (lst); SCM old_tail = SCM_CDR (lst);
SCM_SETCDR (lst, new_tail); SCM_SETCDR (lst, new_tail);
@ -406,7 +407,7 @@ SCM_DEFINE (scm_list_ref, "list-ref", 2, 0, 0,
lst = SCM_CDR (lst); lst = SCM_CDR (lst);
} }
}; };
if (SCM_NULLP (lst)) if (SCM_NULL_OR_NIL_P (lst))
SCM_OUT_OF_RANGE (2, k); SCM_OUT_OF_RANGE (2, k);
else else
SCM_WRONG_TYPE_ARG (1, list); SCM_WRONG_TYPE_ARG (1, list);
@ -431,7 +432,7 @@ SCM_DEFINE (scm_list_set_x, "list-set!", 3, 0, 0,
lst = SCM_CDR (lst); lst = SCM_CDR (lst);
} }
}; };
if (SCM_NULLP (lst)) if (SCM_NULL_OR_NIL_P (lst))
SCM_OUT_OF_RANGE (2, k); SCM_OUT_OF_RANGE (2, k);
else else
SCM_WRONG_TYPE_ARG (1, list); SCM_WRONG_TYPE_ARG (1, list);
@ -479,7 +480,7 @@ SCM_DEFINE (scm_list_cdr_set_x, "list-cdr-set!", 3, 0, 0,
lst = SCM_CDR (lst); lst = SCM_CDR (lst);
} }
}; };
if (SCM_NULLP (lst)) if (SCM_NULL_OR_NIL_P (lst))
SCM_OUT_OF_RANGE (2, k); SCM_OUT_OF_RANGE (2, k);
else else
SCM_WRONG_TYPE_ARG (1, list); SCM_WRONG_TYPE_ARG (1, list);
@ -555,7 +556,7 @@ SCM_DEFINE (scm_list_copy, "list-copy", 1, 0, 0,
SCM SCM
scm_c_memq (SCM obj, SCM list) scm_c_memq (SCM obj, SCM list)
{ {
for (; !SCM_NULLP (list); list = SCM_CDR (list)) for (; !SCM_NULL_OR_NIL_P (list); list = SCM_CDR (list))
{ {
if (SCM_EQ_P (SCM_CAR (list), obj)) if (SCM_EQ_P (SCM_CAR (list), obj))
return list; return list;
@ -591,7 +592,7 @@ SCM_DEFINE (scm_memv, "memv", 2, 0, 0,
#define FUNC_NAME s_scm_memv #define FUNC_NAME s_scm_memv
{ {
SCM_VALIDATE_LIST (2, lst); SCM_VALIDATE_LIST (2, lst);
for (; !SCM_NULLP (lst); lst = SCM_CDR (lst)) for (; !SCM_NULL_OR_NIL_P (lst); lst = SCM_CDR (lst))
{ {
if (! SCM_FALSEP (scm_eqv_p (SCM_CAR (lst), x))) if (! SCM_FALSEP (scm_eqv_p (SCM_CAR (lst), x)))
return lst; return lst;
@ -612,7 +613,7 @@ SCM_DEFINE (scm_member, "member", 2, 0, 0,
#define FUNC_NAME s_scm_member #define FUNC_NAME s_scm_member
{ {
SCM_VALIDATE_LIST (2, lst); SCM_VALIDATE_LIST (2, lst);
for (; !SCM_NULLP (lst); lst = SCM_CDR (lst)) for (; !SCM_NULL_OR_NIL_P (lst); lst = SCM_CDR (lst))
{ {
if (! SCM_FALSEP (scm_equal_p (SCM_CAR (lst), x))) if (! SCM_FALSEP (scm_equal_p (SCM_CAR (lst), x)))
return lst; return lst;

View file

@ -55,6 +55,7 @@
#include "libguile/root.h" #include "libguile/root.h"
#include "libguile/strings.h" #include "libguile/strings.h"
#include "libguile/modules.h" #include "libguile/modules.h"
#include "libguile/lang.h"
#include "libguile/validate.h" #include "libguile/validate.h"
#include "libguile/load.h" #include "libguile/load.h"
@ -300,7 +301,7 @@ SCM_DEFINE (scm_search_path, "search-path", 2, 1, 0,
SCM walk; SCM walk;
max_path_len = 0; max_path_len = 0;
for (walk = path; !SCM_NULLP (walk); walk = SCM_CDR (walk)) for (walk = path; !SCM_NULL_OR_NIL_P (walk); walk = SCM_CDR (walk))
{ {
SCM elt = SCM_CAR (walk); SCM elt = SCM_CAR (walk);
SCM_ASSERT_TYPE (SCM_STRINGP (elt), path, 1, FUNC_NAME, SCM_ASSERT_TYPE (SCM_STRINGP (elt), path, 1, FUNC_NAME,
@ -338,7 +339,7 @@ SCM_DEFINE (scm_search_path, "search-path", 2, 1, 0,
SCM walk; SCM walk;
max_ext_len = 0; max_ext_len = 0;
for (walk = extensions; !SCM_NULLP (walk); walk = SCM_CDR (walk)) for (walk = extensions; !SCM_NULL_OR_NIL_P (walk); walk = SCM_CDR (walk))
{ {
SCM elt = SCM_CAR (walk); SCM elt = SCM_CAR (walk);
SCM_ASSERT_TYPE (SCM_STRINGP (elt), elt, 3, FUNC_NAME, SCM_ASSERT_TYPE (SCM_STRINGP (elt), elt, 3, FUNC_NAME,
@ -356,12 +357,12 @@ SCM_DEFINE (scm_search_path, "search-path", 2, 1, 0,
char *buf = SCM_MUST_MALLOC (buf_size); char *buf = SCM_MUST_MALLOC (buf_size);
/* This simplifies the loop below a bit. */ /* This simplifies the loop below a bit. */
if (SCM_NULLP (extensions)) if (SCM_NULL_OR_NIL_P (extensions))
extensions = scm_listofnullstr; extensions = scm_listofnullstr;
/* Try every path element. At this point, we know the path is a /* Try every path element. At this point, we know the path is a
proper list of strings. */ proper list of strings. */
for (; !SCM_NULLP (path); path = SCM_CDR (path)) for (; !SCM_NULL_OR_NIL_P (path); path = SCM_CDR (path))
{ {
size_t len; size_t len;
SCM dir = SCM_CAR (path); SCM dir = SCM_CAR (path);
@ -377,7 +378,7 @@ SCM_DEFINE (scm_search_path, "search-path", 2, 1, 0,
/* Try every extension. At this point, we know the extension /* Try every extension. At this point, we know the extension
list is a proper, nonempty list of strings. */ list is a proper, nonempty list of strings. */
for (exts = extensions; !SCM_NULLP (exts); exts = SCM_CDR (exts)) for (exts = extensions; !SCM_NULL_OR_NIL_P (exts); exts = SCM_CDR (exts))
{ {
SCM ext = SCM_CAR (exts); SCM ext = SCM_CAR (exts);
size_t ext_len = SCM_STRING_LENGTH (ext); size_t ext_len = SCM_STRING_LENGTH (ext);

View file

@ -47,6 +47,7 @@
#include "libguile/_scm.h" #include "libguile/_scm.h"
#include "libguile/mallocs.h" #include "libguile/mallocs.h"
#include "libguile/strings.h" #include "libguile/strings.h"
#include "libguile/lang.h"
#include "libguile/options.h" #include "libguile/options.h"
@ -198,7 +199,7 @@ change_option_setting (SCM args, scm_t_option options[], unsigned int n, const c
flags[i] = options[i].val; flags[i] = options[i].val;
} }
while (!SCM_NULLP (args)) while (!SCM_NULL_OR_NIL_P (args))
{ {
SCM name = SCM_CAR (args); SCM name = SCM_CAR (args);
int found = 0; int found = 0;
@ -257,7 +258,7 @@ scm_options (SCM args, scm_t_option options[], unsigned int n, const char *s)
{ {
if (SCM_UNBNDP (args)) if (SCM_UNBNDP (args))
return get_option_setting (options, n); return get_option_setting (options, n);
else if (!SCM_NULLP (args) && !SCM_CONSP (args)) else if (!SCM_NULL_OR_NIL_P (args) && !SCM_CONSP (args))
/* Dirk:FIXME:: This criterion should be improved. IMO it is better to /* Dirk:FIXME:: This criterion should be improved. IMO it is better to
* demand that args is #t if documentation should be shown than to say * demand that args is #t if documentation should be shown than to say
* that every argument except a list will print out documentation. */ * that every argument except a list will print out documentation. */

View file

@ -54,6 +54,7 @@
#include "libguile/feature.h" #include "libguile/feature.h"
#include "libguile/strings.h" #include "libguile/strings.h"
#include "libguile/vectors.h" #include "libguile/vectors.h"
#include "libguile/lang.h"
#include "libguile/validate.h" #include "libguile/validate.h"
#include "libguile/posix.h" #include "libguile/posix.h"
@ -916,7 +917,7 @@ environ_list_to_c (SCM envlist, int arg, const char *proc)
result = (char **) malloc ((num_strings + 1) * sizeof (char *)); result = (char **) malloc ((num_strings + 1) * sizeof (char *));
if (result == NULL) if (result == NULL)
scm_memory_error (proc); scm_memory_error (proc);
for (i = 0; !SCM_NULLP (envlist); ++i, envlist = SCM_CDR (envlist)) for (i = 0; !SCM_NULL_OR_NIL_P (envlist); ++i, envlist = SCM_CDR (envlist))
{ {
SCM str = SCM_CAR (envlist); SCM str = SCM_CAR (envlist);
int len; int len;

View file

@ -62,6 +62,7 @@
#include "libguile/strings.h" #include "libguile/strings.h"
#include "libguile/strports.h" #include "libguile/strports.h"
#include "libguile/vectors.h" #include "libguile/vectors.h"
#include "libguile/lang.h"
#include "libguile/validate.h" #include "libguile/validate.h"
#include "libguile/print.h" #include "libguile/print.h"
@ -74,7 +75,7 @@
char *scm_isymnames[] = char *scm_isymnames[] =
{ {
/* This table must agree with the declarations */ /* This table must agree with the list of SCM_IM_ constants in tags.h */
"#@and", "#@and",
"#@begin", "#@begin",
"#@case", "#@case",
@ -113,17 +114,17 @@ char *scm_isymnames[] =
/* Multi-language support */ /* Multi-language support */
"#@nil-cond", "#@nil-cond",
"#@nil-ify",
"#@t-ify",
"#@0-cond",
"#@0-ify",
"#@1-ify",
"#@bind", "#@bind",
"#@delay", "#@delay",
"#@call-with-values", "#@call-with-values",
"#<unbound>" "#<unbound>",
/* Elisp nil value. This is its Scheme name; whenever it's printed
in Elisp, it should appear as the symbol `nil'. */
"#nil"
}; };
scm_t_option scm_print_opts[] = { scm_t_option scm_print_opts[] = {
@ -781,7 +782,7 @@ scm_iprlist (char *hdr,SCM exp,int tlr,SCM port,scm_print_state *pstate)
/* CHECK_INTS; */ /* CHECK_INTS; */
scm_iprin1 (SCM_CAR (exp), port, pstate); scm_iprin1 (SCM_CAR (exp), port, pstate);
} }
if (!SCM_NULLP (exp)) if (!SCM_NULL_OR_NIL_P (exp))
{ {
scm_puts (" . ", port); scm_puts (" . ", port);
scm_iprin1 (exp, port, pstate); scm_iprin1 (exp, port, pstate);
@ -822,7 +823,7 @@ fancy_printing:
scm_iprin1 (SCM_CAR (exp), port, pstate); scm_iprin1 (SCM_CAR (exp), port, pstate);
} }
} }
if (!SCM_NULLP (exp)) if (!SCM_NULL_OR_NIL_P (exp))
{ {
scm_puts (" . ", port); scm_puts (" . ", port);
scm_iprin1 (exp, port, pstate); scm_iprin1 (exp, port, pstate);

View file

@ -72,7 +72,7 @@ scm_t_option scm_read_opts[] = {
{ SCM_OPTION_BOOLEAN, "case-insensitive", 0, { SCM_OPTION_BOOLEAN, "case-insensitive", 0,
"Convert symbols to lower case."}, "Convert symbols to lower case."},
{ SCM_OPTION_SCM, "keywords", SCM_UNPACK (SCM_BOOL_F), { SCM_OPTION_SCM, "keywords", SCM_UNPACK (SCM_BOOL_F),
"Style of keyword recognition: #f or 'prefix"} "Style of keyword recognition: #f or 'prefix."}
}; };
SCM_DEFINE (scm_read_options, "read-options-interface", 0, 1, 0, SCM_DEFINE (scm_read_options, "read-options-interface", 0, 1, 0,

View file

@ -515,7 +515,7 @@ scm_compile_shell_switches (int argc, char **argv)
else if (! strcmp (argv[i], "-e")) /* entry point */ else if (! strcmp (argv[i], "-e")) /* entry point */
{ {
if (++i < argc) if (++i < argc)
entry_point = gh_symbol2scm (argv[i]); entry_point = scm_str2symbol (argv[i]);
else else
scm_shell_usage (1, "missing argument to `-e' switch"); scm_shell_usage (1, "missing argument to `-e' switch");
} }

View file

@ -86,6 +86,7 @@ char *alloca ();
#include "libguile/feature.h" #include "libguile/feature.h"
#include "libguile/root.h" #include "libguile/root.h"
#include "libguile/vectors.h" #include "libguile/vectors.h"
#include "libguile/lang.h"
#include "libguile/validate.h" #include "libguile/validate.h"
#include "libguile/sort.h" #include "libguile/sort.h"
@ -457,7 +458,7 @@ SCM_DEFINE (scm_sorted_p, "sorted?", 2, 0, 0,
SCM *vp; SCM *vp;
cmp_fun_t cmp = scm_cmp_function (less); cmp_fun_t cmp = scm_cmp_function (less);
if (SCM_NULLP (items)) if (SCM_NULL_OR_NIL_P (items))
return SCM_BOOL_T; return SCM_BOOL_T;
SCM_VALIDATE_NIM (2,less); SCM_VALIDATE_NIM (2,less);
@ -530,9 +531,9 @@ SCM_DEFINE (scm_merge, "merge", 3, 0, 0,
cmp_fun_t cmp = scm_cmp_function (less); cmp_fun_t cmp = scm_cmp_function (less);
SCM_VALIDATE_NIM (3,less); SCM_VALIDATE_NIM (3,less);
if (SCM_NULLP (alist)) if (SCM_NULL_OR_NIL_P (alist))
return blist; return blist;
else if (SCM_NULLP (blist)) else if (SCM_NULL_OR_NIL_P (blist))
return alist; return alist;
else else
{ {
@ -584,9 +585,9 @@ scm_merge_list_x (SCM alist, SCM blist,
{ {
SCM build, last; SCM build, last;
if (SCM_NULLP (alist)) if (SCM_NULL_OR_NIL_P (alist))
return blist; return blist;
else if (SCM_NULLP (blist)) else if (SCM_NULL_OR_NIL_P (blist))
return alist; return alist;
else else
{ {
@ -641,9 +642,9 @@ SCM_DEFINE (scm_merge_x, "merge!", 3, 0, 0,
long alen, blen; /* list lengths */ long alen, blen; /* list lengths */
SCM_VALIDATE_NIM (3,less); SCM_VALIDATE_NIM (3,less);
if (SCM_NULLP (alist)) if (SCM_NULL_OR_NIL_P (alist))
return blist; return blist;
else if (SCM_NULLP (blist)) else if (SCM_NULL_OR_NIL_P (blist))
return alist; return alist;
else else
{ {
@ -715,8 +716,8 @@ SCM_DEFINE (scm_sort_x, "sort!", 2, 0, 0,
#define FUNC_NAME s_scm_sort_x #define FUNC_NAME s_scm_sort_x
{ {
long len; /* list/vector length */ long len; /* list/vector length */
if (SCM_NULLP(items)) if (SCM_NULL_OR_NIL_P (items))
return SCM_EOL; return items;
SCM_VALIDATE_NIM (2,less); SCM_VALIDATE_NIM (2,less);
@ -748,8 +749,8 @@ SCM_DEFINE (scm_sort, "sort", 2, 0, 0,
"elements. This is not a stable sort.") "elements. This is not a stable sort.")
#define FUNC_NAME s_scm_sort #define FUNC_NAME s_scm_sort
{ {
if (SCM_NULLP(items)) if (SCM_NULL_OR_NIL_P (items))
return SCM_EOL; return items;
SCM_VALIDATE_NIM (2,less); SCM_VALIDATE_NIM (2,less);
if (SCM_CONSP (items)) if (SCM_CONSP (items))
@ -846,8 +847,8 @@ SCM_DEFINE (scm_stable_sort_x, "stable-sort!", 2, 0, 0,
{ {
long len; /* list/vector length */ long len; /* list/vector length */
if (SCM_NULLP (items)) if (SCM_NULL_OR_NIL_P (items))
return SCM_EOL; return items;
SCM_VALIDATE_NIM (2,less); SCM_VALIDATE_NIM (2,less);
if (SCM_CONSP (items)) if (SCM_CONSP (items))
@ -885,8 +886,8 @@ SCM_DEFINE (scm_stable_sort, "stable-sort", 2, 0, 0,
#define FUNC_NAME s_scm_stable_sort #define FUNC_NAME s_scm_stable_sort
{ {
long len; /* list/vector length */ long len; /* list/vector length */
if (SCM_NULLP (items)) if (SCM_NULL_OR_NIL_P (items))
return SCM_EOL; return items;
SCM_VALIDATE_NIM (2,less); SCM_VALIDATE_NIM (2,less);
if (SCM_CONSP (items)) if (SCM_CONSP (items))

View file

@ -161,7 +161,7 @@ scm_srcprops_to_plist (SCM obj)
plist = scm_acons (scm_sym_filename, SRCPROPFNAME (obj), plist); plist = scm_acons (scm_sym_filename, SRCPROPFNAME (obj), plist);
plist = scm_acons (scm_sym_column, SCM_MAKINUM (SRCPROPCOL (obj)), plist); plist = scm_acons (scm_sym_column, SCM_MAKINUM (SRCPROPCOL (obj)), plist);
plist = scm_acons (scm_sym_line, SCM_MAKINUM (SRCPROPLINE (obj)), plist); plist = scm_acons (scm_sym_line, SCM_MAKINUM (SRCPROPLINE (obj)), plist);
plist = scm_acons (scm_sym_breakpoint, SRCPROPBRK (obj), plist); plist = scm_acons (scm_sym_breakpoint, SCM_BOOL (SRCPROPBRK (obj)), plist);
return plist; return plist;
} }
@ -224,7 +224,7 @@ SCM_DEFINE (scm_source_property, "source-property", 2, 0, 0,
p = scm_hashq_ref (scm_source_whash, obj, SCM_EOL); p = scm_hashq_ref (scm_source_whash, obj, SCM_EOL);
if (!SRCPROPSP (p)) if (!SRCPROPSP (p))
goto plist; goto plist;
if (SCM_EQ_P (scm_sym_breakpoint, key)) p = SRCPROPBRK (p); if (SCM_EQ_P (scm_sym_breakpoint, key)) p = SCM_BOOL (SRCPROPBRK (p));
else if (SCM_EQ_P (scm_sym_line, key)) p = SCM_MAKINUM (SRCPROPLINE (p)); else if (SCM_EQ_P (scm_sym_line, key)) p = SCM_MAKINUM (SRCPROPLINE (p));
else if (SCM_EQ_P (scm_sym_column, key)) p = SCM_MAKINUM (SRCPROPCOL (p)); else if (SCM_EQ_P (scm_sym_column, key)) p = SCM_MAKINUM (SRCPROPCOL (p));
else if (SCM_EQ_P (scm_sym_filename, key)) p = SRCPROPFNAME (p); else if (SCM_EQ_P (scm_sym_filename, key)) p = SRCPROPFNAME (p);

View file

@ -97,8 +97,7 @@ typedef struct scm_t_srcprops_chunk
#define SCM_SOURCE_PROPERTY_FLAG_BREAK (1L << 16) #define SCM_SOURCE_PROPERTY_FLAG_BREAK (1L << 16)
#define SRCPROPSP(p) (SCM_TYP16_PREDICATE (scm_tc16_srcprops, p)) #define SRCPROPSP(p) (SCM_TYP16_PREDICATE (scm_tc16_srcprops, p))
#define SRCPROPBRK(p) \ #define SRCPROPBRK(p) (SCM_CELL_WORD_0 (p) & SCM_SOURCE_PROPERTY_FLAG_BREAK)
(SCM_BOOL (SCM_CELL_WORD_0 (p) & SCM_SOURCE_PROPERTY_FLAG_BREAK))
#define SRCPROPPOS(p) ((scm_t_srcprops *) SCM_CELL_WORD_1 (p))->pos #define SRCPROPPOS(p) ((scm_t_srcprops *) SCM_CELL_WORD_1 (p))->pos
#define SRCPROPLINE(p) (SRCPROPPOS(p) >> 12) #define SRCPROPLINE(p) (SRCPROPPOS(p) >> 12)
#define SRCPROPCOL(p) (SRCPROPPOS(p) & 0x0fffL) #define SRCPROPCOL(p) (SRCPROPPOS(p) & 0x0fffL)
@ -118,7 +117,7 @@ typedef struct scm_t_srcprops_chunk
#define SRCBRKP(x) (!SCM_IMP (t.arg1 = scm_whash_lookup (scm_source_whash, (x)))\ #define SRCBRKP(x) (!SCM_IMP (t.arg1 = scm_whash_lookup (scm_source_whash, (x)))\
&& SRCPROPSP (t.arg1)\ && SRCPROPSP (t.arg1)\
&& (SCM_CELL_WORD_0 (t.arg1) & (1L << 16))) && SRCPROPBRK (t.arg1))
#define PROCTRACEP(x) (!SCM_FALSEP (scm_procedure_property (x, scm_sym_trace))) #define PROCTRACEP(x) (!SCM_FALSEP (scm_procedure_property (x, scm_sym_trace)))

View file

@ -458,15 +458,10 @@ SCM_API char *scm_isymnames[]; /* defined in print.c */
/* Multi-language support */ /* Multi-language support */
#define SCM_IM_NIL_COND SCM_MAKISYM (25) #define SCM_IM_NIL_COND SCM_MAKISYM (25)
#define SCM_IM_NIL_IFY SCM_MAKISYM (26) #define SCM_IM_BIND SCM_MAKISYM (26)
#define SCM_IM_T_IFY SCM_MAKISYM (27)
#define SCM_IM_0_COND SCM_MAKISYM (28)
#define SCM_IM_0_IFY SCM_MAKISYM (29)
#define SCM_IM_1_IFY SCM_MAKISYM (30)
#define SCM_IM_BIND SCM_MAKISYM (31)
#define SCM_IM_DELAY SCM_MAKISYM (32) #define SCM_IM_DELAY SCM_MAKISYM (27)
#define SCM_IM_CALL_WITH_VALUES SCM_MAKISYM (33) #define SCM_IM_CALL_WITH_VALUES SCM_MAKISYM (28)
/* When a variable is unbound this is marked by the SCM_UNDEFINED /* When a variable is unbound this is marked by the SCM_UNDEFINED
* value. The following is an unbound value which can be handled on * value. The following is an unbound value which can be handled on
@ -477,10 +472,13 @@ SCM_API char *scm_isymnames[]; /* defined in print.c */
* used instead. It is not ideal to let this kind of unique and * used instead. It is not ideal to let this kind of unique and
* strange values loose on the Scheme level. * strange values loose on the Scheme level.
*/ */
#define SCM_UNBOUND SCM_MAKIFLAG (34) #define SCM_UNBOUND SCM_MAKIFLAG (29)
#define SCM_UNBNDP(x) (SCM_EQ_P ((x), SCM_UNDEFINED)) #define SCM_UNBNDP(x) (SCM_EQ_P ((x), SCM_UNDEFINED))
/* The Elisp nil value. */
#define SCM_ELISP_NIL SCM_MAKIFLAG (30)
/* Dispatching aids: /* Dispatching aids:

View file

@ -58,6 +58,7 @@
#include "libguile/stacks.h" #include "libguile/stacks.h"
#include "libguile/fluids.h" #include "libguile/fluids.h"
#include "libguile/ports.h" #include "libguile/ports.h"
#include "libguile/lang.h"
#include "libguile/validate.h" #include "libguile/validate.h"
#include "libguile/throw.h" #include "libguile/throw.h"
@ -401,7 +402,7 @@ scm_handle_by_proc_catching_all (void *handler_data, SCM tag, SCM throw_args)
int int
scm_exit_status (SCM args) scm_exit_status (SCM args)
{ {
if (SCM_NNULLP (args)) if (!SCM_NULL_OR_NIL_P (args))
{ {
SCM cqa = SCM_CAR (args); SCM cqa = SCM_CAR (args);

View file

@ -323,6 +323,8 @@
#define SCM_VALIDATE_NULL(pos, scm) SCM_MAKE_VALIDATE (pos, scm, NULLP) #define SCM_VALIDATE_NULL(pos, scm) SCM_MAKE_VALIDATE (pos, scm, NULLP)
#define SCM_VALIDATE_NULL_OR_NIL(pos, scm) SCM_MAKE_VALIDATE (pos, scm, NULL_OR_NIL_P)
#define SCM_VALIDATE_CONS(pos, scm) SCM_MAKE_VALIDATE (pos, scm, CONSP) #define SCM_VALIDATE_CONS(pos, scm) SCM_MAKE_VALIDATE (pos, scm, CONSP)
#define SCM_VALIDATE_LIST(pos, lst) \ #define SCM_VALIDATE_LIST(pos, lst) \

View file

@ -46,6 +46,7 @@
#include "libguile/eq.h" #include "libguile/eq.h"
#include "libguile/root.h" #include "libguile/root.h"
#include "libguile/strings.h" #include "libguile/strings.h"
#include "libguile/lang.h"
#include "libguile/validate.h" #include "libguile/validate.h"
#include "libguile/vectors.h" #include "libguile/vectors.h"
@ -101,7 +102,7 @@ SCM_DEFINE (scm_vector, "vector", 0, 0, 1,
SCM_VALIDATE_LIST_COPYLEN (1, l, i); SCM_VALIDATE_LIST_COPYLEN (1, l, i);
res = scm_c_make_vector (i, SCM_UNSPECIFIED); res = scm_c_make_vector (i, SCM_UNSPECIFIED);
data = SCM_VELTS (res); data = SCM_VELTS (res);
while (!SCM_NULLP (l)) while (!SCM_NULL_OR_NIL_P (l))
{ {
*data++ = SCM_CAR (l); *data++ = SCM_CAR (l);
l = SCM_CDR (l); l = SCM_CDR (l);

View file

@ -44,6 +44,7 @@
#include "libguile/_scm.h" #include "libguile/_scm.h"
#include "libguile/vectors.h" #include "libguile/vectors.h"
#include "libguile/lang.h"
#include "libguile/validate.h" #include "libguile/validate.h"
#include "libguile/weaks.h" #include "libguile/weaks.h"
@ -144,7 +145,7 @@ SCM_DEFINE (scm_weak_vector, "weak-vector", 0, 0, 1,
res = scm_make_weak_vector (SCM_MAKINUM (i), SCM_UNSPECIFIED); res = scm_make_weak_vector (SCM_MAKINUM (i), SCM_UNSPECIFIED);
data = SCM_VELTS (res); data = SCM_VELTS (res);
while (!SCM_NULLP (l)) while (!SCM_NULL_OR_NIL_P (l))
{ {
*data++ = SCM_CAR (l); *data++ = SCM_CAR (l);
l = SCM_CDR (l); l = SCM_CDR (l);