Excerpts from Martin Jambon's message of Thu Apr 17 21:19:44 +0200 2008: > On Thu, 17 Apr 2008, Nicolas Pouillard wrote: > > > Excerpts from Martin Jambon's message of Thu Apr 17 17:25:20 +0200 2008: > >> On Thu, 17 Apr 2008, Nicolas Pouillard wrote: > >> > >>> Excerpts from Martin Jambon's message of Thu Apr 17 16:17:15 +0200 2008: > >>>> I started from the wiki page describing how to use AST filters: > >>>> http://brion.inria.fr/gallium/index.php/Camlp4MapGenerator > >>>> > >>>> The example doesn't work in the toplevel (3.10.1), although it works > >>>> otherwise. How to make it work? > >>> > >>> By patching the camlp4 sources :) > >> > >> Is it a bug that has to be fixed? > > > > It could be seen as a bug, but the behavior is not completely clear, since > > applying the filters to each toplevel phrase is different from calling them > > only once on the whole module implem. > > Thanks. > I'll look at the code for a better understanding. > > I think that the 2 following cases are pretty common: > > a. inserting some constant code once at the beginning of the file (or > module), such as "open Foo" > b. replacing a str_item by other str_items > > Both were problematic in camlp4 3.09, requiring some fragile or > undocumented hacks. It would be extremely useful to have a clean solution > to these problems. > > It seems to me that both (a) and (b) could be implemented and Currently both can be implemented on a per file basis, moreover they are implemented by using the *same* registering construct. > made available in the toplevel without theoretical difficulties. If one don't add new registration functions the behavior will be odd. > I can imagine a third situation consisting in performing a full > file/module analysis and inserting something at the beginning or at the > end. That also could be implemented, although it would clearly not be > available in the toplevel. So in the toplevel, filters registered using register_str_item_filter will be called once on an empty phrase. And a new function register_toplevel_phrase_filter will gather functions to be called on each toplevel phrase. > >> If it's already fixed, which version? > > > > Not already fixed. -- Nicolas Pouillard aka Ertai