예제 #1
0
        public SwiftType RenamedCloneOf(SwiftName newName)
        {
            var ty = MemberwiseClone() as SwiftType;

            ty.Name = newName;
            return(ty);
        }
        public void SwiftNamePunyNotEquals()
        {
            SwiftName sn  = new SwiftName("GrIh", true);
            SwiftName sn1 = new SwiftName("Bob1", false);

            Assert.AreNotEqual(sn, sn1);
        }
        public void SwiftNamePunyEquals()
        {
            SwiftName sn  = new SwiftName("GrIh", true);
            SwiftName sn1 = new SwiftName("GrIh", true);

            Assert.AreEqual(sn, sn1);
        }
        public void SwiftNameNotEquals()
        {
            SwiftName sn  = new SwiftName("Bob", false);
            SwiftName sn1 = new SwiftName("Bob1", false);

            Assert.AreNotEqual(sn, sn1);
        }
예제 #5
0
 public SwiftClassName(SwiftName module, IList <MemberNesting> nesting, IList <SwiftName> nestingNames, OperatorType oper = OperatorType.None)
 {
     Module       = Ex.ThrowOnNull(module, "module");
     Nesting      = Ex.ThrowOnNull(nesting, "nesting");
     NestingNames = Ex.ThrowOnNull(nestingNames, "nestingNames");
     Terminus     = NestingNames.Count > 0 ? NestingNames [NestingNames.Count - 1] : null;
     Operator     = oper;
 }
예제 #6
0
 protected SwiftType(CoreCompoundType type, bool isReference, SwiftName name = null)
 {
     Type        = type;
     IsReference = isReference;
     Name        = name;
     Attributes  = new List <SwiftTypeAttribute> ();
     IsVariadic  = false;
 }
예제 #7
0
 public SwiftTupleType(IEnumerable <SwiftType> contents, bool isReference, SwiftName name = null)
     : base(CoreCompoundType.Tuple, isReference, name)
 {
     Contents = new List <SwiftType> ();
     if (contents != null)
     {
         Contents.AddRange(contents);
     }
 }
예제 #8
0
 public SwiftPropertyType(SwiftType unCurriedParameter, PropertyType propType, SwiftName propName,
                          SwiftName privateName, SwiftFunctionType accessor, bool isStatic, bool isReference, SwiftType extensionOn = null)
     : base(unCurriedParameter, accessor.Parameters, accessor.ReturnType, isReference, false, propName, extensionOn)
 {
     PropertyType = propType;
     PrivateName  = privateName;
     OfType       = accessor;
     IsSubscript  = true;
     IsStatic     = isStatic;
 }
예제 #9
0
 public SwiftProtocolListType(SwiftClassType protocol, bool isReference, SwiftName name = null)
     : base(CoreCompoundType.ProtocolList, isReference, name)
 {
     Protocols = new List <SwiftClassType> ();
     if (!protocol.IsProtocol)
     {
         throw new ArgumentOutOfRangeException($"Type {protocol.ClassName.ToFullyQualifiedName ()} is not a protocol");
     }
     Protocols.Add(protocol);
 }
        public SwiftName Map(SwiftName sn)
        {
            SwiftName mapped = Ex.ThrowOnNull(sn, nameof(sn));

            if (map.TryGetValue(sn, out mapped))
            {
                return(mapped);
            }
            return(sn);
        }
예제 #11
0
 public SwiftGenericArgReferenceType(int depth, int index, bool isReference, SwiftName name = null, List <string> associatedTypePath = null)
     : base(CoreCompoundType.GenericReference, isReference, name)
 {
     Depth = depth;
     Index = index;
     AssociatedTypePath = new List <string> ();
     if (associatedTypePath != null)
     {
         AssociatedTypePath.AddRange(associatedTypePath);
     }
 }
예제 #12
0
 public SwiftPropertyType(SwiftType unCurriedParameter, PropertyType propType, SwiftName propName,
                          SwiftName privateName, SwiftType ofType, bool isStatic, bool isReference, SwiftType extensionOn = null)
     : base(unCurriedParameter,
            (propType == PropertyType.Setter || propType == PropertyType.Materializer) ? ofType : SwiftTupleType.Empty,
            (propType == PropertyType.Getter) ? ofType : SwiftTupleType.Empty,
            isReference, false, propName, extensionOn)
 {
     PropertyType = propType;
     PrivateName  = privateName;
     OfType       = Ex.ThrowOnNull(ofType, "ofType");
     IsSubscript  = false;
     IsStatic     = isStatic;
 }
예제 #13
0
        public static SwiftClassName FromFullyQualifiedName(string fullyQualifiedName, OperatorType oper, params char [] nesting)
        {
            string [] parts = Ex.ThrowOnNull(fullyQualifiedName, "fullyQualifiedName").Split('.');
            if (parts.Length < 2)
            {
                throw new ArgumentException(String.Format("Fully qualified name '{0}' requires at least a module and one name.",
                                                          fullyQualifiedName));
            }
            if (nesting.Length != parts.Length - 1)
            {
                throw new ArgumentException(String.Format("Nesting should have {0} elements, but has {1}.",
                                                          parts.Length - 1, nesting.Length), "nesting");
            }
            SwiftName            module        = new SwiftName(parts [0], false);
            List <SwiftName>     nestingNames  = parts.Skip(1).Select(name => new SwiftName(name, false)).ToList();
            List <MemberNesting> actualNesting = nesting.Select(c => Decomposer.ToMaybeMemberNesting(c, true).Value).ToList();

            return(new SwiftClassName(module, actualNesting, nestingNames, oper));
        }
