This is a global todo list for the compiler

Issues:
- empty catch clause not handled by StackValidator
- TypeUtils::extractScopes: needs more stack space than computed by StackValidator
- lang::rascal::grammar::definition::Symbols:sym2symbol
  - The Symbol:: qualifier should be unnneccessary
  - empty (from Rascal.rsc) can cause trouble.
x Various type checker tests still fail
x Various (compiled) rascal tests fail.
x Change main convention from "value main(list[value] args)" to value "main()"

Still to be implemented:
x memo functions
- resources
x keyword parameters across imports (needs infor from type checker)
x ignored tests are not even compiled, but keep a count of ignored tests for test reporting

Bootstrapping
x Compile and test parser generator 
x Compile and test type checker
x Compile and test compiler
x Test compiled compiler

Runtime environment and IDE integration
- Make info available for RascalShell Rascal IDE:
  - Preserve @doc per function/module in compiled code
  - Preserve use/def info per function/module
x Replace current interpreter-based parser generator used by the compiler by compiled parser generator
x Detach the execute command from the interpreter and make it stand alone
- Adapt the debugger to run with compiled code
x Create a RascalShell for compiled code
- Replace interpreter by compiler in IDE 

Code improvement
- TypeUtils and TypeReifier are ready for a rewrite
- Reuse rascal::grammar::Module for grammar normalization and code refactoring
- Overall code cleanup.
- Overal consistency check on naming of primitives in RascalPrimitive and MuPrimitive

Performance improvement
x Make the compiler truly incremental:
  x Best done using import graph (as provided by typechecker) 
x Optimize the case of an overloaded function call with only one remaining alternative.
x Currently, RVM does null pointer checking; these checks can disappear when there is a guarantee that
  variables are always initialized. (Switched off)
- Potentially, more constant elimination could be done (e.g. replace size([1,2,3]) by 3)
x Switch to Ferry's RVM structure
x Connect Ferry's bytecode generator
x Optimize serialization of RVMExecutable
x Finalize the reachability analysis for visit and descent.
x When compiling patterns: propagate the type of the subject downwards and eliminate subtype checks.
x Make a Java/muRascal bridge to allow calling muRascal code from Java. This makes it possible
  to write parts of the Library in Java (e.g. descent and visit)

Potential optimizations
- (Optionally) implement int using int64 in RascalPrimitives
x Temporaries in generated code are never reused and this may lead to very large stack frames:
  reuse them (and unfortunately also reset to undefined; needed to correctly implement variables in patterns)
x Optimize descandant matching
- Optimize list matching

Documentation
x Add comments to all enumeration elements in MuPrimitive
x Add comments to all enumeration elements in RascalPrimitive
- Add a global comment to every file
- Write a global architecture document
- Write a paper to describe and evaluate the compiler