Merge remote-tracking branch 'origin/compiler' into compiler-vbchunguk
Make the code more object-oriented

GenerateCode and IsMatch work like ordinary 'functions'; They do not need
special delegate.

And, exposing fields directly in classes is not good. Use properties instead.
Merge branch 'cleanup'