[fpc-devel] FPDoc imports

Michael Van Canneyt michael at freepascal.org
Wed Feb 1 21:09:49 CET 2012



On Wed, 1 Feb 2012, Hans-Peter Diettrich wrote:

> michael.vancanneyt at wisa.be schrieb:
>
>> Why do you need this ? You make it quite complicated.
>> 
>> All you need is a FindModule(Const AName,AFileHint : String) : TPasModule 
>> call in TPasTreeContainer which must be overridden in a descendent (such as 
>> TFPDocEngine). The default implementation returns nil.
>> 
>> This call can search the module list if it has one.
>
> But it does not have such a list :-(

It does not need it. A descendent that needs recursive parsing needs it.

Likewise, the FindElement returns nil. 
Only the FPDoc engine implementation contains a search.

>
>> If it doesn't find it, it can then decide to parse it anyway and return the 
>> just-parsed instance.
>
> This requires a list of the Inputs (compiler parameters), which only exists 
> in TFPDocCreator. It also requires a list of units being or having been 
> parsed. When a parser is started for a new unit, it doesn't return the 
> created TPasModule until finished, so that TPasTreeContainer cannot tell 
> whether FindModule addresses a module that has not been parsed yet, or one 
> that already is being parsed, but not finished.

Correct. This needs to be done by descendants.

TPasTreeContainer itself and the parser class just need the hook.

>> All the parser needs to do is call FindModule whenever it encounters a unit
>> in a uses clause; The rest will happen then automagically.
>
> I found it much more complicated, after a look at the existing code.

Well, It took me about 15 lines to implement it in dglobals.pas of fpdoc.
I moved one function out of fpdocoptsxml to mkfpdoc to split the input line.

First tests work fine. See revision 20213.

Michael.



More information about the fpc-devel mailing list