This is a VERY rough txt file I'm using to keep track of direction of the
project.

LEGEND
------

Immediate timeline - Changes planned as the next steps.
Main projects - The large-scale changes planned for forseeable future.
Features - Various smaller-scale changes that need to be implemented

Current target: fully compile nmake.c from CS323 pset

* - Explicitly required to reach current target

--------------------------------------------------------------------------------

IMMEDIATE TIMELINE
------------------
- const
- typedef
- initializers (global, array/struct, string)
- #define
- functions (definition, struct as argument/return value, argc/argv)
- sizeof
- hex sequences in strings

--------------------------------------------------------------------------------

MAIN PROJECTS
-------------

--------------------------------------------------------------------------------

FEATURES
--------

TYPES
  - Declaration initializers
*   - Global initializers
*   - Array/struct initializers
*   - String initializers
  - Full extern/static/global variable implementation
    - static globals, static locals, etc
  - Qualified types
*   - const
    - volatile
    - register
*   - Update headers to include these
  - Similar types
    - `long long` (distinct from `long`)
    - Proper ranking of integers, distinct from just size
  - Implement `double` and `float`
* - Implement typedef

PREPROCESSOR
  - Fix small bugs in current implementation
* - #define
*   - static and function-form

CONTROL STATEMENTS
  - do-while
  - switch

FUNCTIONS
* - Implement function definition
* - Improve function declaration
*   - Struct as argument
*   - Struct as return value
    - Over 6 arguments
* - Support argc and argv

EXPRESSION
  - Bitwise (&, |, etc.)
  - Ternary
* - sizeof
  - Casts
  - Hex/octal literal consts
  - Literal suffixed consts (`123ul`, etc)
* - Hex sequences in strings (`\0`)

OPTIMIZAIONS
  - Remove unnecessary lea before function calls
  - General dataflow analysis
    - Conditionals in if-statements
    - Simplify output code for chained [] or . or ->
    - Simplify repeated Set IL commands
  - Live range splitting in register allocator
  - Speed up register allocator

GENERAL
  - Support error recovery
    - Within parser
    - Between stages
      (i.e. if lexer/parser are confident in their guess, try IL generation too)
  - Improved treatment of command line flags

--------------------------------------------------------------------------------
