The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

B.4 База данных

B.4 База данных

Предыдущая  Содержание  Следующая V*D*V

Для файла описания класса мы сохраняем отдельные строки, чтобы можно было скопировать их в файл представления или интерфейса. Мы должны помнить строки, где и какие классы и метаклассы были определены. Последняя информация также требуется, чтобы сгенерировать подходящии инициализации. Поэтому мы создаём три массива: Pub[desc, n] содержит строки для интерфейсного файла, Prot[desc, n] содержит строки для файла представления, а в Dcl[desc, n] записываются только определения классов и метаклассов. Для каждого описания имя desc с индексом 0 хранит количество строк, а сами строки сохраняются с помощью индексов от 1 и выше. Dcl[desc, n] точно существует, если мы считали описание для desc. Строки хранятся неизменными, мы заменяем только полное определение класса строкой, начинающейся с % и содержащей имя метакласса, если таковой имеется, и затем имя класса.

Для класса наша база данных содержит имя его мета- и суперкласса, компоненты его представления и имена его методов. Мы используем в общей сложности шесть массивов: Meta[class] содержит имя метакласса, Super[class] содержит имя суперкласса, Struct[class, n] является списком индексов деклараций компонентов, а Static[class, n], Dynamic class, n] и Class[class, n] содержат списки имён различных методов. Снова, индекс 0 содержит длину списка, а элементы списка сохраняются с помощью индексов от 1 и выше. Class[class, 0] точно существует, если мы знаем, что у класса есть имя класса или метакласса.

Для метода мы должны помнить его имя, результат, список параметров, способ компоновки и тэг для метода respondsTo(). Эта информация представлена с помощью следующих шести массивов: Method[method] хранит первый индекс оператора объявления; он описывает имя метода и тип результата. Далее с увеличением индекса следуют другие операторы деклараций; Nparm[method] хранит количество параметров. Должен быть по меньшей мере параметр self. Var[method] хранит истину, если метод method разрешает переменное количество параметров, Linkage[method] хранит одно из значений %, %- или %+, и записи о том, в какой секции компоновки был объявлен метод. Owner[method] важен для статически компонуемых методов; он содержит класс, которому принадлежит метод, то есть параметр метода класса self. Наконец, Tag[method] записывает тэг метода по умолчанию для вызова respondsTo(), а Tag[method, class] содержит реальный тэг метода method для класса class.

Компоненты представления класса, имена методов и параметры описываются в виде индексов в список операторов деклараций. Список представлен четырьмя массивами: Name[index] является именем декларации, Const[index] содержит префикс const оператора объявления, если таковой имеется. As[index] хранит истину, если в операторе объявления использовался символ @, то есть если оператор декларации определяет ссылку на объект. В этом случае Type[index] либо имя класса, либо пуст, если объект находится в классе владельца метода. Если As[index] ложь, Type[index] является частью типа оператора декларации.

Наконец, если установлена глобальная переменная lines, база данных содержит ещё четыре массива: Filename[name] и Fnr[name] указывают, где были описаны класс или метод, SFilename[name] и SFnr[name] указывают, где компонент класса был объявлен. Это используется в report.awk, чтобы реализовать штампы #line.

 

Предыдущая  Содержание  Следующая