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
*** 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
ensure that the type is complete in the given environment
ensure that the type is complete in the given environment
used for example when declaring or dereferencing a variable
invoked before checking an external declaration (for example used for progress reports)
invoked before checking an external declaration (for example used for progress reports)
determines whether types are compatible in assignements etc
determines whether types are compatible in assignements etc
for "a=b;" with a:type1 and b:type2
ansi c conversion rules of two arithmetic types (if called on other types, it just returns the first type; hence the pattern if cocerce(x,y) return converse(x,y) should yield the default behavior )
ansi c conversion rules of two arithmetic types (if called on other types, it just returns the first type; hence the pattern if cocerce(x,y) return converse(x,y) should yield the default behavior )
default is int. if either operand has a higher priority, it is preferred over int
according to specification: http://techpubs.sgi.com/library/manuals/0000/007-0701-150/pdf/007-0701-150.pdf
only used when resolving a function
define all fields from enum type specifiers as int values
define all fields from enum type specifiers as int values
enum is always interpreted as definition, not declaration. it conflicts with other definitions and other declarations.
important: this recurses into structures!
filtering is a workaround for a parsing problem (see open test) that can produce False AST-subtrees in some combinations.
filtering is a workaround for a parsing problem (see open test) that can produce False AST-subtrees in some combinations.
remove when problem is fixed
get a list of all declared variables from a declaration.
get a list of all declared variables from a declaration. also checks that declarations are wellformed (e.g., structs are complete)
under which condition is modifier extern defined?
under which condition is modifier extern defined?
linkage depends on previous identifiers in scope, on the scope (file level or not) and the specifiers
linkage depends on previous identifiers in scope, on the scope (file level or not) and the specifiers
see http://publications.gbdirect.co.uk/c_book/chapter8/declarations_and_definitions.html
are both types char but with different signage?
are both types char but with different signage?
we can report as a warning if both types are number, but they are not the same width or signed
we can report as a warning if both types are number, but they are not the same width or signed
error reporting for type errors
error reporting for type errors
normalize types for internal comparison in coerce (do not return this to the outside)
normalize types for internal comparison in coerce (do not return this to the outside)
* function -> pointer to function
* pointer to pointer to function -> pointer to function
* remove any CObj within the type
* regard arrays as pointers
* pointer to ignore equals ignore
* CVoid in function parameters is removed
promotion is what happens internally during conversion
promotion is what happens internally during conversion
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)
all compiler-specific built-in stuff