let pragmas f =
(match Jessie_options.IntModel.get_val () with
| Jessie_options.IMexact -> []
| Jessie_options.IMbounded -> [ Jc_output.JCint_model Jc_env.IMbounded ]
| Jessie_options.IMmodulo -> [ Jc_output.JCint_model Jc_env.IMmodulo ])
@ Jc_output.JCinvariant_policy Jc_env.InvArguments
:: (if Jessie_options.SepRegions.get () then
Jc_output.JCseparation_policy Jc_env.SepRegions
else
Jc_output.JCseparation_policy Jc_env.SepNone)
:: (match Jessie_options.InferAnnot.get () with
| "" -> Jc_output.JCannotation_policy Jc_env.AnnotNone
| "inv" -> Jc_output.JCannotation_policy Jc_env.AnnotInvariants
| "pre" -> Jc_output.JCannotation_policy Jc_env.AnnotElimPre
| "spre" -> Jc_output.JCannotation_policy Jc_env.AnnotStrongPre
| "wpre" -> Jc_output.JCannotation_policy Jc_env.AnnotWeakPre
| s ->
Jessie_options.abort "unknown inference technique %s" s)
:: (match Jessie_options.AbsDomain.get () with
| "box" -> Jc_output.JCabstract_domain Jc_env.AbsBox
| "oct" -> Jc_output.JCabstract_domain Jc_env.AbsOct
| "poly" -> Jc_output.JCabstract_domain Jc_env.AbsPol
| s ->
Jessie_options.abort "unknown abstract domain %s" s)
:: List.flatten (List.rev (List.rev_map pragma f.globals))