private TypeSymbol CreateArrayTypeCore(TypeSymbol itemTypeSymbol) { TypeSymbol arrayTypeSymbol = (TypeSymbol)((ISymbolTable)_systemNamespace).FindSymbol("Array", null, SymbolFilter.Types); Debug.Assert(arrayTypeSymbol != null); TypeSymbol specificArrayTypeSymbol = new ClassSymbol("Array", _systemNamespace); foreach (MemberSymbol memberSymbol in arrayTypeSymbol.Members) { specificArrayTypeSymbol.AddMember(memberSymbol); } IndexerSymbol indexerSymbol = new IndexerSymbol(specificArrayTypeSymbol, itemTypeSymbol, MemberVisibility.Public); indexerSymbol.SetScriptIndexer(); specificArrayTypeSymbol.AddMember(indexerSymbol); specificArrayTypeSymbol.SetIgnoreNamespace(); specificArrayTypeSymbol.SetArray(); return(specificArrayTypeSymbol); }
private TypeSymbol CreateGenericTypeCore(TypeSymbol templateType, IList <TypeSymbol> typeArguments) { if (templateType.Type == SymbolType.Class) { ClassSymbol genericClass = (ClassSymbol)templateType; ClassSymbol instanceClass = new ClassSymbol(genericClass.Name, (NamespaceSymbol)genericClass.Parent); instanceClass.SetInheritance(genericClass.BaseClass, genericClass.Interfaces); instanceClass.SetImported(genericClass.Dependency); if (genericClass.IgnoreNamespace) { instanceClass.SetIgnoreNamespace(); } instanceClass.ScriptNamespace = genericClass.ScriptNamespace; if (genericClass.IsTransformed) { instanceClass.SetTransformedName(genericClass.GeneratedName); } else if (genericClass.IsTransformAllowed == false) { instanceClass.DisableNameTransformation(); } if (genericClass.IsArray) { instanceClass.SetArray(); } instanceClass.AddGenericParameters(genericClass.GenericParameters); instanceClass.AddGenericArguments(genericClass, typeArguments); CreateGenericTypeMembers(genericClass, instanceClass, typeArguments); return(instanceClass); } else if (templateType.Type == SymbolType.Interface) { InterfaceSymbol genericInterface = (InterfaceSymbol)templateType; InterfaceSymbol instanceInterface = new InterfaceSymbol(genericInterface.Name, (NamespaceSymbol)genericInterface.Parent); instanceInterface.SetImported(genericInterface.Dependency); if (genericInterface.IgnoreNamespace) { instanceInterface.SetIgnoreNamespace(); } if (genericInterface.IsTransformed) { instanceInterface.SetTransformedName(genericInterface.GeneratedName); } else if (genericInterface.IsTransformAllowed == false) { instanceInterface.DisableNameTransformation(); } instanceInterface.AddGenericParameters(genericInterface.GenericParameters); instanceInterface.AddGenericArguments(genericInterface, typeArguments); CreateGenericTypeMembers(genericInterface, instanceInterface, typeArguments); return(instanceInterface); } else if (templateType.Type == SymbolType.Delegate) { DelegateSymbol genericDelegate = (DelegateSymbol)templateType; DelegateSymbol instanceDelegate = new DelegateSymbol(genericDelegate.Name, (NamespaceSymbol)genericDelegate.Parent); instanceDelegate.AddGenericParameters(genericDelegate.GenericParameters); instanceDelegate.AddGenericArguments(genericDelegate, typeArguments); CreateGenericTypeMembers(genericDelegate, instanceDelegate, typeArguments); return(instanceDelegate); } return(null); }
private TypeSymbol CreateGenericTypeCore(TypeSymbol templateType, IList<TypeSymbol> typeArguments) { if (templateType.Type == SymbolType.Class) { ClassSymbol genericClass = (ClassSymbol)templateType; ClassSymbol instanceClass = new ClassSymbol(genericClass.Name, (NamespaceSymbol)genericClass.Parent); instanceClass.SetInheritance(genericClass.BaseClass, genericClass.Interfaces); instanceClass.SetImported(genericClass.Dependency); if (genericClass.IgnoreNamespace) { instanceClass.SetIgnoreNamespace(); } instanceClass.ScriptNamespace = genericClass.ScriptNamespace; if (genericClass.IsTransformed) { instanceClass.SetTransformedName(genericClass.GeneratedName); } else if (genericClass.IsTransformAllowed == false) { instanceClass.DisableNameTransformation(); } if (genericClass.IsArray) { instanceClass.SetArray(); } instanceClass.AddGenericParameters(genericClass.GenericParameters); instanceClass.AddGenericArguments(genericClass, typeArguments); CreateGenericTypeMembers(genericClass, instanceClass, typeArguments); return instanceClass; } else if (templateType.Type == SymbolType.Interface) { InterfaceSymbol genericInterface = (InterfaceSymbol)templateType; InterfaceSymbol instanceInterface = new InterfaceSymbol(genericInterface.Name, (NamespaceSymbol)genericInterface.Parent); instanceInterface.SetImported(genericInterface.Dependency); if (genericInterface.IgnoreNamespace) { instanceInterface.SetIgnoreNamespace(); } if (genericInterface.IsTransformed) { instanceInterface.SetTransformedName(genericInterface.GeneratedName); } else if (genericInterface.IsTransformAllowed == false) { instanceInterface.DisableNameTransformation(); } instanceInterface.AddGenericParameters(genericInterface.GenericParameters); instanceInterface.AddGenericArguments(genericInterface, typeArguments); CreateGenericTypeMembers(genericInterface, instanceInterface, typeArguments); return instanceInterface; } else if (templateType.Type == SymbolType.Delegate) { DelegateSymbol genericDelegate = (DelegateSymbol)templateType; DelegateSymbol instanceDelegate = new DelegateSymbol(genericDelegate.Name, (NamespaceSymbol)genericDelegate.Parent); instanceDelegate.AddGenericParameters(genericDelegate.GenericParameters); instanceDelegate.AddGenericArguments(genericDelegate, typeArguments); CreateGenericTypeMembers(genericDelegate, instanceDelegate, typeArguments); return instanceDelegate; } return null; }
private TypeSymbol CreateArrayTypeCore(TypeSymbol itemTypeSymbol) { TypeSymbol arrayTypeSymbol = (TypeSymbol)((ISymbolTable)_systemNamespace).FindSymbol("Array", null, SymbolFilter.Types); Debug.Assert(arrayTypeSymbol != null); TypeSymbol specificArrayTypeSymbol = new ClassSymbol("Array", _systemNamespace); foreach (MemberSymbol memberSymbol in arrayTypeSymbol.Members) { specificArrayTypeSymbol.AddMember(memberSymbol); } IndexerSymbol indexerSymbol = new IndexerSymbol(specificArrayTypeSymbol, itemTypeSymbol, MemberVisibility.Public); indexerSymbol.SetScriptIndexer(); specificArrayTypeSymbol.AddMember(indexerSymbol); specificArrayTypeSymbol.SetIgnoreNamespace(); specificArrayTypeSymbol.SetArray(); return specificArrayTypeSymbol; }