diff options
author | Andy Wingo <wingo@pobox.com> | 2013-07-19 16:21:18 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2013-07-21 17:12:22 +0200 |
commit | ee0a2b5135d78203a65ddf3247a74e0014f9d48f (patch) | |
tree | deec058804ee33e1d8bdda340c933de930553c01 /libguile/programs.c | |
parent | 081cf91029c7e7527e64fab5c9069262a345b10a (diff) | |
download | guile-ee0a2b5135d78203a65ddf3247a74e0014f9d48f.tar.gz |
free variable debugging access procedures for rtl
* libguile/programs.c (scm_program_num_free_variables)
(scm_program_free_variable_ref, scm_program_free_variable_set_x): Add
support for RTL programs.
Diffstat (limited to 'libguile/programs.c')
-rw-r--r-- | libguile/programs.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/libguile/programs.c b/libguile/programs.c index 8b346edd2..9b3e74834 100644 --- a/libguile/programs.c +++ b/libguile/programs.c @@ -403,6 +403,10 @@ SCM_DEFINE (scm_program_num_free_variables, "program-num-free-variables", 1, 0, "") #define FUNC_NAME s_scm_program_num_free_variables { + if (SCM_RTL_PROGRAM_P (program)) { + return scm_from_ulong (SCM_RTL_PROGRAM_NUM_FREE_VARIABLES (program)); + } + SCM_VALIDATE_PROGRAM (1, program); return scm_from_ulong (SCM_PROGRAM_NUM_FREE_VARIABLES (program)); } @@ -414,6 +418,14 @@ SCM_DEFINE (scm_program_free_variable_ref, "program-free-variable-ref", 2, 0, 0, #define FUNC_NAME s_scm_program_free_variable_ref { unsigned long idx; + + if (SCM_RTL_PROGRAM_P (program)) { + SCM_VALIDATE_ULONG_COPY (2, i, idx); + if (idx >= SCM_RTL_PROGRAM_NUM_FREE_VARIABLES (program)) + SCM_OUT_OF_RANGE (2, i); + return SCM_RTL_PROGRAM_FREE_VARIABLE_REF (program, idx); + } + SCM_VALIDATE_PROGRAM (1, program); SCM_VALIDATE_ULONG_COPY (2, i, idx); if (idx >= SCM_PROGRAM_NUM_FREE_VARIABLES (program)) @@ -428,6 +440,15 @@ SCM_DEFINE (scm_program_free_variable_set_x, "program-free-variable-set!", 3, 0, #define FUNC_NAME s_scm_program_free_variable_set_x { unsigned long idx; + + if (SCM_RTL_PROGRAM_P (program)) { + SCM_VALIDATE_ULONG_COPY (2, i, idx); + if (idx >= SCM_RTL_PROGRAM_NUM_FREE_VARIABLES (program)) + SCM_OUT_OF_RANGE (2, i); + SCM_RTL_PROGRAM_FREE_VARIABLE_SET (program, idx, x); + return SCM_UNSPECIFIED; + } + SCM_VALIDATE_PROGRAM (1, program); SCM_VALIDATE_ULONG_COPY (2, i, idx); if (idx >= SCM_PROGRAM_NUM_FREE_VARIABLES (program)) |