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))); }
/// <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)); }