X-Git-Url: https://git.hcoop.net/bpt/guile.git/blobdiff_plain/78a0461a6f47f1c14a467caa91ae3906c6522c1d..fbf0c8c7b194202e01338f8b5324126bf73af4c9:/libguile/evalext.c diff --git a/libguile/evalext.c b/libguile/evalext.c index f53c9b24e..b9e0130c3 100644 --- a/libguile/evalext.c +++ b/libguile/evalext.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -38,14 +38,20 @@ * If you write modifications of your own for GUILE, it is your choice * whether to permit this exception to apply to your modifications. * If you do not wish that, delete this exception notice. */ + +/* Software engineering face-lift by Greg J. Badros, 11-Dec-1999, + gjb@cs.washington.edu, http://www.cs.washington.edu/homes/gjb */ + -#include "_scm.h" -#include "eval.h" -#include "macros.h" -#include "modules.h" +#include "libguile/_scm.h" +#include "libguile/eval.h" +#include "libguile/macros.h" +#include "libguile/modules.h" +#include "libguile/fluids.h" -#include "evalext.h" +#include "libguile/validate.h" +#include "libguile/evalext.h" SCM_SYMBOL (scm_sym_setter, "setter"); @@ -54,26 +60,28 @@ scm_m_generalized_set_x (SCM xorig, SCM env) { SCM x = SCM_CDR (xorig); SCM_ASSYNT (2 == scm_ilength (x), xorig, scm_s_expression, scm_s_set_x); - if (SCM_NIMP (SCM_CAR (x)) && SCM_SYMBOLP (SCM_CAR (x))) + if (SCM_SYMBOLP (SCM_CAR (x))) return scm_cons (SCM_IM_SET_X, x); - else if (SCM_NIMP (SCM_CAR (x)) && SCM_CONSP (SCM_CAR (x))) + else if (SCM_CONSP (SCM_CAR (x))) return scm_cons (SCM_LIST2 (scm_sym_setter, SCM_CAAR (x)), scm_append (SCM_LIST2 (SCM_CDAR (x), SCM_CDR (x)))); return scm_wta (xorig, scm_s_variable, scm_s_set_x); } -SCM_PROC (s_definedp, "defined?", 1, 1, 0, scm_definedp); - -SCM -scm_definedp (SCM sym, SCM env) +SCM_DEFINE (scm_definedp, "defined?", 1, 1, 0, + (SCM sym, SCM env), + "Return @code{#t} if @var{sym} is defined in the top-level environment.") +#define FUNC_NAME s_scm_definedp { SCM vcell; - SCM_ASSERT (SCM_NIMP (sym) && SCM_SYMBOLP (sym), sym, SCM_ARG1, s_definedp); + SCM_VALIDATE_SYMBOL (1,sym); if (SCM_UNBNDP (env)) vcell = scm_sym2vcell(sym, - SCM_CDR (scm_top_level_lookup_closure_var), + scm_module_system_booted_p + ? SCM_TOP_LEVEL_LOOKUP_CLOSURE + : SCM_EOL, SCM_BOOL_F); else { @@ -81,22 +89,21 @@ scm_definedp (SCM sym, SCM env) register SCM b; for (; SCM_NIMP (frames); frames = SCM_CDR (frames)) { - SCM_ASSERT (SCM_CONSP (frames), env, SCM_ARG2, s_definedp); + SCM_ASSERT (SCM_CONSP (frames), env, SCM_ARG2, FUNC_NAME); b = SCM_CAR (frames); if (SCM_NFALSEP (scm_procedure_p (b))) break; - SCM_ASSERT (SCM_NIMP (b) && SCM_CONSP (b), - env, SCM_ARG2, s_definedp); + SCM_ASSERT (SCM_CONSP (b), env, SCM_ARG2, FUNC_NAME); for (b = SCM_CAR (b); SCM_NIMP (b); b = SCM_CDR (b)) { if (SCM_NCONSP (b)) { - if (b == sym) + if (SCM_EQ_P (b, sym)) return SCM_BOOL_T; else break; } - if (SCM_CAR (b) == sym) + if (SCM_EQ_P (SCM_CAR (b), sym)) return SCM_BOOL_T; } } @@ -105,37 +112,28 @@ scm_definedp (SCM sym, SCM env) SCM_BOOL_F); } - return (vcell == SCM_BOOL_F || SCM_UNBNDP (SCM_CDR (vcell)) + return (SCM_FALSEP (vcell) || SCM_UNBNDP (SCM_CDR (vcell)) ? SCM_BOOL_F : SCM_BOOL_T); } +#undef FUNC_NAME SCM_SYNTAX (s_undefine, "undefine", scm_makacro, scm_m_undefine); SCM -scm_m_undefine (x, env) - SCM x, env; +scm_m_undefine (SCM x, SCM env) { SCM arg1 = x; x = SCM_CDR (x); SCM_ASSYNT (SCM_TOP_LEVEL (env), arg1, "bad placement ", s_undefine); - SCM_ASSYNT (SCM_NIMP (x) && SCM_CONSP (x) && SCM_CDR (x) == SCM_EOL, + SCM_ASSYNT (SCM_CONSP (x) && SCM_NULLP (SCM_CDR (x)), arg1, scm_s_expression, s_undefine); x = SCM_CAR (x); - SCM_ASSYNT (SCM_NIMP (x) && SCM_SYMBOLP (x), arg1, scm_s_variable, s_undefine); + SCM_ASSYNT (SCM_SYMBOLP (x), arg1, scm_s_variable, s_undefine); arg1 = scm_sym2vcell (x, scm_env_top_level (env), SCM_BOOL_F); SCM_ASSYNT (SCM_NFALSEP (arg1) && !SCM_UNBNDP (SCM_CDR (arg1)), x, "variable already unbound ", s_undefine); -#if 0 -#ifndef SCM_RECKLESS - if (SCM_NIMP (SCM_CDR (arg1)) && ((SCM) SCM_SNAME (SCM_CDR (arg1)) == x)) - scm_warn ("undefining built-in ", SCM_CHARS (x)); - else -#endif - if (5 <= scm_verbose && SCM_UNDEFINED != SCM_CDR (arg1)) - scm_warn ("redefining ", SCM_CHARS (x)); -#endif SCM_SETCDR (arg1, SCM_UNDEFINED); #ifdef SICP return SCM_CAR (arg1); @@ -144,14 +142,19 @@ scm_m_undefine (x, env) #endif } -/* This name is obsolete. Will be removed in 1.5. */ -SCM_PROC (s_serial_map, "serial-map", 2, 0, 1, scm_map); - -SCM_PROC (s_map_in_order, "map-in-order", 2, 0, 1, scm_map); +SCM_REGISTER_PROC (s_map_in_order, "map-in-order", 2, 0, 1, scm_map); void scm_init_evalext () { scm_make_synt (scm_s_set_x, scm_makmmacro, scm_m_generalized_set_x); -#include "evalext.x" +#ifndef SCM_MAGIC_SNARFER +#include "libguile/evalext.x" +#endif } + +/* + Local Variables: + c-file-style: "gnu" + End: +*/