Hi,
On Mon, Mar 15, 2010 at 05:01:09PM -0600, ThanhVu (Vu) Nguyen wrote:
> Hi, I am trying to insert a function call "fun_dummy" at each branch of an
> if-else statement but facing some problems. Hope someone can help. TIA
> [...]
> Below lists my code, the problem with this is that it only gives me
> foo_dummy(b,100) and doesn't give foo_dummy(a,10) -- I suspect this is due
> to
> the way I do the visitor
>
>
> (*** instrumenter ***)
> let dummy = "dummy"
> let dummy_ctr = ref 0
>
> let dummy_foo_va fn =
> incr dummy_ctr;
> makeVarinfo true (fn^"_"^dummy^soi(!dummy_ctr)) (TVoid [])
>
>
> let dummy_foo fn = Lval((Var (dummy_foo_va fn)),nos)
>
> class instrumenter()= object
> inherit nopCilVisitor
> val funname = ref ""
> val args = ref []
> val enter_if = ref false
Use mutable instead of ref here:
val mutable funname = ""
val mutable args = []
val mutable enter_if = false
> method vfunc fd = (
> funname := fd.svar.vname;
> debug "Entering function \'%s\':\n" !funname;
> DoChildren
> )
> method vstmt s =
I would rather use ChangeDoChildrenPost and add the statements here
(thus removing the vblock method).
match s.skind with
|If(BinOp(_,e1,e2,_),_,_,_)->
debug "If statement encounter!\n";
enter_if := true;
ChangeDoChildrenPost(s, fun s -> match s.skind with
| If(op,b1,b2,loc) ->
let x = ... e1 ... in (* build whatever you want depending on *)
let y = ... e2 ... in (* e1 and e2. *)
If(op, { b1 with bstmts = ... }, (* do whatever you want here *)
{ b2 with bstmts = ... }, (* same here *)
loc)
| _ -> E.s (E.bug "unexpected statement returned")
)
(* You problem was here: you need to go down into other statements, not
skip them: *)
|_-> DoChildren
> end
Regards,
--
Gabriel Kerneis
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
CIL-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/cil-users