TODO
====

* documentation
* parse way optimization
* implement member access control
* improve expression evaluation
* improve template support
* RTTI support
* better management of different targets for size and alignment of types
* shared type objects => faster type comparison, less memory consumption...
* GNU C/C++ extensions:
  - statement expressions => e.g. ({ int i=0; i; })
  - omitted middle operand of `?:' expression: foo ? /*empty*/ : bar
    => if first operand is nonzero, the value is value of first operand
    (`x ? : y' has value of `x' if `x' nonzero; otherwise, the value of `y')
  - generalized lvalues => less restrictive isLvalue()
  - nested functions => skip scope check in fct_def rule
  - introduce variable name after initializer instead of before
* improve preprocessor
  - change macro expansion scheme to fit the standard, e.g.
    --- 
    #define hash_hash # ## #
    #define mkstr(a) # a 
    #define in_between(a) mkstr(a)
    #define join(c, d) in_between(c hash_hash d)
    join(x, y);
    ---
    should result in `"x ## y"' not in `" xy "'
  - GNU extensions, e.g.
    ---
    #define FILE(x) <a/b/x>
    #include FILE(bar.h)
    ---
    results in `#include <a/b/ bar.h >' but GNU's cpp produces 
    `#include <a/b/bar.h>'
