Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }