diff options
author | Andy Wingo <wingo@pobox.com> | 2008-12-26 16:36:53 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2008-12-26 16:37:20 +0100 |
commit | 9a9f64874a500ed0765f45a05befc71f74255e4c (patch) | |
tree | d2fae9c10ede3149e0511f5d2192060c225c03a3 /libguile/programs.c | |
parent | e052d2964098005a02fcb2b1e1e670e9ff4157c1 (diff) | |
download | guile-9a9f64874a500ed0765f45a05befc71f74255e4c.tar.gz |
add scm_c_program_source
* libguile/programs.h:
* libguile/programs.c (scm_c_program_source): New helper for getting
source information from C.
Diffstat (limited to 'libguile/programs.c')
-rw-r--r-- | libguile/programs.c | 18 |
1 files changed, 18 insertions, 0 deletions
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), "") |