public override bool VisitTopLevelDelegate([NotNull] GamaParser.TopLevelDelegateContext context) { var name = context.Symbol().GetText(); if (NamespaceContext.FindTypeRef(name) != null) { GlobalContext.AddError(new ErrorDuplicateType(context)); return(false); } var retty = InstanceTypes.Void; var rettyfqtn = context.fqtn(); if (rettyfqtn != null) { retty = NamespaceContext.FindTypeRefGlobal(rettyfqtn); if (retty == null) { GlobalContext.AddError(new ErrorTypeNotFound(context.fqtn())); return(false); } } var parms = new GamaTypeRef[0]; var parmsnative = new LLVMTypeRef[0]; var parmsctx = context.fqtnList(); if (parmsctx != null) { var fqtns = parmsctx.fqtn(); parms = new GamaTypeRef[fqtns.Length]; parmsnative = new LLVMTypeRef[fqtns.Length]; for (int i = 0; i < fqtns.Length; i++) { var ty = NamespaceContext.FindTypeRefGlobal(fqtns[i]); if (ty == null) { GlobalContext.AddError(new ErrorTypeNotFound(fqtns[i])); return(false); } parms[i] = ty; parmsnative[i] = ty.UnderlyingType; } } NamespaceContext.This.Types.Add(new GamaFunction(name, retty, parms, LLVMTypeRef.CreateFunction(retty.UnderlyingType, parmsnative))); return(true); }
/// <summary> /// Visit a parse tree produced by <see cref="GamaParser.topLevelDelegate"/>. /// <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 VisitTopLevelDelegate([NotNull] GamaParser.TopLevelDelegateContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by <see cref="GamaParser.topLevelDelegate"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitTopLevelDelegate([NotNull] GamaParser.TopLevelDelegateContext context) { }