← board

A real declaration phase: all decls before any body is typed

Design: devdocs/dev/type-identity-as-substrate.md item 3.

Today (NilPy, the measured case): PyRegisterClassShells registers class NAMES, then module locals are inferred, then PyRegisterClassMembers registers MEMBERS last. So at inference time every class has zero fields — measured directly: ciOuter=1, fcOuter=0. That ordering is why a field pre-pass had to be bolted on (PyRegisterClassFieldsPrepass), and it is a patch, not the fix.

Collect ALL declarations — shells, members, signatures — before typing any body. Check whether the other frontends have the same latent ordering hazard or only NilPy does.

Pairs with [[feature-n-nilpy-ast-based-typing]]; doing that one first may subsume part of this.