summaryrefslogtreecommitdiff
path: root/libguile/programs.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2008-12-26 16:36:53 +0100
committerAndy Wingo <wingo@pobox.com>2008-12-26 16:37:20 +0100
commit9a9f64874a500ed0765f45a05befc71f74255e4c (patch)
treed2fae9c10ede3149e0511f5d2192060c225c03a3 /libguile/programs.c
parente052d2964098005a02fcb2b1e1e670e9ff4157c1 (diff)
downloadguile-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.c18
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),
"")