substituteParams has become a thin wrapper around the new evaluateMacros function, and will become more of a compatibility shim as refactorings and rewrites are done.