Формат .ppu файлов

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Формат .ppu файлов

Сообщение Mirage » 03.09.2013 21:42:55

Хочу сделать подсветку необъявленных идентификаторов.
Но т.к. многие идентификаторы объявлены в системных модулях и не всегда подключены их исходники, то надо извлекать информацию из скомпилированных модулей.
Есть где-нибудь описание формата ppu?
Пока нашел только описание утилиты ppudump.
Для dcu такое описание даже нашел.:)
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Формат .ppu файлов

Сообщение Юра » 04.09.2013 00:44:50

Формат ppu очень внутренний и постоянно меняется. В FPC 2.7.1 я добавил в ppudump вывод информации в JSON или XML в стабильном формате. До этого ppudump выводил информацию в "вольной текстовой форме". Вот этот JSON или XML можно и использовать.
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Re: Формат .ppu файлов

Сообщение Mirage » 04.09.2013 01:31:12

В XML то, что надо, спасибо.
Только вот ppudump, лежащий в директории bin<target> от FPC 2.7.1 пишет, что он
PPU-Analyser Version 2.5.1
И опций для вывода в JSON или XML не заявляет.
Как заставить его выводить в XML и есть ли описание формата вывода?
А также, могу ли я рассчитывать на наличие этой утилиты в директории bin/<target>, т.е. рядом с компилятором?
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Формат .ppu файлов

Сообщение Vadim » 04.09.2013 11:30:58

Mirage
А
ppudump -h

ничего не пишет?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Формат .ppu файлов

Сообщение Mirage » 04.09.2013 12:37:01

Vadim: Про XML или JSON ничего.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Формат .ppu файлов

Сообщение Юра » 04.09.2013 17:25:49

Mirage писал(а):В XML то, что надо, спасибо.
Только вот ppudump, лежащий в директории bin<target> от FPC 2.7.1 пишет, что он
PPU-Analyser Version 2.5.1
И опций для вывода в JSON или XML не заявляет.
Как заставить его выводить в XML и есть ли описание формата вывода?
А также, могу ли я рассчитывать на наличие этой утилиты в директории bin/<target>, т.е. рядом с компилятором?

Значит FPC 2.7.1 старый. JSON и XML был добавлен в конце мая. ppudump всегда поставляется вместе с компилятором и находится в bin/<target>.
Описания JSON или XML нет, но там основное и так понятно. Если что-то не будет понятно, то подскажу.
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Re: Формат .ppu файлов

Сообщение Mirage » 04.09.2013 22:09:26

Да, вытянул новый, там есть.
По формату такой вопрос:
В интерфейсе модуля объявлен тип-запись, одно из полей которой объявлено так:
Код: Выделить всё
NestedExceptionAddresses: array of Pointer;

А в XML оно выглядит так:
Код: Выделить всё
        <field>
          <name>NestedExceptionAddresses</name>
          <symid>24</symid>
          <pos>
            <line>43</line>
            <col>7</col>
          </pos>
          <vartype>
            <id>4</id>
          </vartype>
        </field>

Причем тегов с id=4 в выдаче нет. Настройка выдачи -Vhisd.
Как по этому понять, какой тип у записи?
Еще идентификация типа таким образом:
Код: Выделить всё
          <vartype>
            <unit>1</unit>
            <id>14</id>
          </vartype>

неудобна для дальнейшей работы. ppu с этим юнитом номер 1 вообще может не быть, тогда тип никак не узнать.
Может добавить еще текстовый идентификатор типа вида <модуль>.<тип>?
Да, что такое symid?
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Формат .ppu файлов

Сообщение Юра » 05.09.2013 01:07:44

Mirage писал(а):Причем тегов с id=4 в выдаче нет. Настройка выдачи -Vhisd.
Как по этому понять, какой тип у записи?

Это баг, описание массива с id=4 является локальным для этой записи и безимянным. Из-за безымянности он и не попал в вывод. Поправлю, когда будет время.
Mirage писал(а):Еще идентификация типа таким образом:
Код: Выделить всё
              <vartype>
                <unit>1</unit>
                <id>14</id>
              </vartype>
неудобна для дальнейшей работы. ppu с этим юнитом номер 1 вообще может не быть, тогда тип никак не узнать.
Может добавить еще текстовый идентификатор типа вида <модуль>.<тип>?

Все описание типа находится только в юните с номером 1, поэтому без чтения этого юнита никак не определить, на что именно идет ссылка.
Mirage писал(а):Да, что такое symid?

Есть два варианта идентификации id и symid. У различных элементов встречается либо то, либо другое, либо оба вместе.
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Re: Формат .ppu файлов

Сообщение Юра » 08.10.2013 00:16:46

Баг с отсутствующим описанием массива исправил в транке в r25716.
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Re: Формат .ppu файлов

Сообщение Mirage » 08.10.2013 16:12:15

Спасибо. А когда это в релиз попадет?
Нельзя же требовать от пользователей чтобы они из транка качали что-то.:)
Кстати, таких замечательных штук как SizeOf() или writeln() ни в модуле system, ни в objfpc не наблюдается.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Формат .ppu файлов

Сообщение Юра » 08.10.2013 18:35:53

В релиз это попадет только в следующей мажорной версии 2.8. А чтобы в релиз оно попало в рабочем виде нужно тестить сейчас и репортить баги :)
SizeOf() и writeln() - это "compiler magic". Они реализованы в самом компиляторе, а не в rtl. В rtl могут содержаться только хелперы для них.
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Re: Формат .ppu файлов

Сообщение Mirage » 08.10.2013 21:35:47

А когда релиз 2.8 известно? ;)
Плотно эту утилиту использовать и соот-но тестировать планирую на след. неделе.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Формат .ppu файлов

Сообщение Юра » 08.10.2013 23:16:12

Когда релиз не известно пока.
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Re: Формат .ppu файлов

Сообщение Mirage » 20.11.2013 21:26:37

Занимаюсь разбором выдачи ppudump.
Вроде работает.:)
Есть тег uses, где перечисляются юниты, есть тег units, где тоже перечисляются юниты, причем не все.
Вопрос 1: зачем тег units?
Вопрос 2: в тегах вида
Код: Выделить всё
<eltype>
  <unit>0</unit>
  <id>9</id>
</eltype>

0 это индекс юнита? В каком теге смотреть? uses иди units?
Вопрос 3: symid для чего-то все-таки нужен?
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Формат .ppu файлов

Сообщение Юра » 21.11.2013 12:47:15

Uses - это юниты перечисленные в uses исходного файла. units - это юниты, на которые есть реальные ссылки из этого файла.
<unit>0</unit> - это индекс юнита (0) в списке units.

Про symid я уже писал:
Есть два варианта идентификации элемента - id и symid. У различных элементов встречается либо то, либо другое, либо оба вместе.
Т.е. ссылка на другой элемент может быть как по id так и symid. Такая уж структура ppu.
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru
cron