projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos/scheme: Support scheme subsetting via feature settings
[fw/altos]
/
src
/
scheme
/
ao_scheme_poly.c
diff --git
a/src/scheme/ao_scheme_poly.c
b/src/scheme/ao_scheme_poly.c
index 553585db33f80ab9884e642be4eff68c1b5a84ff..0bb427b96b6bca570afbd1be41a81839c0ea638b 100644
(file)
--- a/
src/scheme/ao_scheme_poly.c
+++ b/
src/scheme/ao_scheme_poly.c
@@
-60,18
+60,33
@@
static const struct ao_scheme_funcs ao_scheme_funcs[AO_SCHEME_NUM_TYPE] = {
.write = ao_scheme_bool_write,
.display = ao_scheme_bool_write,
},
.write = ao_scheme_bool_write,
.display = ao_scheme_bool_write,
},
+#ifdef AO_SCHEME_FEATURE_BIGINT
[AO_SCHEME_BIGINT] = {
.write = ao_scheme_bigint_write,
.display = ao_scheme_bigint_write,
},
[AO_SCHEME_BIGINT] = {
.write = ao_scheme_bigint_write,
.display = ao_scheme_bigint_write,
},
+#endif
+#ifdef AO_SCHEME_FEATURE_FLOAT
[AO_SCHEME_FLOAT] = {
.write = ao_scheme_float_write,
.display = ao_scheme_float_write,
},
[AO_SCHEME_FLOAT] = {
.write = ao_scheme_float_write,
.display = ao_scheme_float_write,
},
+#endif
+#ifdef AO_SCHEME_FEATURE_VECTOR
[AO_SCHEME_VECTOR] = {
.write = ao_scheme_vector_write,
.display = ao_scheme_vector_display
},
[AO_SCHEME_VECTOR] = {
.write = ao_scheme_vector_write,
.display = ao_scheme_vector_display
},
+#endif
+};
+
+static void ao_scheme_invalid_write(ao_poly p) {
+ printf("??? 0x%04x ???", p);
+}
+
+static const struct ao_scheme_funcs ao_scheme_invalid_funcs = {
+ .write = ao_scheme_invalid_write,
+ .display = ao_scheme_invalid_write,
};
static const struct ao_scheme_funcs *
};
static const struct ao_scheme_funcs *
@@
-81,25
+96,17
@@
funcs(ao_poly p)
if (type < AO_SCHEME_NUM_TYPE)
return &ao_scheme_funcs[type];
if (type < AO_SCHEME_NUM_TYPE)
return &ao_scheme_funcs[type];
- return
NULL
;
+ return
&ao_scheme_invalid_funcs
;
}
}
-void
-ao_scheme_poly_write(ao_poly p)
+void (*ao_scheme_poly_write_func(ao_poly p))(ao_poly p)
{
{
- const struct ao_scheme_funcs *f = funcs(p);
-
- if (f && f->write)
- f->write(p);
+ return funcs(p)->write;
}
}
-void
-ao_scheme_poly_display(ao_poly p)
+void (*ao_scheme_poly_display_func(ao_poly p))(ao_poly p)
{
{
- const struct ao_scheme_funcs *f = funcs(p);
-
- if (f && f->display)
- f->display(p);
+ return funcs(p)->display;
}
void *
}
void *