- * AST utilities. Some of those now exist to make common operations on raw
- AST structures less painful.
-
- * The typechecker. The typechecker was significantly revamped. A
- 'typeof' function was added that did most of the typechecking work;
- the rest was relatively trivial compared to typeof. There were many
- annoying things other than typeof, but typeof was the most interesting
- to comment on.
-
- * The translator was extended with support for sizing up structs. It now
- is smarter about translating asops. A MEMORY thingo was added to the
- Tree, as was ALLOC.
-
- * The x86/munch modules were extended with support for multiple operand
- sizes. This was done in a fashion of extreme type A, and needs to be
- blasted before the next lab, for it is worthless, terrible, awful, ... A
- major falling-down of this compiler is that it passes size information
- around in no less than 235784 different fashions, and the translation
- between each has caused us no end of grief. If we had time to rewrite
- it instead of firefighting broken tests, uh... we would. Many of our
- optimizations from last lab needed to be commented out because of this
- temporary sizing sadness.
-
- * The liveness analyzer was mainly unchanged, but for a few rules.
+ * AST utilities were updated to use the new temp typing system.
+
+ * Temporaries now are the only source of sizing information until we hit
+ the stage at which point instructions are generated. At that point,
+ instructions get sizing info, too, but really, that's about it.
+
+ * The typechecker was mostly unchanged.
+
+ * The translator was changed to use the new sizing system. Of interest,
+ the 'safe' alloc routine and the 'safe' dereference routines have been
+ moved into the IR stage, as opposed to having custom instructions
+ generated for them at the munch stage. This was done with the addition
+ of the 'stmvar' IR function, which is equivalent to the GCC C extension:
+ ({ stm; stm; ... expr })
+ in that it evaluates the statements first, then returns the evaluation
+ of the expression.
+
+ * The munch modules were updated to remove a lot of their suck and make
+ them correct again. Specifically, they were updated to use the new
+ typing system and perform type inference of sorts (i.e. adding a
+ quadword base pointer and a long offset yields a quad, etc.). This is
+ far superior to the previous sizing method, in which we gave some loose
+ (and disgusting) annotations of size and left the final sizing decisions
+ to the stringifier (O.o).
+
+ * The liveness analyzer was mainly unchanged.