summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2020-02-19 08:25:39 +0100
committerThomas White <taw@physics.org>2020-02-19 08:25:39 +0100
commita8edc2496b37622374ee1077a508265545bc015f (patch)
treedd663fa5d99a42bd4d767ee4aa71b323f665640b
parent944c905ee4187477a769624514545338b81fa4d0 (diff)
Put fixtures in a list, not in top-level variables
This avoids problems if the fixtures have names which overlap with things.
-rw-r--r--src/scheme.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/scheme.c b/src/scheme.c
index b2a0771..d37578f 100644
--- a/src/scheme.c
+++ b/src/scheme.c
@@ -42,6 +42,14 @@ static SCM set_intensity(SCM fixture_scm, SCM intensity_scm)
}
+static SCM fixture_name(SCM fixture_scm)
+{
+ scm_assert_foreign_object_type(fixture_type, fixture_scm);
+ struct fixture *fixture = scm_foreign_object_ref(fixture_scm, 0);
+ return scm_from_utf8_symbol(fixture->label);
+}
+
+
static void finalize_fixture(SCM fixture)
{
printf("finalise fixture!\n");
@@ -54,17 +62,22 @@ void *register_scheme_funcs(void *data)
SCM name, slots;
int i;
scm_t_struct_finalize finalizer;
+ SCM fixture_list;
name = scm_from_utf8_symbol("fixture");
slots = scm_list_1(scm_from_utf8_symbol("data"));
finalizer = finalize_fixture;
fixture_type = scm_make_foreign_object_type(name, slots, finalizer);
+ fixture_list = SCM_EOL;
for ( i=0; i<nl->n_fixtures; i++ ) {
SCM obj = scm_make_foreign_object_1(fixture_type, &nl->fixtures[i]);
- scm_define(scm_from_utf8_symbol(nl->fixtures[i].label), obj);
+ SCM obj_list = scm_list_1(obj);
+ fixture_list = scm_append(scm_list_2(fixture_list, obj_list));
}
+ scm_define(scm_from_utf8_symbol("fixtures"), fixture_list);
+ scm_c_define_gsubr("fixture-name", 1, 0, 0, &fixture_name);
scm_c_define_gsubr("set-intensity", 2, 0, 0, &set_intensity);
return NULL;