エミッタはあなたのプラグインを識別し、修正するものと宣言しなければなりません。あなたのケースでは、あなたが仕様にプロパティを追加すると、あなたがそれを構築することができます。今すぐ
let emitter = Emitter.create "My plugin" [ Emitter.Funspec ]
~correctness:[] ~tuning:[]
、kernel_function
のためにこれは最初のパラメータはに等しいという前提を構築する方法の例です。 1つ:
let add_pre kf = match Kernel_function.get_formals kf with
| [] ->()
| c_var::_ ->
let l_var = Cil.cvar_to_lvar c_var in
let var_term = Logic_const.tvar l_var in
let cnst_term = Logic_const.tinteger 1 in
let eq_pred = Logic_const.prel (Cil_types.Req, var_term, cnst_term) in
let pred = Logic_const.new_predicate eq_pred in
let bname = Cil.default_behavior_name in
Annotations.add_requires emitter kf ~behavior:bname [pred]
何か試しましたか?その "パラメータ"の "テスト"関数( 'kernel_function')と変数(' varinfo')を見つけることができましたか?今、 'add_requires'を使う前に、' parameter == 1'という述語を構築する必要があります。あなたはそれを行う方法を見つけましたか? – Anne
私はkernel_functionとvarinfoを得ました。私は3番目のパラメータ(私はそれが名前だと思います)を "テスト"に設定しました。 私はそれらを構築する方法がわからない2つのパラメータ(最初と最後)があります。エミッタは作成機能を持っていますが、何が何であるかわからないところでいくつかのリストを取得します(Emitter.create "[Code_annot] [] []'を試しました)。他のいくつかの奇妙なものが含まれているので、述語リスト(名前とエミッタで他の2つの試みをテストすることはできません) –
これを試しました: 'let pred = Cil_types.Ptrue in let id_pred = {ip_name = []; ip_loc = location; ip_id = 1; ip_content = pred} 'ですが、どの場所を使用するのかわかりませんか? –