예제 #14
0
 public SwiftMetaClassType(SwiftClassType classType, bool isReference, SwiftName name = null)
     : base(CoreCompoundType.MetaClass, isReference, name)
 {
     Class = Ex.ThrowOnNull(classType, nameof(classType));
 }
예제 #15
0
 public SwiftExistentialMetaType(SwiftProtocolListType protocolList, bool isReference, SwiftName name = null)
     : base(CoreCompoundType.MetaClass, isReference, name)
 {
     Protocol = Ex.ThrowOnNull(protocolList, nameof(protocolList));
 }
예제 #16
0
 public SwiftProtocolListType(IEnumerable <SwiftClassType> protocols, bool isReference, SwiftName name = null)
     : base(CoreCompoundType.ProtocolList, isReference, name)
 {
     Protocols = new List <SwiftClassType> ();
     Protocols.AddRange(protocols.Where(p => {
         if (p.IsProtocol)
         {
             return(true);
         }
         else
         {
             throw new ArgumentOutOfRangeException("protocols", "protocols must contain only SwiftClassType with EntityKind protocol.");
         }
     }));
 }
예제 #17
0
 public SwiftBaseFunctionType(SwiftType parms, SwiftType ret, bool isReference, bool canThrow, SwiftName name = null, SwiftType extensionOn = null)
     : base(CoreCompoundType.Function, isReference, name)
 {
     Parameters       = Ex.ThrowOnNull(parms, nameof(parms));
     ReturnType       = Ex.ThrowOnNull(ret, nameof(ret));
     GenericArguments = new List <GenericArgument> ();
     CanThrow         = canThrow;
     ExtensionOn      = extensionOn;
 }
예제 #18
0
 public SwiftArrayType(bool isReference, SwiftName name = null)
     : base(CoreCompoundType.Array, isReference, name)
 {
 }
예제 #19
0
 public SwiftClassType(SwiftClassName className, bool isReference, SwiftName name = null)
     : base(CoreCompoundType.Class, isReference, name)
 {
     ClassName = className;
 }
예제 #20
0
 public SwiftTupleType(bool isReference, SwiftName name, params SwiftType [] contents)
     : this(contents, isReference, name)
 {
 }
예제 #21
0
 public SwiftUncurriedFunctionType(SwiftType unCurriedParameter,
                                   SwiftType parms, SwiftType ret, bool isReference, bool canThrow, SwiftName name = null, SwiftType extensionOn = null)
     : this(MemberType.UncurriedFunction, unCurriedParameter, parms, ret, isReference, canThrow, name, extensionOn)
 {
 }
예제 #22
0
 public SwiftAddressorType(AddressorType addressor, SwiftType ret, bool isReference, SwiftName name = null)
     : base(SwiftTupleType.Empty, ret, isReference, false, name, null)
 {
     AddressorType = addressor;
 }
예제 #23
0
 public SwiftCFunctionType(SwiftType parms, SwiftType ret, bool isReference, SwiftName name = null)
     : base(parms, ret, isReference, false, name, null)
 {
 }
예제 #24
0
 public SwiftInitializerType(InitializerType initType, SwiftType ret, SwiftClassType owner, SwiftName name)
     : base(SwiftTupleType.Empty, ret, false, false, name, null)
 {
     Owner           = Ex.ThrowOnNull(owner, nameof(owner));
     InitializerType = initType;
 }
예제 #25
0
 public SwiftFunctionType(SwiftType parms, SwiftType ret, bool isReference, bool canThrow, SwiftName name = null, SwiftType extensionOn = null, bool isEscaping = true)
     : base(parms, ret, isReference, canThrow, name, extensionOn)
 {
     IsEscaping = isEscaping;
 }
예제 #26
0
 public SwiftCFunctionPointerType(SwiftType parms, SwiftType ret, bool isReference, bool canThrow, SwiftName name = null)
     : base(parms, ret, isReference, canThrow, name, null)
 {
 }
예제 #27
0
 public SwiftModuleNameType(SwiftName name, bool isReference)
     : base(CoreCompoundType.ModuleName, isReference, name)
 {
 }
예제 #28
0
 public SwiftBuiltInType(CoreBuiltInType scalarType, bool isReference, SwiftName name = null)
     : base(CoreCompoundType.Scalar, isReference, name)
 {
     BuiltInType = scalarType;
 }
예제 #29
0
 protected SwiftUncurriedFunctionType(MemberType memberType, SwiftType unCurriedParameter, SwiftType parms, SwiftType ret, bool isReference, bool canThrow, SwiftName name = null, SwiftType extensionOn = null)
     : base(parms, ret, isReference, canThrow, name, extensionOn)
 {
     // oddly enough, this is allowed to be null
     UncurriedParameter = unCurriedParameter;
     this.memberType    = memberType;
 }
예제 #30
0
 public SwiftStaticFunctionType(SwiftType parms, SwiftType ret, bool isReference, bool canThrow, SwiftClassType ofClass, SwiftName name = null, SwiftType extensionOn = null)
     : base(parms, ret, isReference, canThrow, name, extensionOn)
 {
     OfClass = ofClass;
 }