Ejemplo n.º 1
0
        public override IPExpr VisitTupleAccessExpr(PParser.TupleAccessExprContext context)
        {
            var subExpr = Visit(context.expr());
            var fieldNo = int.Parse(context.field.GetText());

            if (!(subExpr.Type.Canonicalize() is TupleType tuple))
            {
                throw handler.TypeMismatch(subExpr, TypeKind.Tuple, TypeKind.NamedTuple);
            }
            if (fieldNo >= tuple.Types.Count)
            {
                throw handler.OutOfBoundsTupleAccess(context.field, tuple);
            }
            return(new TupleAccessExpr(context, subExpr, fieldNo, tuple.Types[fieldNo]));
        }
Ejemplo n.º 2
0
 public override object VisitTupleAccessExpr(PParser.TupleAccessExprContext context)
 {
     return(null);
 }