public FixedType(PredefinedTypeSyntax syntax, Package containingPackage, int bitLength, bool isSigned, int fractionalBits)
            : base(syntax, containingPackage, bitLength, isSigned)
        {
            Requires.That(fractionalBits <= bitLength, nameof(fractionalBits), "Must be less than bit length");

            FractionalBits = fractionalBits;
        }
 public VoidType(PredefinedTypeSyntax syntax, Package containingPackage)
     : base(syntax, containingPackage)
 {
     Requires.That(syntax.Name.Text == "void", nameof(syntax), "Syntax must be for void type");
 }
 public IntType(PredefinedTypeSyntax syntax, Package containingPackage, int bitLength, bool isSigned)
     : base(syntax, containingPackage, bitLength, isSigned)
 {
     var prefix = isSigned ? "int" : "uint";
     Requires.That(syntax.Name.Text.StartsWith(prefix), nameof(syntax), $"Syntax must be for {prefix} type");
 }
 public StringType(PredefinedTypeSyntax syntax, Package containingPackage)
     : base(syntax, containingPackage)
 {
     Requires.That(syntax.Name.Text == "string", nameof(syntax), "Syntax must be for size type");
 }
 protected SignedType(PredefinedTypeSyntax syntax, Package containingPackage, int bitLength, bool isSigned)
     : base(syntax, containingPackage, bitLength)
 {
     IsSigned = isSigned;
 }
 public OffsetType(PredefinedTypeSyntax syntax, Package containingPackage)
     : base(syntax, containingPackage)
 {
     Requires.That(syntax.Name.Text == "offset", nameof(syntax), "Syntax must be for offset type");
 }
 protected PredefinedType(PredefinedTypeSyntax syntax, Package containingPackage)
     : base(syntax, containingPackage)
 {
 }
 protected SizedType(PredefinedTypeSyntax syntax, Package containingPackage, int bitLength)
     : base(syntax, containingPackage)
 {
     BitLength = bitLength;
 }