This can be useful for debugging - it allows us to see that the inferred
type is what we think it should be. Furthermore, it will allow the IR
reader to avoid complex, operator-specific type inference.
printf("(expression ");
+ print_type(ir->type);
+
assert((unsigned int)ir->operation <
sizeof(operators) / sizeof(operators[0]));
- printf("%s", operators[ir->operation]);
+ printf(" %s ", operators[ir->operation]);
+
printf("(");
if (ir->operands[0])
ir->operands[0]->accept(this);