X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=templates%2Fprogram.c;h=897ca5e36fa9c6e2db348163cc0ddc7974f16647;hp=c589e048520bb3044beb8307fdf3ad00788c6a2b;hb=8f401a7dd2c482629e0bd78cb2252702ccac2342;hpb=80efbcfcd42da6061d0e31add5cc1e6fb17b2f93 diff --git a/templates/program.c b/templates/program.c index c589e04..897ca5e 100644 --- a/templates/program.c +++ b/templates/program.c @@ -160,73 +160,19 @@ Object operator$negate(Object input) return result; } -{% for od in operator_declarations %} -Object operator${{ od.name }}(Object left, Object right) +{% for id in infix_declarations %} +Object operator${{ id.name }}(Object left, Object right) { - assert(left.type == {{ od.input_type.upper() }}); - assert(right.type == {{ od.input_type.upper() }}); + assert(left.type == {{ id.in_type.upper() }}); + assert(right.type == {{ id.in_type.upper() }}); Object result; - result.type = {{ od.result_type.upper() }}; - result.instance.{{ od.result_type.lower() }} = left.instance.{{ od.input_type.lower() }} {{ od.c_operator }} right.instance.{{ od.input_type.lower() }}; + result.type = {{ id.out_type.upper() }}; + result.instance.{{ id.out_type.lower() }} = left.instance.{{ id.in_type.lower() }} {{ id.operator }} right.instance.{{ id.in_type.lower() }}; return result; } {% endfor %} -Object operator$equals(Object left, Object right) -{ - assert(left.type == INTEGER); - assert(right.type == INTEGER); - - Object result = { BOOLEAN, { left.instance.integer == right.instance.integer } }; - return result; -} - -Object operator$notEquals(Object left, Object right) -{ - assert(left.type == INTEGER); - assert(right.type == INTEGER); - - Object result = { BOOLEAN, { left.instance.integer != right.instance.integer } }; - return result; -} - -Object operator$greaterThan(Object left, Object right) -{ - assert(left.type == INTEGER); - assert(right.type == INTEGER); - - Object result = { BOOLEAN, { left.instance.integer > right.instance.integer } }; - return result; -} - -Object operator$lessThan(Object left, Object right) -{ - assert(left.type == INTEGER); - assert(right.type == INTEGER); - - Object result = { BOOLEAN, { left.instance.integer < right.instance.integer } }; - return result; -} - -Object operator$greaterThanOrEqual(Object left, Object right) -{ - assert(left.type == INTEGER); - assert(right.type == INTEGER); - - Object result = { BOOLEAN, { left.instance.integer >= right.instance.integer } }; - return result; -} - -Object operator$lessThanOrEqual(Object left, Object right) -{ - assert(left.type == INTEGER); - assert(right.type == INTEGER); - - Object result = { BOOLEAN, { left.instance.integer <= right.instance.integer } }; - return result; -} - {% if 'pow' in builtins %} Object builtin$pow$implementation(Environment* parent, size_t argc, Object* args) {