let term_visible (fm,kf) t =
let module M = struct exception Invisible end in
let visitor =
object
inherit Visitor.frama_c_inplace
method vlogic_var_use v =
match v.lv_origin with
None -> DoChildren
| Some v when v.vformal ->
(try
if not
(key_visible "logic_var_visible" fm
(PdgIndex.Key.param_key
(Kernel_function.get_formal_position v kf + 1)
v))
then raise M.Invisible
else DoChildren
with Not_found ->
Sparecode_params.fatal
"%a is a formal parameter but not of the current kernel function %a. Aborting because of inconsistent state."
!Ast_printer.d_var v !Ast_printer.d_var
(Kernel_function.get_vi kf)
)
| Some v when not v.vglob ->
if
not
(key_visible "logic_var_visible" fm
(PdgIndex.Key.decl_var_key v))
then raise M.Invisible
else DoChildren
| Some _ -> DoChildren
end
in
try
ignore (Visitor.visitFramacTerm visitor t); true
with M.Invisible -> false