diff options
Diffstat (limited to 'src/scheme/ao_scheme_poly.c')
-rw-r--r-- | src/scheme/ao_scheme_poly.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/src/scheme/ao_scheme_poly.c b/src/scheme/ao_scheme_poly.c index 553585db..0bb427b9 100644 --- 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, }, +#ifdef AO_SCHEME_FEATURE_BIGINT [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, }, +#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); +} + +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 * @@ -81,25 +96,17 @@ funcs(ao_poly p) 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 * |