On Fri, 18 Jun 2010, Nicolas Palix wrote: > On Friday 18 June 2010 13:38:35 Eric Noulard wrote: > > Hi all, > > > > I do have a problem for writing a python scripts in a cocci semantic patch. > > I don't really know if it's a "feature" or a bug, the context is the > > following. > > > > A cocci file (rule1and2.cocci) contains several rules (say 2 for the > > example), > > and a single python script (at the end). > > > > The python script is using matches of the rules: > > > > @script:python@ > > rule1_matches << rule_1.p; > > rule2_matches << rule_2.p; > > > > @@ > > if (len(rule1_matches)>0): > > for m in rule1_matches: > > print "File <%s>, line %s" % (m.file,m.line) > > if (len(rule2_matches)>0): > > for m in rule1_matches: > > print "File <%s>, line %s" % (m.file,m.line) > > > > > > it looks like the script is executed iff both rules (1 & 2) matches. > > > > Find attached the files to reproduce the "problem": > > > > Commands giving no output > > spatch -sp rule1and2.cocci -no_show_diff 1-1-2.c > > spatch -sp rule1and2.cocci -no_show_diff 1-1-1.c > > > > Command giving output > > spatch -sp rule1and2.cocci -no_show_diff 1-1-1.c 1-1-2.c > > > > Is this an expected behavior? > > Yes. The python code depends on rule_1.p AND rule_2.p. Thus, the python code > is only invoked if both rule have matched.
In general, python code is only run if all variables are bound. You can even exploit this to be sure that a variable is bound, even if you don't want to use its value. On the other hand, this is not the case for smpl rules. There a variable only has to be bound if it is needed for a given match. An unbound variable causes a local failure, just like trying to match two things that are different, but the whole pattern could match in another way, if the unbound variable is in a branch of a disjunction. julia _______________________________________________ Cocci mailing list [email protected] http://lists.diku.dk/mailman/listinfo/cocci (Web access from inside DIKUs LAN only)
