public IExpressionNode Visit(ArraySyntaxNode node)
        {
            var elements            = new IExpressionNode[node.Expressions.Count];
            var expectedElementType = node.OutputType.ArrayTypeSpecification.FunnyType;

            for (int i = 0; i < node.Expressions.Count; i++)
            {
                var elementNode = ReadNode(node.Expressions[i]);
                elements[i] = CastExpressionNode.GetConvertedOrOriginOrThrow(elementNode, expectedElementType);
            }

            return(new ArrayExpressionNode(elements, node.Interval, node.OutputType));
        }
Exemple #2
0
        public bool Visit(ArraySyntaxNode node)
        {
            VisitChildren(node);
            var elementIds = new int[node.Expressions.Count];

            for (int i = 0; i < node.Expressions.Count; i++)
            {
                elementIds[i] = node.Expressions[i].OrderNumber;
            }
#if DEBUG
            Trace(node, $"[{string.Join(",", elementIds)}]");
#endif
            _ticTypeGraph.SetSoftArrayInit(node.OrderNumber, elementIds);
            return(true);
        }
        public override bool Visit(ArraySyntaxNode node)
        {
            // if upcast is denied
            // This code is active because composite upcast works not very well...
            var elementType = node.OutputType.ArrayTypeSpecification.FunnyType;

            if (elementType == FunnyType.Anything)
            {
                return(true);
            }

            if (node.Children.All(i => i.OutputType == elementType))
            {
                return(true);
            }

            throw ErrorFactory.VariousArrayElementTypes(node);
        }
Exemple #4
0
 public virtual VisitorEnterResult Visit(ArraySyntaxNode node) => DefaultVisitEnter(node);
Exemple #5
0
 public string Visit(ArraySyntaxNode node) => "[...]";
Exemple #6
0
 public virtual bool Visit(ArraySyntaxNode node) => true;