summaryrefslogtreecommitdiff
path: root/libguile/frames.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2014-02-07 15:01:33 +0100
committerAndy Wingo <wingo@pobox.com>2014-02-07 15:03:17 +0100
commitdc7a33fa871c42d0474602f3560d3ce350e1f1c3 (patch)
tree37495605b40c19ca83decd2b191fdb31510531b9 /libguile/frames.c
parenta1aae2c3a03afc542ab6a7c6672c5a645ac77b09 (diff)
parent60617d819d77a1b92ed6c557a0b49b8e9a8e97b9 (diff)
downloadguile-dc7a33fa871c42d0474602f3560d3ce350e1f1c3.tar.gz
Merge commit '60617d819d77a1b92ed6c557a0b49b8e9a8e97b9'
Conflicts: libguile/continuations.c libguile/eval.c libguile/goops.c libguile/instructions.c
Diffstat (limited to 'libguile/frames.c')
-rw-r--r--libguile/frames.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/libguile/frames.c b/libguile/frames.c
index b0f451f7d..a651694bb 100644
--- a/libguile/frames.c
+++ b/libguile/frames.c
@@ -131,20 +131,26 @@ SCM_DEFINE (scm_frame_procedure, "frame-procedure", 1, 0, 0,
}
#undef FUNC_NAME
+static SCM frame_arguments_var;
+
+static void
+init_frame_arguments_var (void)
+{
+ frame_arguments_var
+ = scm_c_private_lookup ("system vm frame", "frame-arguments");
+}
+
SCM_DEFINE (scm_frame_arguments, "frame-arguments", 1, 0, 0,
(SCM frame),
"")
#define FUNC_NAME s_scm_frame_arguments
{
- static SCM var = SCM_BOOL_F;
-
- SCM_VALIDATE_VM_FRAME (1, frame);
+ static scm_i_pthread_once_t once = SCM_I_PTHREAD_ONCE_INIT;
+ scm_i_pthread_once (&once, init_frame_arguments_var);
- if (scm_is_false (var))
- var = scm_c_module_lookup (scm_c_resolve_module ("system vm frame"),
- "frame-arguments");
+ SCM_VALIDATE_VM_FRAME (1, frame);
- return scm_call_1 (SCM_VARIABLE_REF (var), frame);
+ return scm_call_1 (scm_variable_ref (frame_arguments_var), frame);
}
#undef FUNC_NAME