llvm-project
25df64fc - [clang][NFC] Disentangle `MacroState` from `Preprocessor`

Commit
21 days ago
[clang][NFC] Disentangle `MacroState` from `Preprocessor` `Preprocessor` contains a map of `IdentifierInfo` to `MacroState`; this is reasonable -- the macro state is part of the overall preprocessor state. `MacroState` depends on `Preprocessor`; this is less reasonable and means that to understand `MacroState` you must first understand `Preprocessor`, but to understand `Preprocessor` you must first understand `MacroState`. Move `MacroState` to its own file. This pulls along `FullModuleMacroInfo` since a `MacroState` is either a `MacroDirective` or a `FullModuleMacroInfo`. Replace all `Preprocessor` parameters with only the components of `Preprocessor` that we actually need. This gives us a simpler layering where `Preprocessor` code knows about `MacroState` but `MacroState` code does not know about `Preprocessor`. `updateModuleMacroInfo` used to be a private member function of `Preprocessor`, but its purpose is to manage `MacroState`. Instead have `MacroState` use it as an implementation detail function. Add a new type, `PPReferences`, to bundle up references to state that `MacroState` needs as read-only other than the `IdentifierInfo` (since that's conceptually a different kind of thing). This change also required changing `MacroInfo::isIdenticalTo` to accept the useful components of `Preprocessor` rather than the whole `Preprocessor`.
Author
Parents
Loading