# coding:utf8
"""
Описывает тип поля "массив"
"""
if True:
	from пакОберон.пакКомпилятор.пакСущность.пакРод import тРод
	from пакОберон.пакКомпилятор.пакСущность.пакОшибка import тОшибка


class тПолеМассив:
	__slots__ = ("поле", "ош")
	def __init__(сам, пОберон, пПоле):

		сам.поле = пПоле
		сам.ош = тОшибка(пОберон, "тПолеМассив")

		сам.__Массив_Проверить()
		if сам.ош.бВнутр or сам.ошбИсх:
			return

	def __Массив_Проверить(сам):
		"""
		Пытается проверить, является ли gjkt массивом.
		"""
		def Размерности_Получить():
			"""
			Рекурсивно получает и заполняет размерности массива.
			"""
			# получаем первую размерность массива
			слово_размер = сам.поле.база.слова_секции[0]
			размер = int(слово_размер.Проверить())
			сам.поле.массив_размерность[len(сам.поле.массив_размерность)] = размер
			сам.поле.база.СловаСекции_Обрезать()
			# есть ли ещё размерности
			слово_запятая = сам.поле.база.слова_секции[0]
			запятая = слово_запятая.Проверить()
			if запятая == ",": # есть ещё размерности
				сам.поле.база.СловаСекции_Обрезать()
				Размерности_Получить()

		слово_род = сам.поле.база.слова_секции[0]
		if слово_род.строка == "ARRAY":
			сам.поле.род = тРод.сМассив
			сам.поле.Тип_Уст("ARRAY")
			сам.поле.база.СловаСекции_Обрезать() # Обрезает "ARRAY"
			Размерности_Получить()
			# сейчас слово должно быть OF
			слово_из = сам.поле.база.слова_секции[0]
			if слово_из.строка != "OF":
				стрОш = "Пропущено OF в определении массива? слово=" + слово_из.стрИсх
				сам.ош.Исх("__Массив_Проверить()", стрОш)
				return
			сам.поле.база.СловаСекции_Обрезать()
			# TODO: здесь надо убедиться, что имя типа элемента массива -- допустимое имя.
			сам.поле.массив_тип = сам.поле.база.Элемент_Проверить(сам)
