dotExp() bit flags
Add MODxxxx bits to existing type. We're adding, not replacing, so adding const to a shared type => "shared const"
Apply STCxxxx bits to existing type. Use *before* semantic analysis is run.
Add storage class modifiers to type.
Return alignment to use for this type.
If this is a type of static array, return its base element type.
Apply MODxxxx bits to existing type.
Look for bugs in constructing types.
Bugzilla 14488: Check if the inner most base type is complex or imaginary. Should only give alerts when set to emit transitional messages.
Check type to see if it is based on a deprecated symbol.
Determine if converting 'this' to 'to' is an identity operation, a conversion to const operation, or the types aren't the same.
Convert to 'const'.
Covariant means that 'this' can substitute for 't', i.e. a pure function is a match for an impure type.
Return MOD bits matching this type to wild parameter type (tprm).
Use when we prefer the default initializer to be a literal, rather than a global immutable variable.
Access the members of the object e. This type is same as e->type.
For our new type 'this', which is type-constructed from t, fill in the cto, ito, sto, scto, wto shortcuts.
Calculate built-in properties which just the type is necessary.
Return !=0 if type has pointers that need to be scanned by the GC during a collection cycle.
Detect if type has pointer fields that are initialized to void. Local stack variables with such void fields can remain uninitialized, leading to pointer bugs.
Return !=0 if the type or any of its subtypes is wild.
Convert to 'immutable'.
Determine if 'this' can be implicitly converted to type 'to'.
When T is mutable, Given: T a, b; Can we bitwise assign: a = b; ?
Returns true if T can be converted to boolean value.
This version does a merge even if the deco is already computed. Necessary for types that have a deco, but are not merged.
Store this type's modifier name into buf.
Return this type's modifier name.
For each active modifier (MODconst, MODimmutable, etc) call fp with a void* for the work param and a string representation of the attribute.
Make type mutable.
true if when type goes out of scope, it needs a destructor applied. Only applies to value types, not ref types.
If this is a type of something, return that something.
Figures out what to do with an undefined member reference for classes and structs.
Return a copy of this type with all attributes null-initialized. Useful for creating a type with different modifiers.
Resolve 'this' type to either type, symbol, or expression. If errors happened, resolved to Type.terror.
Normalize e as the result of Type.resolve() process.
Return the mask that an integral type will fit into.
If this is a shell around another type, get that other type.
For pretty-printing a type.
We've mistakenly parsed this as a type. Redo it as an Expression. NULL if cannot.
Return type with the top level of it being mutable.
Make type unshared. 0 => 0 const => const immutable => immutable shared => 0 shared const => const wild => wild wild const => wild const shared wild => wild shared wild const => wild const
Convert to 'wild'.