public IFunctionData RunWithResult(SyneryParser.SyneryFunctionBlockContext context, string codeFileAlias = null) { IFunctionData functionData = new FunctionData(); functionData.CodeFileAlias = codeFileAlias; functionData.Context = context.block(); functionData.FunctionDefinition = new FunctionDefinition(); functionData.FunctionDefinition.Name = context.Identifier().GetText(); functionData.FunctionDefinition.Parameters = new List <IFunctionParameterDefinition>(); if (context.type() != null) { functionData.FunctionDefinition.ReturnType = Controller.Interpret <SyneryParser.TypeContext, SyneryType>(context.type()); } else { functionData.FunctionDefinition.HasReturnValue = false; } if (context.parameterDeclartions() != null && context.parameterDeclartions().parameterDeclartion() != null) { foreach (SyneryParser.ParameterDeclartionContext parameterDeclaration in context.parameterDeclartions().parameterDeclartion()) { IFunctionParameterDefinition parameter = new FunctionParameterDefinition(); parameter.Type = Controller.Interpret <SyneryParser.TypeContext, SyneryType>(parameterDeclaration.type()); parameter.Name = parameterDeclaration.Identifier().GetText(); if (parameterDeclaration.parameterInitializer() != null) { if (parameterDeclaration.parameterInitializer().literal() != null) { parameter.DefaultValue = Controller.Interpret <SyneryParser.LiteralContext, IValue>(parameterDeclaration.parameterInitializer().literal()); // validate declared type and the type of the given default value if (parameter.Type != parameter.DefaultValue.Type && parameter.DefaultValue.Value != null) { string message = String.Format( "Declared type '{0}' and given value type '{1}' don't match.", parameter.Type.PublicName, parameter.DefaultValue.Type.PublicName); throw new SyneryInterpretationException(parameterDeclaration, message); } } } functionData.FunctionDefinition.Parameters.Add(parameter); } } return(functionData); }
public IEnumerable <IFunctionParameterDefinition> RunWithResult(SyneryParser.ParameterDeclartionsContext context) { List <IFunctionParameterDefinition> listOfParameters = new List <IFunctionParameterDefinition>(); if (context != null && context.parameterDeclartion() != null) { foreach (SyneryParser.ParameterDeclartionContext parameterDeclaration in context.parameterDeclartion()) { IFunctionParameterDefinition parameter = new FunctionParameterDefinition(); parameter.Type = Controller.Interpret <SyneryParser.TypeContext, SyneryType>(parameterDeclaration.type()); parameter.Name = parameterDeclaration.Identifier().GetText(); if (parameterDeclaration.parameterInitializer() != null) { if (parameterDeclaration.parameterInitializer().literal() != null) { parameter.DefaultValue = Controller.Interpret <SyneryParser.LiteralContext, IValue>(parameterDeclaration.parameterInitializer().literal()); // validate declared type and the type of the given default value if (parameter.Type != parameter.DefaultValue.Type && parameter.DefaultValue.Value != null) { string message = String.Format( "Declared type '{0}' and given value type '{1}' don't match.", parameter.Type.PublicName, parameter.DefaultValue.Type.PublicName); throw new SyneryInterpretationException(parameterDeclaration, message); } } } listOfParameters.Add(parameter); } } return(listOfParameters); }