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

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

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

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

Сообщение Mirage » 21.11.2013 16:22:35

Как узнать что следует использовать? id или symid?
Еще есть не совсем понятные теги - undefined и formal. На них ссылаются некоторые типы. Как их интерпретировать?
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

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

Сообщение Юра » 21.11.2013 17:11:55

Если ссылка идет по id, то и искать нужно по id. С symid аналогично.
undefined и formal - это нужно смотреть конкретное объявление в исходнике. Насколько я поню, formal это переменная без указания типа procedure Func(const Param).
undefined - не могу сходу сказать.
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

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

Сообщение Mirage » 21.11.2013 17:53:38

Просто пока не встречал ссылок с symid.
undefined и formal первыми идут в system.ppu.
Код: Выделить всё
<interface>
    <undefined>
      <name>$undefined</name>
      <id>0</id>
      <symid>101</symid>
      <pos>
        <file>3</file>
        <line>87</line>
        <col>1</col>
      </pos>
    </undefined>
    <formal>
      <name>$formal</name>
      <id>1</id>
      <symid>102</symid>
      <pos>
        <file>3</file>
        <line>87</line>
        <col>1</col>
      </pos>
      <istyped>0</istyped>
    </formal>
    <formal>
      <name>$typedformal</name>
      <id>2</id>
      <symid>103</symid>
      <pos>
        <file>3</file>
        <line>87</line>
        <col>1</col>
      </pos>
      <istyped>1</istyped>
    </formal>
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

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

Сообщение Юра » 21.11.2013 18:00:09

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

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

Сообщение Mirage » 24.11.2013 16:42:39

Есть свойство:
Код: Выделить всё
property Items[Index: Integer]: Pointer read Get write Put; default;

В XML:
Код: Выделить всё
<prop>
          <name>Items</name>
          <symid>136</symid>
          <pos>
            <line>84</line>
            <col>14</col>
          </pos>
          <proptype>
            <unit>1</unit>
            <id>34</id>
          </proptype>
          <getter>
            <id>6</id>
          </getter>
          <setter>
            <id>10</id>
          </setter>
          <params>
            <param>
              <name>Index</name>
              <symid>137</symid>
              <pos>
                <line>84</line>
                <col>20</col>
              </pos>
              <vartype>
                <unit>1</unit>
                <id>9</id>
              </vartype>
            </param>
          </params>
        </prop>

Как узнать, что оно default?

Добавлено спустя 12 минут 44 секунды:
Еще модуль System заканчивается так:
Код: Выделить всё
<prop>
            <name>cmdline</name>
            <symid>3937</symid>
            <pos>
                <line>37</line>
                <col>10</col>
            </pos>
            <proptype>
                <id>57</id>
            </proptype>
            <getter>
                <id>1398</id>
            </getter>
            <setter></setter>
        </prop>
    </interface>
</unit>

Объявление свойства не в классе разве может быть?
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

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

Сообщение Юра » 25.11.2013 14:48:21

default поправлю.

Да, в FPC можно объявлять проперти вне классов. Что и сделано в модуле system для cmdline.
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

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

Сообщение Mirage » 01.12.2013 13:50:36

ppudump при попытке обработать файл units/i386-linux/rtl/unicodedata.ppu вместо XML выдает такое много раз:
!! Error: Deref len < 1
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

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

Сообщение Mirage » 06.12.2013 11:00:53

Еще пару багов нашёл.
Код:
Код: Выделить всё
type r1 = record
            r1: array[0..444] of record r1: set of char; end;
        end;

XML:
Код: Выделить всё
<rec>
      <name>r1</name>
      <id>5</id>
      <symid>6</symid>
      <pos>
        <line>12</line>
        <col>14</col>
      </pos>
      <size>14240</size>
      <fields>
        <array>
          <id>6</id>
          <eltype>
            <id>7</id>
          </eltype>
          <rangetype>
            <unit>0</unit>
            <id>7</id>
          </rangetype>
          <low>0</low>
          <high>444</high>
        </array>
        <field>
          <name>r1</name>
          <symid>7</symid>
          <pos>
            <line>13</line>
            <col>13</col>
          </pos>
          <vartype>
            <id>6</id>
          </vartype>
        </field>
      </fields>
    </rec>

При этом тега с <id>7</id>, на который ссылается eltype в XML нет.
Проблема похожа на ту, что выше, только проявляется с еще одним уровнем вложенности.
еще:
Код: Выделить всё
procedure pa(a1: array of Byte);

