Mattias Gaertner schrieb:

trying to generate the procedure event code, the unit "ipc" is open and
the error "/usr/share/fpcsrc/rtl/unix/ipc.pp(119,9) Error: expected
end., but seq found" is displayed in the errors window

This error message looks correct.


              {$if sizeof(kernel_mode_t)<  4}
[114]            __pad1    : array[1..4-sizeof(mode_t)];

This syntax either is illegal or should be added to the parser.


svn trunk can now parse it.
I somehow doubt this. It seems more like the condition there is never true and thus the omition was never noticed.

Right, it looks like a lurking bug to me.

Once the source code is fixed, what doesn't look complicated to me, and doesn't break anything, the problem has gone away. A dedicated "align" directive instead of the explicit alignment had been helpful, too.

The parser also may treat the "of <type>" as optional. This also doesn't look hard to implement, and may be useful in other situations (while source code is edited).


At least according to the
compiler's code there MUST be a "of" after an array. So it might have been better to investigate why "sizeof(kernel_mode_t) < 4" is evaluated to true by the IDE.

kernel_mode_t is defined in another unit.
The size_of requires parsing like a compiler, that means reading all
ppu files first and resolving every type on its way. And it requires
implementation details of the compiler.
I guess only the compiler can reliably resolve size_of.
+1

Conditional compilation either requires the *correct* settings, required to evaluate every condition, or silent handling of problems resulting from inproperly included/excluded parts.

Same for declared.

Maybe some heuristics and/or defines can be added to help codetools
parsing such $IFs.

This IMO would open up a can of worms. Adding the full compiler capabilites to general parsers, including e.g. machine and OS targets, is near impossible. The related compiler units are not usable outside the compiler, and every attempt to create parallel units will end up in a maintenance nightmare. Also much time will be spent, and memory will be occupied, when all used units have to be parsed before the currently active unit.

In the ToPas C-to-Pascal converter I had not only to parse all include files for an specific compiler, but also all effective compiler defines (built-in or configurable) had to be known. This made the proper configuration for a translation very complicated, and the tool unusable for people not very familiar with a specific compiler.

DoDi


--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to