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