예제 #1
0
        public override dynamic Visit(ArrayDereferenceNode node)
        {
            var lValueType = node.LValue.Accept(this);

            node.Expression.Accept(this);
            var expressionType = node.Expression.Type.PrimitiveType;

            if (expressionType != PrimitiveType.Integer)
            {
                Context.ErrorService.Add(
                    ErrorType.Unknown,
                    node.Expression.Token,
                    $"type error: array index must be an integer expression"
                    );
                lValueType = PrimitiveType.Error;
                // throw new Exception("type error: array index must be an integer expression");
            }

            /*if (expressionType == null)
             * {
             *  node.Type = new ArrayTypeNode
             *  {
             *      PrimitiveType = PrimitiveType.Array,
             *      SubType = ((ArrayTypeNode) node.LValue.Type).SubType
             *  };
             *  return PrimitiveType.Array;
             * }*/

            node.Type = new SimpleTypeNode
            {
                PrimitiveType = lValueType // ((ArrayTypeNode) lValueType).SubType
            };

            return(lValueType);
        }
예제 #2
0
        public override dynamic Visit(ArrayDereferenceNode node)
        {
            node.Expression = ReplaceCallNode(node.Expression);
            node.Expression.Accept(this);

            return(null);
        }
예제 #3
0
 public abstract dynamic Visit(ArrayDereferenceNode node);
예제 #4
0
 public override dynamic Visit(ArrayDereferenceNode node)
 {
     return(null);
 }