+SCM_DEFINE (scm_make_obarray, "make-obarray", 0, 0, 0,
+ (void),
+ "Return a fresh obarray.")
+#define FUNC_NAME s_scm_make_obarray
+{
+ return scm_c_make_weak_set (0);
+}
+#undef FUNC_NAME
+
+SCM_DEFINE (scm_find_symbol, "find-symbol", 1, 1, 0,
+ (SCM string, SCM obarray),
+ "Return the symbol named @var{string} if it is present in\n"
+ "@var{obarray}. Return false otherwise.")
+#define FUNC_NAME s_scm_find_symbol
+{
+ if (SCM_UNBNDP (obarray))
+ obarray = symbols;
+
+ return lookup_interned_symbol (string,
+ scm_i_string_hash (string),
+ obarray);
+}
+#undef FUNC_NAME
+
+SCM_DEFINE (scm_intern, "intern", 1, 1, 0,
+ (SCM string, SCM obarray),
+ "Intern @var{string} in @var{obarray}.")
+#define FUNC_NAME s_scm_intern
+{
+ if (SCM_UNBNDP (obarray))
+ obarray = symbols;
+
+ SCM_VALIDATE_STRING (1, string);
+ return scm_i_str2symbol (string, obarray);
+}
+#undef FUNC_NAME
+
+SCM_DEFINE (scm_unintern, "unintern", 1, 1, 0,
+ (SCM symbol, SCM obarray),
+ "Unintern @var{symbol} from @var{obarray}.")
+#define FUNC_NAME s_scm_unintern
+{
+ if (SCM_UNBNDP (obarray))
+ obarray = symbols;
+
+ scm_weak_set_remove_x (obarray, symbol);
+ return SCM_UNSPECIFIED;
+}
+#undef FUNC_NAME
+
+SCM_DEFINE (scm_obarray_for_each, "obarray-for-each", 1, 1, 0,
+ (SCM proc, SCM obarray),
+ "")
+#define FUNC_NAME s_scm_obarray_for_each
+{
+ if (SCM_UNBNDP (obarray))
+ obarray = symbols;
+
+ scm_weak_set_for_each (proc, obarray);
+ return SCM_UNSPECIFIED;
+}
+#undef FUNC_NAME
+