type aggregateLiteralElementType … const dynElementType … const homogenousElementType … var crossTypeNumericComparisonOverloads … type Env … // NewEnv returns a new *Env with the given parameters. func NewEnv(container *containers.Container, provider types.Provider, opts ...Option) (*Env, error) { … } // AddIdents configures the checker with a list of variable declarations. // // If there are overlapping declarations, the method will error. func (e *Env) AddIdents(declarations ...*decls.VariableDecl) error { … } // AddFunctions configures the checker with a list of function declarations. // // If there are overlapping declarations, the method will error. func (e *Env) AddFunctions(declarations ...*decls.FunctionDecl) error { … } // LookupIdent returns a Decl proto for typeName as an identifier in the Env. // Returns nil if no such identifier is found in the Env. func (e *Env) LookupIdent(name string) *decls.VariableDecl { … } // LookupFunction returns a Decl proto for typeName as a function in env. // Returns nil if no such function is found in env. func (e *Env) LookupFunction(name string) *decls.FunctionDecl { … } // setFunction adds the function Decl to the Env. // Adds a function decl if one doesn't already exist, then adds all overloads from the Decl. // If overload overlaps with an existing overload, adds to the errors in the Env instead. func (e *Env) setFunction(fn *decls.FunctionDecl) []errorMsg { … } // addIdent adds the Decl to the declarations in the Env. // Returns a non-empty errorMsg if the identifier is already declared in the scope. func (e *Env) addIdent(decl *decls.VariableDecl) errorMsg { … } // isOverloadDisabled returns whether the overloadID is disabled in the current environment. func (e *Env) isOverloadDisabled(overloadID string) bool { … } // validatedDeclarations returns a reference to the validated variable and function declaration scope stack. // must be copied before use. func (e *Env) validatedDeclarations() *Scopes { … } // enterScope creates a new Env instance with a new innermost declaration scope. func (e *Env) enterScope() *Env { … } // exitScope creates a new Env instance with the nearest outer declaration scope. func (e *Env) exitScope() *Env { … } type errorMsg … func overlappingIdentifierError(name string) errorMsg { … } func overlappingMacroError(name string, argCount int) errorMsg { … } func formatError(errMsgs []errorMsg) error { … }