Exemplo n.º 1
0
        public int VisitFuncActualParameter(FuncActualParameter ast, Frame frame)
        {
            var routine = ast.Identifier.Declaration.Entity as IRoutineEntity;

            routine.EncodeFetch(_emitter, frame);
            return(Machine.ClosureSize);
        }
Exemplo n.º 2
0
        public Void VisitFuncActualParameter(FuncActualParameter ast, FormalParameter arg)
        {
            var binding  = ast.Identifier.Visit(this);
            var function = binding as IFunctionDeclaration;

            if (function != null)
            {
                var formals      = function.Formals;
                var functionType = function.Type;
                if (arg is FuncFormalParameter)
                {
                    var param = (FuncFormalParameter)arg;
                    if (!formals.Equals(param.Formals))
                    {
                        ReportError("wrong signature for function \"%\"", ast.Identifier);
                    }
                    else if (!functionType.Equals(param.Type))
                    {
                        ReportError("wrong type for function \"%\"", ast.Identifier);
                    }
                }
                else
                {
                    ReportError("func actual parameter not expected here", ast);
                }
            }
            else
            {
                ReportUndeclaredOrError(binding, ast.Identifier, "\"%\" is not a function identifier");
            }
            return(null);
        }