コード例 #1
0
 public Types.Type GetGenericTypeParameter(string name)
 {
     return(GenericTypeParameters
            .Select((parameter, index) => new { parameter, index })
            .Where(pair => pair.parameter.Name == name)
            .Select(pair => TypeArguments[pair.index])
            .FirstOrDefault());
 }
コード例 #2
0
 public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = (Name != null ? Name.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (ReturnType != null ? ReturnType.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (NativeName != null ? NativeName.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ Parameters.GetHashCode();
         hashCode = (hashCode * 397) ^ Categories.GetHashCode();
         hashCode = (hashCode * 397) ^ GenericTypeParameters.GetHashCode();
         hashCode = (hashCode * 397) ^ (Attributes != null ? Attributes.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Doc != null ? Doc.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (ExtensionName != null ? ExtensionName.GetHashCode() : 0);
         return(hashCode);
     }
 }
コード例 #3
0
        public bool Equals(Function other)
        {
            if (ReferenceEquals(null, other))
            {
                return(false);
            }

            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            return(string.Equals(Name, other.Name) &&
                   Parameters.Select(x => x.Type.ToString()).SequenceEqual(other.Parameters.Select(x => x.Type.ToString())) &&
                   GenericTypeParameters.SequenceEqual(other.GenericTypeParameters));
        }
コード例 #4
0
ファイル: Function.cs プロジェクト: swoolcock/Silk.NET
 /// <inheritdoc />
 public override int GetHashCode()
 {
     unchecked
     {
         // ReSharper disable NonReadonlyMemberInGetHashCode
         var hashCode = (Name != null ? Name.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (ReturnType != null ? ReturnType.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (NativeName != null ? NativeName.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ Parameters.GetHashCode();
         hashCode = (hashCode * 397) ^ Categories.GetHashCode();
         hashCode = (hashCode * 397) ^ GenericTypeParameters.GetHashCode();
         hashCode = (hashCode * 397) ^ (Attributes != null ? Attributes.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Doc != null ? Doc.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (ExtensionName != null ? ExtensionName.GetHashCode() : 0);
         // ReSharper restore NonReadonlyMemberInGetHashCode
         return(hashCode);
     }
 }
コード例 #5
0
        public override string WriteTypeScript(CodeConversionOptions options, Context context)
        {
            context = context.Clone();
            context.GenericTypeParameters = GenericTypeParameters;

            // keywords
            return("export ".If(options.Export) + "interface "
                   // name
                   + Name.TransformIf(options.RemoveInterfacePrefix, StringUtilities.RemoveInterfacePrefix)
                   // generic type parameters
                   + ("<" + GenericTypeParameters.ToCommaSepratedList() + ">").If(GenericTypeParameters.Any())
                   // base types
                   + (" extends " + BaseTypes.WriteTypeScript(options, context).ToCommaSepratedList()).If(BaseTypes.Any())
                   // body
                   + " {" + NewLine
                   // fields
                   + Fields.WriteTypeScript(options, context).Indent(options.UseTabs, options.TabSize).LineByLine() + NewLine
                   + "}");
        }
コード例 #6
0
        private void GetDeclarationString(StringBuilder sb, bool? @unsafe)
        {
            if (Parameters.Any(p => p.Type.IsPointer) || ReturnType.IsPointer || @unsafe.HasValue && @unsafe.Value)
            {
                sb.Append("unsafe ");
            }

            sb.Append(ReturnType);
            sb.Append(" ");

            sb.Append(Name);
            if (GenericTypeParameters.Count != 0)
            {
                sb.Append("<");
                var genericParameterNames = GenericTypeParameters.Select(p => p.Name);
                var genericParameterList  = string.Join(", ", genericParameterNames);
                sb.Append(genericParameterList);
                sb.Append(">");
            }
        }
コード例 #7
0
        public override string ToString()
        {
            if (IsPrimitive)
            {
                return(CSharpName);
            }

            string typename = "";

            if (!IsEmpty)
            {
                typename = CSharpName;
            }
            if (typename == "")
            {
                typename = "object";
            }

            if (IsArray)
            {
                typename = $"{ElementType?.ToString() ?? "object"}[]";
            }
            else if (IsGenericType && GenericTypeParameters.Any())
            {
                typename = Name.Split("`")[0] + "<";
                foreach (LookupType t in GenericTypeParameters)
                {
                    typename += t.ToString() + (GenericTypeParameters[GenericTypeParameters.Count() - 1] != t ? ", " : "");
                }
                typename += ">";
            }
            else
            {
                typename = CSharpName;
            }
            return(typename);
        }
コード例 #8
0
ファイル: UnitorType.cs プロジェクト: erifiv/Unitor
        public override string ToString()
        {
            if (IsPrimitive)
            {
                return(CSharpName);
            }

            StringBuilder typename = new StringBuilder();

            if (!IsEmpty)
            {
                typename.Append(CSharpName);
            }

            if (IsArray)
            {
                typename.Clear();
                typename.Append($"{ElementType?.ToString() ?? "object"}[]");
            }
            else if (IsGenericType && GenericTypeParameters.Any())
            {
                typename.Clear();
                typename.Append(Name.Split("`")[0] + "<");
                foreach (UnitorType t in GenericTypeParameters)
                {
                    typename.Append(t.ToString() + (GenericTypeParameters[GenericTypeParameters.Count() - 1] != t ? ", " : ""));
                }
                typename.Append('>');
            }

            if (typename.Length == 0)
            {
                typename.Append("object");
            }

            return(typename.ToString());
        }
コード例 #9
0
ファイル: TypeMember.cs プロジェクト: crazyants/NWheels
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public string MakeGenericName(string openBracket, string closeBracket, string commaSeparator)
        {
            if (!IsGenericType)
            {
                return(this.Name);
            }

            if (IsGenericTypeDefinition)
            {
                return(
                    this.Name +
                    openBracket +
                    string.Join(commaSeparator, GenericTypeParameters.Select(t => t.Name)) +
                    closeBracket);
            }
            else
            {
                return(
                    this.Name +
                    openBracket +
                    string.Join(commaSeparator, GenericTypeArguments.Select(t => t.MakeGenericName(openBracket, closeBracket, commaSeparator))) +
                    closeBracket);
            }
        }
コード例 #10
0
 public string WriteTypeScript(CodeConversionOptions options)
 => "export ".If(options.Export) + "interface " + Name.RemoveInterfacePrefix() + ("<" + GenericTypeParameters.ToCommaSepratedList() + ">").If(GenericTypeParameters.Any()) + (" extends " + BaseTypes.Select(e => e.WriteTypeScript()).ToCommaSepratedList()).If(BaseTypes.Any()) + " {" + NewLine
 + Fields.Select(f => f.WriteTypeScript()).Indent(options.UseTabs, options.TabSize).LineByLine() + NewLine
 + "}";
コード例 #11
0
ファイル: SmallType.cs プロジェクト: btbaggin/SmallLang
        public void AddGenericTypeParameter(string pHint)
        {
            var t = CreateGenericParameter(pHint);

            GenericTypeParameters.Add(t);
        }
コード例 #12
0
ファイル: CreateAndSaveDocs.cs プロジェクト: hlizard/boo
		public override void LeaveMethod(Boo.Lang.Compiler.Ast.Method node)
		{
			var method = (IMethod) node.Entity;
			var designator=new StringBuilder();
			designator.Append("M:");
			var nodeName=node.FullName;
			var posGenericParams=nodeName.IndexOf('[');
			if (posGenericParams >= 0)
				nodeName=nodeName.Substring(0, posGenericParams);
			designator.Append(nodeName);
			if (GenericsServices.IsGenericMethod(node.Entity))
			{
				designator.Append("``"); // TODO: I will not deal with nested classes here. ` for the class parameters, `` for method parameters. That's it for now.
				designator.Append(GenericsServices
				                  .GetMethodGenerity(method)
				                  .ToString());
			}
			if (node.Parameters.Count > 0)
			{
				designator.Append("(");
				int i=0;
				var genericParams = new GenericTypeParameters(method);
				foreach (Ast.ParameterDeclaration p in node.Parameters)
				{
					if (i > 0) designator.Append(",");
					designator.Append(CilTypeName(genericParams, p.Type));
					i+=1;
				}
				designator.Append(")");
			}
			this.ProcessDocumentation(designator.ToString(), node);
			base.LeaveMethod(node);
		}
コード例 #13
0
ファイル: CreateAndSaveDocs.cs プロジェクト: hlizard/boo
		static string CilTypeName(GenericTypeParameters generics, IType typeEntity)
		{
			// TODO this method should also complete the qualifiers.
			if (GenericsServices.IsGenericParameter(typeEntity))
			{
				return generics.ToString(typeEntity.Name);
			}
			else
			{
				var result = ToTypeName( typeEntity.FullName );
				var numberOfGenericArguments=NumberOfGenericArguments(typeEntity);
				if (numberOfGenericArguments > 0)
				{
					result+="{";
					int iGenericArg=0;
					foreach(var genericArgument in typeEntity.ConstructedInfo.GenericArguments)
					{
						if (iGenericArg > 0)
							result+=",";
						result+=CilTypeName(generics, genericArgument);
						iGenericArg+=1;
					}
					result+="}";
				}
				return result;
			}
		}
コード例 #14
0
ファイル: CreateAndSaveDocs.cs プロジェクト: hlizard/boo
		/// <summary>
		/// Returns the CIL designator of a particular type.
		/// </summary>
		/// <param name="tref">The reference to a type. Entity must have been resolved.</param>
		/// <returns></returns>
		static string CilTypeName(GenericTypeParameters generics, Ast.TypeReference typeRef)
		{
			return CilTypeName(generics, (IType)typeRef.Entity);
		}