Cleanup: call resolve only once per symbol lookup