-let get_constants rules neg_pos_vars =
- if not !Flag.use_glimpse
- then None
- else
- let (info,_,_,_) =
- List.fold_left
- (function (rest_info,in_plus,env,locals(*dom of env*)) ->
- function
- (Ast.ScriptRule (_,deps,mv,_),_) ->
- let extra_deps =
- List.fold_left
- (function prev ->
- function (_,(rule,_)) -> Ast.AndDep (Ast.Dep rule,prev))
- deps mv in
- (match dependencies env extra_deps with
- False -> (rest_info, in_plus, env, locals)
- | dependencies ->
- (build_or dependencies rest_info, in_plus, env, locals))
- | (Ast.InitialScriptRule (_,_),_)
- | (Ast.FinalScriptRule (_,_),_) -> (rest_info,in_plus,env,locals)
- | (Ast.CocciRule (nm,(dep,_,_),cur,_,_),neg_pos_vars) ->
- let (cur_info,cur_plus) =
- rule_fn cur in_plus ((nm,True)::env) neg_pos_vars in
- if List.for_all all_context.V.combiner_top_level cur
- then (rest_info,cur_plus,(nm,cur_info)::env,nm::locals)
- else
+let run rules neg_pos_vars =
+ let (info,_,_,_) =
+ List.fold_left
+ (function (rest_info,in_plus,env,locals(*dom of env*)) ->
+ function
+ (Ast.ScriptRule (nm,_,deps,mv,_,_),_) ->
+ let extra_deps =
+ List.fold_left
+ (function prev ->
+ function (_,(rule,_),_) ->
+ if rule = "virtual"
+ then prev
+ else Ast.AndDep (Ast.Dep rule,prev))
+ deps mv in
+ (match dependencies env extra_deps with
+ False -> (rest_info, in_plus, (nm,True)::env, nm::locals)
+ | dependencies ->
+ (build_or dependencies rest_info, in_plus, env, locals))
+ | (Ast.InitialScriptRule (_,_,deps,_),_)
+ | (Ast.FinalScriptRule (_,_,deps,_),_) ->
+ (* initialize and finalize dependencies are irrelevant to
+ get_constants *)
+ (rest_info, in_plus, env, locals)
+ | (Ast.CocciRule (nm,(dep,_,_),cur,_,_),neg_pos_vars) ->
+ let (cur_info,cur_plus) =
+ rule_fn cur in_plus ((nm,True)::env) neg_pos_vars in
+ (match dependencies env dep with
+ False -> (rest_info,cur_plus,env,locals)
+ | dependencies ->
+ if List.for_all all_context.V.combiner_top_level cur
+ then
+ let cur_info = build_and dependencies cur_info in
+ (rest_info,cur_plus,(nm,cur_info)::env,nm::locals)
+ else