Формат .ppu файлов
Модератор: Модераторы
Если ссылка идет по id, то и искать нужно по id. С symid аналогично.
undefined и formal - это нужно смотреть конкретное объявление в исходнике. Насколько я поню, formal это переменная без указания типа procedure Func(const Param).
undefined - не могу сходу сказать.
undefined и formal - это нужно смотреть конкретное объявление в исходнике. Насколько я поню, formal это переменная без указания типа procedure Func(const Param).
undefined - не могу сходу сказать.
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Просто пока не встречал ссылок с symid.
undefined и formal первыми идут в system.ppu.
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
- Контактная информация:
Есть свойство:
В XML:
Как узнать, что оно default?
Добавлено спустя 12 минут 44 секунды:
Еще модуль System заканчивается так:
Объявление свойства не в классе разве может быть?
Код: Выделить всё
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>Объявление свойства не в классе разве может быть?
default поправлю.
Да, в FPC можно объявлять проперти вне классов. Что и сделано в модуле system для cmdline.
Да, в FPC можно объявлять проперти вне классов. Что и сделано в модуле system для cmdline.
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Еще пару багов нашёл.
Код:
XML:
При этом тега с <id>7</id>, на который ссылается eltype в XML нет.
Проблема похожа на ту, что выше, только проявляется с еще одним уровнем вложенности.
еще:
XML:
По идее, должно быть указание на динамичность массива, как при обычном объявлении.
По крайней мере при парсинге так удобнее, чтоб не держать контекст.
ppudump из SVN ревизии 26014.
Код:
Код: Выделить всё
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.
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
В последнем примере используется не динамический, а открытый массив ("обычный" массив с диапазоном 0..-1). У них одинаковый синтаксис, что вечно вызывает путаницу. Тем не менее, ppu правильный.
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Я понимаю разницу, но все же определять это по тому, что верхний предел -1 мне кажется не правильным. Тем более, что у динамических массивов этот предел тоже -1. Но есть еще тег option/dynamic. Тут тоже не помешал бы такой тег. Например option/open.
Консистентности выходному формату ppudump сильно не достаёт. Парсить сложно. Особенно SAX'ом.
Консистентности выходному формату ppudump сильно не достаёт. Парсить сложно. Особенно SAX'ом.
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Модуль Classes, класс TFPList. Есть функция:
function IndexOfItem(Item: Pointer; Direction: TDirection): Integer;
В XML выглядит так:
Т.е. ссылается на TDirection как на id=75.
Объявление TDirection выглядит так:
У него id не 75.
Объявление с id=75 есть, оно выглядит так:
По идее, параметр функции должен ссылаться на объявление типа TDirection, а не на сам тип, на который ссылается объявление TDirection.
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,
поправил default,
поправил !! Error: Deref len < 1
поправил TDirection
Добавлено спустя 21 час 35 минут 20 секунд:
Испавил и этот случай:
поправил default,
поправил !! Error: Deref len < 1
поправил TDirection
Добавлено спустя 21 час 35 минут 20 секунд:
Испавил и этот случай:
Код: Выделить всё
type r1 = record
r1: array[0..444] of record r1: set of char; end;
end;Да, изменения только в svn. r26277.
