Support for default arguments, plus new types.

1. It's very ugly, don't look at it too long.