Use annotations instead of hardcoding the function names in the compiler.

This allows easier modification later, as well as allowing extensions to expand
the feature set without requiring compiler changes.