1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-19 02:00:26 +02:00

add program-sources-pre-retire to core and define frame-next-source

* libguile/programs.h:
* libguile/programs.c (scm_program_source): Add an optional arg, the
  sources table to traverse. Defaults to the result of
  scm_program_sources.

* module/system/vm/program.scm (program-sources-pre-retire): Move
  definition here from (system vm traps), and export.

* module/system/vm/traps.scm: Adapt.

* module/system/vm/frame.scm (frame-next-source): New exported binding,
  returns the source line corresponding to the next instruction instead
  of the previous instruction.
This commit is contained in:
Andy Wingo 2010-10-08 12:21:20 +02:00
parent d608db1d59
commit b262b74b51
5 changed files with 93 additions and 72 deletions

View file

@ -267,28 +267,37 @@ scm_i_program_properties (SCM program)
}
#undef FUNC_NAME
SCM_DEFINE (scm_program_source, "program-source", 2, 0, 0,
(SCM program, SCM ip),
static SCM
program_source (SCM program, size_t ip, SCM sources)
{
SCM source = SCM_BOOL_F;
while (!scm_is_null (sources)
&& scm_to_size_t (scm_caar (sources)) <= ip)
{
source = scm_car (sources);
sources = scm_cdr (sources);
}
return source; /* (addr . (filename . (line . column))) */
}
SCM_DEFINE (scm_program_source, "program-source", 2, 1, 0,
(SCM program, SCM ip, SCM sources),
"")
#define FUNC_NAME s_scm_program_source
{
SCM_VALIDATE_PROGRAM (1, program);
return scm_c_program_source (program, scm_to_size_t (ip));
if (SCM_UNBNDP (sources))
sources = scm_program_sources (program);
return program_source (program, scm_to_size_t (ip), sources);
}
#undef FUNC_NAME
extern SCM
scm_c_program_source (SCM program, size_t ip)
{
SCM sources, source = SCM_BOOL_F;
for (sources = scm_program_sources (program);
!scm_is_null (sources)
&& scm_to_size_t (scm_caar (sources)) <= ip;
sources = scm_cdr (sources))
source = scm_car (sources);
return source; /* (addr . (filename . (line . column))) */
return program_source (program, ip, scm_program_sources (program));
}
SCM_DEFINE (scm_program_num_free_variables, "program-num-free-variables", 1, 0, 0,

View file

@ -54,7 +54,7 @@ SCM_API SCM scm_program_base (SCM program);
SCM_API SCM scm_program_meta (SCM program);
SCM_API SCM scm_program_bindings (SCM program);
SCM_API SCM scm_program_sources (SCM program);
SCM_API SCM scm_program_source (SCM program, SCM ip);
SCM_API SCM scm_program_source (SCM program, SCM ip, SCM sources);
SCM_API SCM scm_program_arities (SCM program);
SCM_API SCM scm_program_objects (SCM program);
SCM_API SCM scm_program_module (SCM program);