.write = ao_scheme_cons_write,
.display = ao_scheme_cons_display,
},
- [AO_SCHEME_STRING] = {
- .write = ao_scheme_string_write,
- .display = ao_scheme_string_display,
+#ifdef AO_SCHEME_FEATURE_BIGINT
+ [AO_SCHEME_BIGINT] = {
+ .write = ao_scheme_bigint_write,
+ .display = ao_scheme_bigint_write,
},
+#endif
[AO_SCHEME_INT] = {
.write = ao_scheme_int_write,
.display = ao_scheme_int_write,
.write = ao_scheme_bool_write,
.display = ao_scheme_bool_write,
},
- [AO_SCHEME_BIGINT] = {
- .write = ao_scheme_bigint_write,
- .display = ao_scheme_bigint_write,
+ [AO_SCHEME_STRING] = {
+ .write = ao_scheme_string_write,
+ .display = ao_scheme_string_display,
},
+#ifdef AO_SCHEME_FEATURE_FLOAT
[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
},
+#endif
+};
+
+static void ao_scheme_invalid_write(ao_poly p) {
+ printf("??? 0x%04x ???", p);
+ ao_scheme_abort();
+}
+
+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 *
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 *