Пример #1
0
        public ArrayTypeAST GetArrayType(ArrayAccessAST arrayAccess)
        {
            arrayAccess.ArrayVariableName.Accept(this);

            ArrayTypeAST arrayType = _stateInfo.currentType as ArrayTypeAST;

            if (arrayType == null)
            {
                throw new Exception("Invalid array type " + arrayAccess.ArrayVariableName);
            }

            return(arrayType);
        }
Пример #2
0
        public override void Visit(ArrayAccessAST arrayAccess)
        {
            if (_stateInfo.isConst)
            {
                throw new Exception("Expression must be constant");
            }

            var arrayType = GetArrayType(arrayAccess);

            var accessDimensions = arrayAccess.AccessExprList.Count;

            _stateInfo.currentType = GetArrayContainedType(arrayType, accessDimensions);
        }
Пример #3
0
        public override void Visit(ArrayAccessAST arrayAccess)
        {
            foreach (var expr in arrayAccess.AccessExprList)
            {
                var accessExprType = _exprTypeVisitor.GetAstNodeType(_currentFileName, _currentScopeId,
                                                                     _currentNodePosition, expr);

                if (!Vocabulary.Ints.Contains(accessExprType.ToString()))
                {
                    throw new Exception(string.Format("Type mismatch : array {0} accessor must be an integer, but '{1}' type found",
                                                      arrayAccess.ArrayVariableName.ToString(), accessExprType.ToString()));
                }
            }
        }
Пример #4
0
 public override void Visit(ArrayAccessAST arrayAcess)
 {
 }
Пример #5
0
 public virtual void Visit(ArrayAccessAST arrayAcess)
 {
 }