switch to using a dispatch table for builtins