On Mon, 9 May 2011, Derek M Jones wrote:

> Julia,
> 
> Thanks for the -use_cache suggestion.  I will try it
> out on the next script.
> 
> > You can try the -profile option to see what is taking a lot of time.
> 
> The amount of time taken is not excessive, probably only 3'ish times
> slower than what it would have taken to compile the source.
> 
> > I can take a look at your semantic patch as well (I didn't see it on the
> > blog page).
> 
> I think your usual generosity would start to waver under the load
> of 100 or so scripts.
> 
> I did wonder about what information Coccinelle might be able to
> provide for 'free', ie information it always collects when
> processing code but does not provide a means to access.
> For instance, the number of definitions and statements in a
> function definition,

It's not clear what this means, because statements can be nested.

> or the code matched by ... .

It doesn't know this.  The implementation of ... keeps track of what is 
reachable from what, but not how it is reachable.  How it is reachable 
would be difficult to calculate in the presence of loops.  It would be 
conceptually possible to keep track of the set of control-flow graph nodes 
matched, but that is not currently expressible.

> Taking Coccinelle down this path means thinking about it more
> as an information gathering tool than a transformation tool.
> 
> The obvious script has the problem that it does not supply
> parameter number information:

You just need a parameter list metavariable:

parameter list[n] ps;

Afterwards, you can use either n or ps.  ps can be empty/n can be 0.

When you inherit n into python it is a string (although when you inherit n 
into ocaml, it is an integer).

julia

> @ fn_p_any @
> type ret_T, pany_T;
> identifier fn, p_any;
> @@
> 
> ret_T fn(..., pany_T p_any, ...)
> {
> ... when != p_any
> }
> 
> @script:python @
> param_any << fn_p_any.p_any;
> func << fn_p_any.fn;
> @@
> print "unused", func, param_any
> 
> so I wrote lots of patterns like:
> 
> @ fn_no_p1 @
> type ret_T, p1_T;
> identifier fn, p1;
> @@
> 
> ret_T fn(p1_T p1)
> {
> ... when != p1
> }
> 
> @script:python @
> param_1 << fn_no_p1.p1;
> func << fn_no_p1.fn;
> @@
> print "1_1", func, param_1
> 
> to match particular instances.
> 
> >
> > julia
> >
> >
> > > Trying out a new idea with something that takes 300+ hours to run is a bit
> > > impractical.
> > >
> > > Does anybody have any thoughts on:
> > >
> > >     o converting the source to some intermediate form that will
> > > speed up Coccinelle processing,
> > >
> > >     o using Coccinelle in the cloud, eg Amazon,
> > >
> > >     o speeding up Coccinelle.
> > >
> > > --
> > > Derek M. Jones                         tel: +44 (0) 1252 520 667
> > > Knowledge Software Ltd                 mailto:[email protected]
> > > Source code analysis                   http://www.knosof.co.uk
> > > _______________________________________________
> > > Cocci mailing list
> > > [email protected]
> > > http://lists.diku.dk/mailman/listinfo/cocci
> > > (Web access from inside DIKUs LAN only)
> > >
> > >
> >
> 
> -- 
> Derek M. Jones                         tel: +44 (0) 1252 520 667
> Knowledge Software Ltd                 mailto:[email protected]
> Source code analysis                   http://www.knosof.co.uk
> _______________________________________________
> Cocci mailing list
> [email protected]
> http://lists.diku.dk/mailman/listinfo/cocci
> (Web access from inside DIKUs LAN only)
> 
_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)

Reply via email to