Enum Environment: Just a set of names that are valid enums.
Enum Environment: Just a set of names that are valid enums. No need to remember fields etc, because they are integers anyway and no further checking is done in C
label environment: stores which labels are reachable from a goto.
label environment: stores which labels are reachable from a goto.
the environment is filled upon function entry for the entire function and just stores under which condition a label is defined
for struct and union ConditionalTypeMap represents for the fields of the struct
for struct and union ConditionalTypeMap represents for the fields of the struct
structs do not need to be defined, but they can be complete (with fields) or incomplete
we store whether a structure with this name is complete (FeatureExpr). a redeclaration in an inner scope may reduce completeness again
we do not distinguish between alternative structures. fields are merged in one ConditionalTypeMap entry, but by construction they cannot overlap if the structure declarations do not overlap variant-wise
the structEnv maps a tag name to a conditional tuple (isComplete, fields, scope)
*** Variable-Typing context (collects all top-level and local declarations) variables with local scope overwrite variables with global scope
*** Variable-Typing context (collects all top-level and local declarations) variables with local scope overwrite variables with global scope
invoked before every external decl, statement and expression with the environment of that node
invoked before every external decl, statement and expression with the environment of that node
for example to debug the environment
mixed in from CEnvCache
invoked before checking an external declaration (for example used for progress reports)
invoked before checking an external declaration (for example used for progress reports)
error reporting for type errors
error reporting for type errors
invoked after typing an expression
invoked after typing an expression
refined by CTypeCache if desired
invoked after typing a function definition (top level declaration, not nested function)
invoked after typing a function definition (top level declaration, not nested function)
hooks that other analysis can override to collect/cache their own information