/// <summary> /// Tries to create a type of the given type /// </summary> /// <param name="name">The name of the type</param> private BaseType CreateType(string name) { //Split the type name var typeParts = SplitTypeName(name); BaseType type = null; if (TypeSystem.FromString(typeParts[0], out var primitiveType)) { type = new PrimitiveType(primitiveType); } else if (typeParts[0] == "Ref") { if (ExtractElementType(typeParts[1], out var elementTypeName)) { var elementType = FindType(elementTypeName); if (elementType != null) { type = new ArrayType(elementType); } } else if (typeParts[1] == "Null") { type = new NullType(); } else { if (typeParts.Count >= 2) { var className = ""; bool isFirst = true; for (var i = 1; i < typeParts.Count; i++) { if (isFirst) { isFirst = false; } else { className += "."; } className += typeParts[i]; } var classMetadata = this.classMetadataProvider.GetMetadata(className); if (classMetadata != null) { type = new ClassType(classMetadata); } } } } if (type != null) { this.types.Add(name, type); } return(type); }
/// <summary> /// Creates a new function definition for a managed function /// </summary> /// <param name="name">The name of the function</param> /// <param name="parameters">The parameters</param> /// <param name="returnType">The return type</param> /// <param name="classType">The class type if member function</param> /// <param name="isConstructor">Indicates if the function is a constructor</param> public FunctionDefinition(string name, IList <BaseType> parameters, BaseType returnType, ClassType classType = null, bool isConstructor = false) { this.Name = name; parameters = new List <BaseType>(parameters); this.IsMemberFunction = classType != null; this.ClassType = classType; this.IsConstructor = isConstructor; if (this.IsMemberFunction) { parameters.Insert(0, classType); this.MemberName = name; this.Name = this.ClassType.ClassName + "::" + name; } this.Parameters = new ReadOnlyCollection <BaseType>(parameters); this.ReturnType = returnType; this.IsManaged = true; }