public virtual void VisitFunctionPointer(IFunctionPointer type) { }
private string GetName(bool fullname) { if (tref != null) { string name = tref.Name.Replace(".", "::").Replace("+", "::"); if (!fullname) { string special; if (tref.Namespace == "System" && specialTypeNames.TryGetValue(name, out special)) { name = special; } } ITypeCollection genericArguments = tref.GenericArguments; if (genericArguments.Count > 0) { System.Text.StringBuilder build = new System.Text.StringBuilder(name); build.Append('<'); bool first = true; foreach (IType type1 in genericArguments) { if (first) { first = false; } else { build.Append(", "); } build.Append(new TypeRef(type1).GetNameWithRef(fullname)); } build.Append('>'); name = build.ToString(); } return(fullname?RawNamespace + name:name); } IArrayType type2 = type as IArrayType; if (type2 != null) { string name = type2.Dimensions.Count <= 1?"":", " + type2.Dimensions.Count.ToString(); return("array<" + new TypeRef(type2.ElementType).GetNameWithRef(fullname) + name + ">"); } IPointerType type4 = type as IPointerType; if (type4 != null) { return(new TypeRef(type4.ElementType).GetNameWithRef(fullname) + "*"); } IReferenceType type3 = type as IReferenceType; if (type3 != null) { return(new TypeRef(type3.ElementType).GetNameWithRef(fullname) + "%"); } IOptionalModifier modifier2 = type as IOptionalModifier; if (modifier2 != null) { return(Modify(new TypeRef(modifier2.Modifier), new TypeRef(modifier2.ElementType), fullname, false)); } IRequiredModifier modifier = type as IRequiredModifier; if (modifier != null) { return(Modify(new TypeRef(modifier.Modifier), new TypeRef(modifier.ElementType), fullname, true)); } IGenericParameter parameter = type as IGenericParameter; if (parameter != null) { return(parameter.Name); } IGenericArgument argument = type as IGenericArgument; if (argument != null) { return(new TypeRef(argument.Resolve()).GetNameWithRef(fullname)); } IFunctionPointer fptr = type as IFunctionPointer; if (fptr != null) { System.Text.StringBuilder build = new System.Text.StringBuilder(); build.Append("("); build.Append(new TypeRef(fptr.ReturnType.Type).GetNameWithRef(fullname)); build.Append(" (*)("); bool first = true; foreach (IParameterDeclaration declaration in fptr.Parameters) { if (first) { first = false; } else { build.Append(", "); } build.Append(new TypeRef(declaration.ParameterType).GetNameWithRef(fullname)); } build.Append("))"); return(build.ToString()); } if (type is IValueTypeConstraint) { return("value class"); } else if (type is IDefaultConstructorConstraint) { return("<DefaultConstructorConstraint>"); } return("<不明な型>"); }
public string WriteName(LanguageWriter w) { if (tref != null) { string name = tref.Name.Replace(".", "::").Replace("+", "::"); string special; if (tref.Namespace == "System" && specialTypeNames.TryGetValue(name, out special)) { name = special; } name = NameMangling.UnDecorateName(name); w.WriteReference(name, this.FullName, tref); ITypeCollection genericArguments = tref.GenericArguments; if (genericArguments.Count > 0) { w.Write("<"); bool first = true; foreach (IType type1 in genericArguments) { if (first) { first = false; } else { w.Write(", "); } new TypeRef(type1).WriteNameWithRef(w); } w.Write(">"); } return(name); } IArrayType type2 = type as IArrayType; if (type2 != null) { w.WriteKeyword("array"); w.Write("<"); new TypeRef(type2.ElementType).WriteNameWithRef(w); if (type2.Dimensions.Count > 1) { w.Write(", "); w.WriteAsLiteral(type2.Dimensions.Count); } w.Write(">"); } IPointerType type4 = type as IPointerType; if (type4 != null) { new TypeRef(type4.ElementType).WriteNameWithRef(w); w.Write("*"); } IReferenceType type3 = type as IReferenceType; if (type3 != null) { new TypeRef(type3.ElementType).WriteNameWithRef(w); w.Write("%"); } IOptionalModifier modifier2 = type as IOptionalModifier; if (modifier2 != null) { WriteModify(w, new TypeRef(modifier2.Modifier), new TypeRef(modifier2.ElementType), false); } IRequiredModifier modifier = type as IRequiredModifier; if (modifier != null) { WriteModify(w, new TypeRef(modifier.Modifier), new TypeRef(modifier.ElementType), true); } IFunctionPointer fptr = type as IFunctionPointer; if (fptr != null) { w.Write("("); new TypeRef(fptr.ReturnType.Type).WriteNameWithRef(w); w.Write(" (*)("); bool first = true; foreach (IParameterDeclaration declaration in fptr.Parameters) { if (first) { first = false; } else { w.Write(", "); } new TypeRef(declaration.ParameterType).WriteNameWithRef(w); } w.Write("))"); } IGenericParameter parameter = type as IGenericParameter; if (parameter != null) { w.WriteReference(parameter.Name, "/* ジェネリックパラメータ */ " + parameter.Name, null); } IGenericArgument argument = type as IGenericArgument; if (argument != null) { new TypeRef(argument.Resolve()).WriteNameWithRef(w); } if (type is IValueTypeConstraint) { w.WriteKeyword("value class"); } else if (type is IDefaultConstructorConstraint) { w.Write("<DefaultConstructorConstraint>"); } return("<不明な型>"); }
private string GetTypeText(IType value) { ITypeReference typeReference = value as ITypeReference; if (typeReference != null) { string specialName = this.GetTypeSpecialNameText(typeReference); if ((specialName != null) && (specialName.Length > 0)) { return(specialName); } string typeReferenceText = this.GetTypeReferenceText(typeReference); return(typeReferenceText); } IPointerType pointerType = value as IPointerType; if (pointerType != null) { return(this.GetTypeText(pointerType.ElementType) + "*"); } IReferenceType referenceType = value as IReferenceType; if (referenceType != null) { return(this.GetTypeText(referenceType.ElementType) + "&"); } IArrayType arrayType = value as IArrayType; if (arrayType != null) { using (StringWriter writer = new StringWriter(CultureInfo.InvariantCulture)) { writer.Write(this.GetTypeText(arrayType.ElementType)); writer.Write("["); IArrayDimensionCollection dimensions = arrayType.Dimensions; for (int i = 0; i < dimensions.Count; i++) { if (i != 0) { writer.Write(","); } int lowerBound = dimensions[i].LowerBound; int upperBound = dimensions[i].UpperBound; if (lowerBound != -1) { writer.Write(lowerBound.ToString(CultureInfo.InvariantCulture)); } if ((lowerBound != -1) || (upperBound != -1)) { writer.Write(":"); } if (upperBound != -1) { writer.Write(upperBound.ToString(CultureInfo.InvariantCulture)); } } writer.Write("]"); return(writer.ToString()); } } IOptionalModifier optionalModifier = value as IOptionalModifier; if (optionalModifier != null) { return("{optional:" + this.GetTypeText(optionalModifier.Modifier) + "}" + this.GetTypeText(optionalModifier.ElementType)); } IRequiredModifier requiredModifier = value as IRequiredModifier; if (requiredModifier != null) { return("{required:" + this.GetTypeText(requiredModifier.Modifier) + "}" + this.GetTypeText(requiredModifier.ElementType)); } IFunctionPointer functionPointer = value as IFunctionPointer; if (functionPointer != null) { using (StringWriter writer = new StringWriter(CultureInfo.InvariantCulture)) { writer.Write("*"); writer.Write("("); for (int i = 0; i < functionPointer.Parameters.Count; i++) { if (i != 0) { writer.Write(","); } writer.Write(this.GetTypeText(functionPointer.Parameters[i].ParameterType)); } writer.Write(")"); writer.Write(":"); writer.Write(this.GetTypeText(functionPointer.ReturnType.Type)); return(writer.ToString()); } } IGenericParameter genericParameter = value as IGenericParameter; if (genericParameter != null) { return(genericParameter.Name); } IGenericArgument genericArgument = value as IGenericArgument; if (genericArgument != null) { ITypeReference genericType = genericArgument.Owner as ITypeReference; if (genericType != null) { return("<!" + genericArgument.Position.ToString(CultureInfo.InvariantCulture) + ">"); } IMethodReference genericMethod = genericArgument.Owner as IMethodReference; if (genericMethod != null) { return("<!!" + genericArgument.Position.ToString(CultureInfo.InvariantCulture) + ">"); } } throw new NotSupportedException("Invalid type in code identifier."); }
public virtual IType TransformFunctionPointer(IFunctionPointer value) { return value; }