public override INode DoResolve(ResolveContext rc) { ccvh = new CallingConventionsHandler(); // resolve parameters var para_exprs = new List <Expression>(); foreach (var expression in Arguments) { if (expression.IsVoid) { ResolveContext.Report.Error(104, expression.Location, "cannot convert int to void"); } para_exprs.Add((Expression)expression.DoResolve(rc)); } Arguments = para_exprs; // resolve method rc.Resolver.ResolveMethod(Name, ref Method, para_exprs.Count); if (Method == null) { ResolveContext.Report.Error(102, Location, "Unknown method " + Name + " with " + para_exprs.Count + " parameters"); } return(base.DoResolve(rc)); }
public override INode DoResolve(ResolveContext rc) { ccvh = new CallingConventionsHandler(); Method = new MethodSpec(Name, Parameters.Count, IsFunction, Location); MethodSpec m = null; rc.Resolver.ResolveMethod(Name, ref m, Parameters.Count); if (m != null) { ResolveContext.Report.Error(108, Location, "Duplicate method signature"); } else { rc.KnowMethod(Method); } rc.CurrentMethod = Method; Method.LastParameterEndIdx = (ushort)(2 * Parameters.Count + 2); var paramaters = new List <Parameter>(); foreach (var parameter in Parameters) { paramaters.Add((Parameter)parameter.DoResolve(rc)); } Parameters = paramaters; var locals = new List <VariableDeclaration>(); foreach (var variableDeclaration in LocalVariables) { locals.Add((VariableDeclaration)variableDeclaration.DoResolve(rc)); } LocalVariables = locals; Block = (Statement)Block.DoResolve(rc); return(base.DoResolve(rc)); }