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));
        }
Exemplo n.º 2
0
        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));
        }