static SCM
with_traps_inner (void *data)
{
- SCM thunk = SCM_PACK (data);
+ SCM thunk = SCM_PACK ((scm_t_bits) data);
return scm_call_0 (thunk);
}
int writingp = SCM_WRITINGP (pstate);
scm_puts ("#<memoized ", port);
SCM_SET_WRITINGP (pstate, 1);
-#ifdef GUILE_DEBUG
scm_iprin1 (SCM_MEMOIZED_EXP (obj), port, pstate);
-#else
- scm_iprin1 (scm_unmemoize (obj), port, pstate);
-#endif
SCM_SET_WRITINGP (pstate, writingp);
scm_putc ('>', port);
return 1;
"Return @code{#t} if @var{obj} is memoized.")
#define FUNC_NAME s_scm_memoized_p
{
- return SCM_BOOL(SCM_MEMOIZEDP (obj));
+ return scm_from_bool(SCM_MEMOIZEDP (obj));
}
#undef FUNC_NAME
#include "libguile/variable.h"
#include "libguile/procs.h"
-SCM_DEFINE (scm_make_iloc, "make-iloc", 3, 0, 0,
- (SCM frame, SCM binding, SCM cdrp),
- "Return a new iloc with frame offset @var{frame}, binding\n"
- "offset @var{binding} and the cdr flag @var{cdrp}.")
-#define FUNC_NAME s_scm_make_iloc
-{
- SCM_VALIDATE_INUM (1, frame);
- SCM_VALIDATE_INUM (2, binding);
- return SCM_MAKE_ILOC (SCM_INUM (frame),
- SCM_INUM (binding),
- !SCM_FALSEP (cdrp));
-}
-#undef FUNC_NAME
-
-SCM_DEFINE (scm_iloc_p, "iloc?", 1, 0, 0,
- (SCM obj),
- "Return @code{#t} if @var{obj} is an iloc.")
-#define FUNC_NAME s_scm_iloc_p
-{
- return SCM_BOOL(SCM_ILOCP (obj));
-}
-#undef FUNC_NAME
-
SCM_DEFINE (scm_memcons, "memcons", 2, 1, 0,
(SCM car, SCM cdr, SCM env),
"Return a new memoized cons cell with @var{car} and @var{cdr}\n"
SCM_DEFINE (scm_mem_to_proc, "mem->proc", 1, 0, 0,
(SCM obj),
- "Convert a memoized object (which must be a lambda expression)\n"
+ "Convert a memoized object (which must represent a body)\n"
"to a procedure.")
#define FUNC_NAME s_scm_mem_to_proc
{
SCM_VALIDATE_MEMOIZED (1, obj);
env = SCM_MEMOIZED_ENV (obj);
obj = SCM_MEMOIZED_EXP (obj);
- if (!SCM_CONSP (obj) || !SCM_EQ_P (SCM_CAR (obj), SCM_IM_LAMBDA))
- SCM_MISC_ERROR ("expected lambda expression", scm_list_1 (obj));
- return scm_closure (SCM_CDR (obj), env);
+ return scm_closure (obj, env);
}
#undef FUNC_NAME
#define FUNC_NAME s_scm_proc_to_mem
{
SCM_VALIDATE_CLOSURE (1, obj);
- return scm_make_memoized (scm_cons (SCM_IM_LAMBDA, SCM_CODE (obj)),
- SCM_ENV (obj));
+ return scm_make_memoized (SCM_CODE (obj), SCM_ENV (obj));
}
#undef FUNC_NAME
#endif /* GUILE_DEBUG */
-SCM_DEFINE (scm_unmemoize, "unmemoize", 1, 0, 0,
+SCM_DEFINE (scm_i_unmemoize_expr, "unmemoize-expr", 1, 0, 0,
(SCM m),
"Unmemoize the memoized expression @var{m},")
-#define FUNC_NAME s_scm_unmemoize
+#define FUNC_NAME s_scm_i_unmemoize_expr
{
SCM_VALIDATE_MEMOIZED (1, m);
- return scm_unmemocopy (SCM_MEMOIZED_EXP (m), SCM_MEMOIZED_ENV (m));
+ return scm_i_unmemocopy_expr (SCM_MEMOIZED_EXP (m), SCM_MEMOIZED_ENV (m));
}
#undef FUNC_NAME
#if 0
/* Source property scm_sym_procname not implemented yet... */
SCM name = scm_source_property (SCM_CAR (SCM_CLOSURE_BODY (proc)), scm_sym_procname);
- if (SCM_FALSEP (name))
+ if (scm_is_false (name))
name = scm_procedure_property (proc, scm_sym_name);
#endif
- if (SCM_FALSEP (name) && SCM_CLOSUREP (proc))
+ if (scm_is_false (name) && SCM_CLOSUREP (proc))
name = scm_reverse_lookup (SCM_ENV (proc), proc);
return name;
}
switch (SCM_TYP7 (proc)) {
case scm_tcs_closures:
{
- SCM formals = SCM_CLOSURE_FORMALS (proc);
- SCM src = scm_source_property (SCM_CLOSURE_BODY (proc), scm_sym_copy);
- if (!SCM_FALSEP (src))
- return scm_cons2 (scm_sym_lambda, formals, src);
- return scm_cons (scm_sym_lambda,
- scm_unmemocopy (SCM_CODE (proc),
- SCM_EXTEND_ENV (formals,
- SCM_EOL,
- SCM_ENV (proc))));
+ const SCM formals = SCM_CLOSURE_FORMALS (proc);
+ const SCM body = SCM_CLOSURE_BODY (proc);
+ const SCM src = scm_source_property (body, scm_sym_copy);
+
+ if (scm_is_true (src))
+ {
+ return scm_cons2 (scm_sym_lambda, formals, src);
+ }
+ else
+ {
+ const SCM env = SCM_EXTEND_ENV (formals, SCM_EOL, SCM_ENV (proc));
+ return scm_cons2 (scm_sym_lambda,
+ scm_i_finite_list_copy (formals),
+ scm_i_unmemocopy_body (body, env));
+ }
}
case scm_tcs_struct:
if (!SCM_I_OPERATORP (proc))
case scm_tc7_pws:
{
SCM src = scm_procedure_property (proc, scm_sym_source);
- if (!SCM_FALSEP (src))
+ if (scm_is_true (src))
return src;
proc = SCM_PROCEDURE (proc);
goto again;
SCM
scm_reverse_lookup (SCM env, SCM data)
{
- while (SCM_CONSP (env) && SCM_CONSP (SCM_CAR (env)))
+ while (scm_is_pair (env) && scm_is_pair (SCM_CAR (env)))
{
SCM names = SCM_CAAR (env);
SCM values = SCM_CDAR (env);
- while (SCM_CONSP (names))
+ while (scm_is_pair (names))
{
- if (SCM_EQ_P (SCM_CAR (values), data))
+ if (scm_is_eq (SCM_CAR (values), data))
return SCM_CAR (names);
names = SCM_CDR (names);
values = SCM_CDR (values);
}
- if (!SCM_NULLP (names) && SCM_EQ_P (values, data))
+ if (!scm_is_null (names) && scm_is_eq (values, data))
return names;
env = SCM_CDR (env);
}
#define FUNC_NAME s_start_stack
{
exp = SCM_CDR (exp);
- if (!SCM_CONSP (exp)
- || !SCM_CONSP (SCM_CDR (exp))
- || !SCM_NULLP (SCM_CDDR (exp)))
+ if (!scm_is_pair (exp)
+ || !scm_is_pair (SCM_CDR (exp))
+ || !scm_is_null (SCM_CDDR (exp)))
SCM_WRONG_NUM_ARGS ();
return scm_start_stack (scm_eval_car (exp, env), SCM_CADR (exp), env);
}
"Return @code{#t} if @var{obj} is a debug object.")
#define FUNC_NAME s_scm_debug_object_p
{
- return SCM_BOOL(SCM_DEBUGOBJP (obj));
+ return scm_from_bool(SCM_DEBUGOBJP (obj));
}
#undef FUNC_NAME