diff --git a/libguile/programs.c b/libguile/programs.c index 122c1b776..235422ac8 100644 --- a/libguile/programs.c +++ b/libguile/programs.c @@ -199,6 +199,24 @@ SCM_DEFINE (scm_program_meta, "program-meta", 1, 0, 0, } #undef FUNC_NAME +extern SCM +scm_c_program_source (struct scm_program *p, size_t ip) +{ + SCM meta, sources, source; + + if (scm_is_false (p->meta)) + return SCM_BOOL_F; + meta = scm_call_0 (p->meta); + if (scm_is_false (meta)) + return SCM_BOOL_F; + sources = scm_cadr (meta); + source = scm_assv (scm_from_size_t (ip), sources); + if (scm_is_false (source)) + return SCM_BOOL_F; + + return scm_cdr (source); /* a #(line column file) vector */ +} + SCM_DEFINE (scm_program_objects, "program-objects", 1, 0, 0, (SCM program), "") diff --git a/libguile/programs.h b/libguile/programs.h index 0f1b57dd3..e57f6d08a 100644 --- a/libguile/programs.h +++ b/libguile/programs.h @@ -83,6 +83,8 @@ extern SCM scm_program_external (SCM program); extern SCM scm_program_external_set_x (SCM program, SCM external); extern SCM scm_program_bytecode (SCM program); +extern SCM scm_c_program_source (struct scm_program *p, size_t ip); + extern void scm_bootstrap_programs (void); extern void scm_init_programs (void);