* symbols.c, symbols.h (scm_symbol_value0): New function. Can be
authorMikael Djurfeldt <djurfeldt@nada.kth.se>
Wed, 26 Feb 1997 12:08:26 +0000 (12:08 +0000)
committerMikael Djurfeldt <djurfeldt@nada.kth.se>
Wed, 26 Feb 1997 12:08:26 +0000 (12:08 +0000)
used from C to easily lookup the value of a symbol in the current
module.

libguile/ChangeLog
libguile/symbols.c
libguile/symbols.h

index 51a0318..2119cfd 100644 (file)
@@ -1,3 +1,9 @@
+Wed Feb 26 12:53:58 1997  Mikael Djurfeldt  <mdj@mdj.nada.kth.se>
+
+       * symbols.c, symbols.h (scm_symbol_value0): New function.  Can be
+       used from C to easily lookup the value of a symbol in the current
+       module.
+
 Tue Feb 25 00:14:10 1997  Mikael Djurfeldt  <mdj@mdj.nada.kth.se>
 
        * unif.c (scm_init_unif): Added #include "unif.x".  (There are two
index 1bd957f..73b27fb 100644 (file)
@@ -422,6 +422,24 @@ scm_sysintern0 (name)
     return scm_sysintern0_no_module_lookup (name);
 }
 
+/* Lookup the value of the symbol named by the nul-terminated string
+   NAME in the current module.  */
+SCM
+scm_symbol_value0 (name)
+     char *name;
+{
+  /* This looks silly - we look up the symbol twice.  But it is in
+     fact necessary given the current module system because the module
+     lookup closures are written in scheme which needs real symbols. */
+  SCM symbol = scm_intern_obarray_soft (name, strlen (name), scm_symhash, 0);
+  SCM vcell = scm_sym2vcell (SCM_CAR (symbol),
+                            SCM_CDR (scm_top_level_lookup_closure_var),
+                            SCM_BOOL_F);
+  if (SCM_FALSEP (vcell))
+    return SCM_UNDEFINED;
+  return SCM_CDR (vcell);
+}
+
 SCM_PROC(s_symbol_p, "symbol?", 1, 0, 0, scm_symbol_p);
 
 SCM
index 44f1542..d4808dc 100644 (file)
@@ -113,6 +113,7 @@ extern SCM scm_intern SCM_P ((char *name, scm_sizet len));
 extern SCM scm_intern0 SCM_P ((char * name));
 extern SCM scm_sysintern SCM_P ((char *name, SCM val));
 extern SCM scm_sysintern0 SCM_P ((char *name));
+extern SCM scm_symbol_value0 SCM_P ((char *name));
 extern SCM scm_symbol_p SCM_P ((SCM x));
 extern SCM scm_symbol_to_string SCM_P ((SCM s));
 extern SCM scm_string_to_symbol SCM_P ((SCM s));