+ int32_t l = ao_scheme_poly_integer(left, NULL);
+ int32_t r = ao_scheme_poly_integer(right, NULL);
+
+ switch (op) {
+ case builtin_less:
+ if (!(l < r))
+ return _ao_scheme_bool_false;
+ break;
+ case builtin_greater:
+ if (!(l > r))
+ return _ao_scheme_bool_false;
+ break;
+ case builtin_less_equal:
+ if (!(l <= r))
+ return _ao_scheme_bool_false;
+ break;
+ case builtin_greater_equal:
+ if (!(l >= r))
+ return _ao_scheme_bool_false;
+ break;
+ case builtin_equal:
+ if (!(l == r))
+ return _ao_scheme_bool_false;
+ default:
+ break;
+ }
+#ifdef AO_SCHEME_FEATURE_FLOAT
+ } else if (ao_scheme_number_typep(lt) && ao_scheme_number_typep(rt)) {
+ float l, r;
+
+ l = ao_scheme_poly_number(left);
+ r = ao_scheme_poly_number(right);