public override object VisitExternalFunctionDefinition([NotNull] functionalParser.ExternalFunctionDefinitionContext context)
        {
            var predicate = ((string, string[], Ty))Visit(context.predicate());

            if (predicate.Item2.Length != 0)
            {
                ErrorReporter.ErrorFL("An external function cannot be generic", FileAndLine(context));
            }

            FunctionType functionPredicate;

            if (predicate.Item3.Type.Is <FunctionType>())
            {
                functionPredicate = predicate.Item3.Type.As <FunctionType>();
            }
            else
            {
                // If the predicate is not a function type make it into one (e.g. main :: Int)
                functionPredicate = new FunctionType(new Ty[] { predicate.Item3 });
            }

            return(new FunctionNode(predicate.Item1, functionPredicate, FileAndLine(context)));
        }
示例#2
0
 /// <summary>
 /// Visit a parse tree produced by the <c>ExternalFunctionDefinition</c>
 /// labeled alternative in <see cref="functionalParser.definition"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitExternalFunctionDefinition([NotNull] functionalParser.ExternalFunctionDefinitionContext context)
 {
     return(VisitChildren(context));
 }