Something I dont' really get is why substitutions don't get name-checked before used.. They are macros, maybe that's why? The problem is that some definitions might not work. Is there a way around this? Maybe evaluate the code somewhere? No.. the identifiers are only interpreted when the macro is invoked. Before that no checks can be made.