public static CodeType GetCodeTypeFromContext(ParseInfo parseInfo, DeltinScriptParser.Code_typeContext typeContext) { if (typeContext == null) { return(null); } CodeType type = null; if (typeContext.PART() != null) { type = parseInfo.TranslateInfo.Types.GetCodeType(typeContext.PART().GetText(), parseInfo.Script.Diagnostics, DocRange.GetRange(typeContext)); } // Get generics if (typeContext.generics() != null) { // Create a list to store the generics. List <CodeType> generics = new List <CodeType>(); // Get the generics. foreach (var genericContext in typeContext.generics().code_type()) { generics.Add(GetCodeTypeFromContext(parseInfo, genericContext)); } if (type is Lambda.ValueBlockLambda) { type = new Lambda.ValueBlockLambda(generics[0], generics.Skip(1).ToArray()); } else if (type is Lambda.BlockLambda) { type = new Lambda.BlockLambda(generics.ToArray()); } else if (type is Lambda.MacroLambda) { type = new Lambda.MacroLambda(generics[0], generics.Skip(1).ToArray()); } } if (type != null) { type.Call(parseInfo, DocRange.GetRange(typeContext.PART())); } if (typeContext.INDEX_START() != null) { for (int i = 0; i < typeContext.INDEX_START().Length; i++) { type = new ArrayType(type); } } return(type); }
public static CodeType GetCodeTypeFromContext(ParseInfo parseInfo, ParseType typeContext) { if (typeContext == null) { return(null); } CodeType type = null; if (!typeContext.IsDefault) { type = parseInfo.TranslateInfo.Types.GetCodeType(typeContext.Identifier.Text, parseInfo.Script.Diagnostics, typeContext.Identifier.Range); } // Get generics if (typeContext.HasTypeArgs) { // Create a list to store the generics. List <CodeType> generics = new List <CodeType>(); // Get the generics. foreach (var genericContext in typeContext.TypeArgs) { generics.Add(GetCodeTypeFromContext(parseInfo, genericContext)); } if (type is Lambda.ValueBlockLambda) { type = new Lambda.ValueBlockLambda(generics[0], generics.Skip(1).ToArray()); } else if (type is Lambda.BlockLambda) { type = new Lambda.BlockLambda(generics.ToArray()); } else if (type is Lambda.MacroLambda) { type = new Lambda.MacroLambda(generics[0], generics.Skip(1).ToArray()); } } if (type != null) { type.Call(parseInfo, typeContext.Identifier.Range); } for (int i = 0; i < typeContext.ArrayCount; i++) { type = new ArrayType(type); } return(type); }