|
37 | 37 | from chc.util.loggingutil import chklogger |
38 | 38 |
|
39 | 39 | if TYPE_CHECKING: |
| 40 | + from chc.api.ApiAssumption import ApiAssumption |
| 41 | + from chc.api.CFunctionApi import CFunctionApi |
| 42 | + from chc.api.GlobalAssumption import GlobalAssumption |
| 43 | + from chc.api.PostConditionRequest import PostConditionRequest |
40 | 44 | from chc.app.CFile import CFile |
41 | 45 | from chc.app.CFunction import CFunction |
42 | 46 | from chc.proof.CFunctionPO import CFunctionPO |
@@ -90,6 +94,54 @@ def csource_to_json_result(csrc: "CSrcFile") -> JSONResult: |
90 | 94 | return JSONResult("sourcelines", content, "ok") |
91 | 95 |
|
92 | 96 |
|
| 97 | +def api_assumption_to_json_result(a: "ApiAssumption") -> JSONResult: |
| 98 | + content: Dict[str, Any] = {} |
| 99 | + content["index"] = a.id |
| 100 | + content["predicate"] = str(a.predicate) |
| 101 | + content["dependent-ppos"] = sorted(a.ppos) |
| 102 | + content["dependent-spos"] = sorted(a.spos) |
| 103 | + return JSONResult("api-assumption", content, "ok") |
| 104 | + |
| 105 | + |
| 106 | +def postcondition_request_to_json_result( |
| 107 | + pcr: "PostConditionRequest") -> JSONResult: |
| 108 | + content: Dict[str, Any] = {} |
| 109 | + content["callee"] = pcr.callee.vname |
| 110 | + content["predicate"] = str(pcr.postcondition) |
| 111 | + content["dependent-ppos"] = sorted(pcr.get_open_ppos()) |
| 112 | + content["dependent-spos"] = sorted(pcr.get_open_spos()) |
| 113 | + return JSONResult("postcondition-request", content, "ok") |
| 114 | + |
| 115 | + |
| 116 | +def global_assumption_request_to_json_result(g: "GlobalAssumption") -> JSONResult: |
| 117 | + content: Dict[str, Any] = {} |
| 118 | + content["index"] = g.id |
| 119 | + content["predicate"] = str(g.predicate) |
| 120 | + content["dependent-ppos"] = sorted(g.get_open_ppos()) |
| 121 | + content["dependent-spos"] = sorted(g.get_open_spos()) |
| 122 | + return JSONResult("global-assumption-request", content, "ok") |
| 123 | + |
| 124 | + |
| 125 | +def fn_api_to_json_result(fapi: "CFunctionApi") -> JSONResult: |
| 126 | + content: Dict[str, Any] = {} |
| 127 | + aaresults: List[Dict[str, Any]] = [] |
| 128 | + for assumption in fapi.api_assumptions.values(): |
| 129 | + aaresult = api_assumption_to_json_result(assumption) |
| 130 | + aaresults.append(aaresult.content) |
| 131 | + postreqresults: List[Dict[str, Any]] = [] |
| 132 | + for postrequest in fapi.postcondition_requests.values(): |
| 133 | + pcresult = postcondition_request_to_json_result(postrequest) |
| 134 | + postreqresults.append(pcresult.content) |
| 135 | + globalrequests: List[Dict[str, Any]] = [] |
| 136 | + for globalrequest in fapi.global_assumption_requests.values(): |
| 137 | + gresult = global_assumption_request_to_json_result(globalrequest) |
| 138 | + globalrequests.append(gresult.content) |
| 139 | + content["api-assumptions"] = aaresults |
| 140 | + content["postcondition-requests"] = postreqresults |
| 141 | + content["global-requests"] = globalrequests |
| 142 | + return JSONResult("fnapi", content, "ok") |
| 143 | + |
| 144 | + |
93 | 145 | def ppo_to_json_result(po: "CFunctionPO") -> JSONResult: |
94 | 146 | content: Dict[str, Any] = {} |
95 | 147 | content["index"] = po.po_index |
@@ -133,6 +185,7 @@ def file_proofobligations_to_json_result(cfile: "CFile") -> JSONResult: |
133 | 185 | fndata: Dict[str, Any] = {} |
134 | 186 | fndata["functiondata"] = jsonfunctiondata(fn) |
135 | 187 | fndata["pos"] = fn_proofobligations_to_json_result(fn).content |
| 188 | + fndata["api"] = fn_api_to_json_result(fn.api).content |
136 | 189 | fnsdata.append(fndata) |
137 | 190 | content["functions"] = fnsdata |
138 | 191 | return JSONResult("fileproofobligations", content, "ok") |
0 commit comments