Esempio n. 1
0
        public override LatteParser.TypeContext VisitEMethodCall(LatteParser.EMethodCallContext context)
        {
            var exprType = Visit(context.expr()[0]);
            var classDef = _environment.NameToClassDef[exprType.GetText()];
            var methodId = context.ID().GetText();

            if (!ClassHasMethod(classDef, methodId, out var method))
            {
                Utils.StateUtils.InterruptWithMessage(
                    context.start.Line,
                    ErrorMessages.MethodNotDefined(classDef.Id, methodId));
            }

            ValidateFunctionCall(method, methodId, context.expr().ToList().Skip(1).ToArray(), context.start.Line);
            return(method.Type);
        }
Esempio n. 2
0
 public MethodCall(LatteParser.EMethodCallContext context)
 {
     Id     = context.ID().GetText();
     IdExpr = Utils.ExprFromExprContext(context.expr()[0]);
     context.expr().ToList().Skip(1).ToList().ForEach(expr => Exprs.Add(Utils.ExprFromExprContext(expr)));
 }