diff options
author | Andy Wingo <wingo@pobox.com> | 2009-02-11 23:04:37 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2009-02-11 23:04:37 +0100 |
commit | df8cd091f9ffd31a7f77337d2e804d6801ca61ee (patch) | |
tree | f6ee1b30c91800c9996e538485bec89d7c471447 | |
parent | e14679bd52ce8b6ea700845cc5c8139725bcec1a (diff) | |
download | guile-df8cd091f9ffd31a7f77337d2e804d6801ca61ee.tar.gz |
provide program apply_0, apply_1, apply_2 implementations
* libguile/programs.c (program_apply_0, program_apply_1)
(program_apply_2, scm_bootstrap_programs): Provides some cons-less
smob application procedures. This molests some internal interfaces, but
hey, we're internal.
-rw-r--r-- | libguile/programs.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/libguile/programs.c b/libguile/programs.c index 1c42e15d6..50b1b624b 100644 --- a/libguile/programs.c +++ b/libguile/programs.c @@ -98,6 +98,27 @@ program_apply (SCM program, SCM args) return scm_vm_apply (scm_the_vm (), program, args); } +static SCM +program_apply_0 (SCM program) +{ + return scm_c_vm_run (scm_the_vm (), program, NULL, 0); +} + +static SCM +program_apply_1 (SCM program, SCM a) +{ + return scm_c_vm_run (scm_the_vm (), program, &a, 1); +} + +static SCM +program_apply_2 (SCM program, SCM a, SCM b) +{ + SCM args[2]; + args[0] = a; + args[1] = b; + return scm_c_vm_run (scm_the_vm (), program, args, 2); +} + static int program_print (SCM program, SCM port, scm_print_state *pstate) { @@ -343,6 +364,9 @@ scm_bootstrap_programs (void) scm_tc16_program = scm_make_smob_type ("program", 0); scm_set_smob_mark (scm_tc16_program, program_mark); scm_set_smob_apply (scm_tc16_program, program_apply, 0, 0, 1); + scm_smobs[SCM_TC2SMOBNUM (scm_tc16_program)].apply_0 = program_apply_0; + scm_smobs[SCM_TC2SMOBNUM (scm_tc16_program)].apply_1 = program_apply_1; + scm_smobs[SCM_TC2SMOBNUM (scm_tc16_program)].apply_2 = program_apply_2; scm_set_smob_print (scm_tc16_program, program_print); } |