IR Declaration Nodes

IR Nodes

Declarations associate names with types.

Broadly speaking, there are variables and functions. Both of which (essentially) associated a name with a typed piece of memory.

Aliases are different. While still associating a name with a type, it's not an instance of a type, but rather a symbolic representation of the type (so the underlying type may be changed transparently, or perhaps the real type is long winded, or exposes implementation details).

Classes

Named Named is a base class for named types, like Enum, Struct, Class and so on. This is slightly different from Aggregate since Enum is not a Aggregate, but is a named type.
Aggregate Aggregate is a base class for Struct, Union & Class.
Class Java style class declaration. Classes enable polymorphism, and are always accessed through opaque references (to prevent slicing -- look it up!)
_Interface Java style interface declaration. An interface defines multiple functions that an implementing class must define. A class can inherit from multiple interfaces, and can be treated as an instance of any one of them.
Union C style union. Structs are a POD data type, and should be binary compatible with the same union as defined by your friendly neighbourhood C compiler.
Struct C style struct. Structs are a POD data type, and should be binary compatible with the same struct as defined by your friendly neighbourhood C compiler.
Enum C style Enum. Enums create symbols that are associated with compile time constants. By default, they are enumerated with ascending numbers, hence the name.
Declaration Base class for all declarations.
Variable Represents an instance of a type.
Alias An Alias associates names with a Type. Once declared, using that name is as using that Type directly.
Function A function is a block of code that takes parameters, and may return a value. There may be additional implied context, depending on where it's defined.
FunctionSet Represents multiple functions associated with a single name.
FunctionParam Represents a parameter to a function.