XML:
Код: Выделить всё
<proc>
      <name>pa</name>
      <id>9</id>
      <symid>9</symid>
      <pos>
        <line>16</line>
        <col>15</col>
      </pos>
      <options>
        <value>procedure</value>
      </options>
      <rettype>
        <unit>0</unit>
        <id>3</id>
      </rettype>
      <params>
        <array>
          <id>10</id>
          <eltype>
            <unit>0</unit>
            <id>4</id>
          </eltype>
          <rangetype>
            <unit>0</unit>
            <id>9</id>
          </rangetype>
          <low>0</low>
          <high>-1</high>
        </array>
        <param>
          <name>a1</name>
          <symid>10</symid>
          <pos>
            <line>16</line>
            <col>18</col>
          </pos>
          <vartype>
            <id>10</id>
          </vartype>
        </param>
      </params>
    </proc>

По идее, должно быть указание на динамичность массива, как при обычном объявлении.
По крайней мере при парсинге так удобнее, чтоб не держать контекст.

ppudump из SVN ревизии 26014.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

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

Сообщение Sergei I. Gorelkin » 06.12.2013 11:42:30

В последнем примере используется не динамический, а открытый массив ("обычный" массив с диапазоном 0..-1). У них одинаковый синтаксис, что вечно вызывает путаницу. Тем не менее, ppu правильный.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

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

Сообщение Mirage » 07.12.2013 12:51:32

Я понимаю разницу, но все же определять это по тому, что верхний предел -1 мне кажется не правильным. Тем более, что у динамических массивов этот предел тоже -1. Но есть еще тег option/dynamic. Тут тоже не помешал бы такой тег. Например option/open.
Консистентности выходному формату ppudump сильно не достаёт. Парсить сложно. Особенно SAX'ом.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

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

Сообщение Mirage » 22.12.2013 21:46:38

Модуль Classes, класс TFPList. Есть функция:
function IndexOfItem(Item: Pointer; Direction: TDirection): Integer;
В XML выглядит так:
Код: Выделить всё
<proc>
          <name>IndexOfItem</name>
          <id>89</id>
          <symid>298</symid>
          <pos>
            <file>1</file>
            <line>257</line>
            <col>14</col>
          </pos>
          <options>
            <value>function</value>
          </options>
          <rettype>
            <unit>0</unit>
            <id>9</id>
          </rettype>
          <params>
            <param>
              <name>Item</name>
              <symid>299</symid>
              <pos>
                <file>1</file>
                <line>257</line>
                <col>26</col>
              </pos>
              <vartype>
                <unit>0</unit>
                <id>34</id>
              </vartype>
            </param>
            <param>
              <name>Direction</name>
              <symid>300</symid>
              <pos>
                <file>1</file>
                <line>257</line>
                <col>41</col>
              </pos>
              <vartype>
                <id>75</id>
              </vartype>
            </param>
          </params>
        </proc>

Т.е. ссылается на TDirection как на id=75.
Объявление TDirection выглядит так:
Код: Выделить всё
<type>
          <name>TDirection</name>
          <symid>259</symid>
          <pos>
            <file>1</file>
            <line>244</line>
            <col>20</col>
          </pos>
          <ref>
            <id>75</id>
          </ref>
        </type>

У него id не 75.
Объявление с id=75 есть, оно выглядит так:
Код: Выделить всё
<enum>
      <id>75</id>
      <symid>259</symid>
      <low>0</low>
      <high>1</high>
      <size>4</size>
      <elements>
        <const>
          <name>FromBeginning</name>
          <symid>260</symid>
          <pos>
            <file>1</file>
            <line>244</line>
            <col>21</col>
          </pos>
          <valtype>int</valtype>
          <value>0</value>
        </const>
        <const>
          <name>FromEnd</name>
          <symid>262</symid>
          <pos>
            <file>1</file>
            <line>244</line>
            <col>36</col>
          </pos>
          <valtype>int</valtype>
          <value>1</value>
        </const>
      </elements>
    </enum>

По идее, параметр функции должен ссылаться на объявление типа TDirection, а не на сам тип, на который ссылается объявление TDirection.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

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

Сообщение Юра » 23.12.2013 18:56:23

Mirage,
поправил default,
поправил !! Error: Deref len < 1
поправил TDirection

Добавлено спустя 21 час 35 минут 20 секунд:
Испавил и этот случай:
Код: Выделить всё
type r1 = record
            r1: array[0..444] of record r1: set of char; end;
        end;
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

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

Сообщение Mirage » 24.12.2013 21:57:38

Спасибо.
Изменения доступны пока в SVN только? В какой ревизии?
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

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

Сообщение Юра » 25.12.2013 13:12:52

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

Пред.

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

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

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

Рейтинг@Mail.ru