protected SwiftType(CoreCompoundType type, bool isReference, SwiftName name = null)
 {
     Type        = type;
     IsReference = isReference;
     Name        = name;
     Attributes  = new List <SwiftTypeAttribute> ();
     IsVariadic  = false;
 }
 protected TLVariable(CoreCompoundType type, string mangledName, SwiftName module, SwiftClassType classType, SwiftName ident, SwiftType ofType,
                      bool isStatic, ulong offset, SwiftType extensionOn)
     : base(type, mangledName, module, classType, offset)
 {
     Name        = Ex.ThrowOnNull(ident, nameof(ident));
     OfType      = Ex.ThrowOnNull(ofType, nameof(ofType));
     IsStatic    = isStatic;
     ExtensionOn = extensionOn;
 }
 protected TLFunction(string mangledName, SwiftName module, SwiftName functionName,
                      SwiftClassType classType, SwiftBaseFunctionType signature, ulong offset, OperatorType oper = OperatorType.None,
                      CoreCompoundType type = CoreCompoundType.Function)
     : base(type, mangledName, module, classType, offset)
 {
     Name      = functionName;
     Signature = signature;
     Operator  = oper;
 }
 protected TLDefinition(CoreCompoundType type, string mangledName, SwiftName module, ulong offset)
 {
     if (module == null)
     {
         throw new ArgumentNullException(nameof(module));
     }
     Type        = type;
     Module      = module;
     MangledName = Ex.ThrowOnNull(mangledName, nameof(mangledName));
     Offset      = offset;
 }
 protected TLClassElem(CoreCompoundType type, string mangledName, SwiftName module, SwiftClassType classType, ulong offset)
     : base(type, mangledName, module, offset)
 {
     Class = classType;
 }