summaryrefslogtreecommitdiff
path: root/libguile/programs.c
diff options
context:
space:
mode:
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),
"")