Skip to content

Commit 99d2c4a

Browse files
committed
JSON: add function api data to json results
1 parent 53078e9 commit 99d2c4a

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

chc/cmdline/jsonresultutil.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@
3737
from chc.util.loggingutil import chklogger
3838

3939
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
4044
from chc.app.CFile import CFile
4145
from chc.app.CFunction import CFunction
4246
from chc.proof.CFunctionPO import CFunctionPO
@@ -90,6 +94,54 @@ def csource_to_json_result(csrc: "CSrcFile") -> JSONResult:
9094
return JSONResult("sourcelines", content, "ok")
9195

9296

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+
93145
def ppo_to_json_result(po: "CFunctionPO") -> JSONResult:
94146
content: Dict[str, Any] = {}
95147
content["index"] = po.po_index
@@ -133,6 +185,7 @@ def file_proofobligations_to_json_result(cfile: "CFile") -> JSONResult:
133185
fndata: Dict[str, Any] = {}
134186
fndata["functiondata"] = jsonfunctiondata(fn)
135187
fndata["pos"] = fn_proofobligations_to_json_result(fn).content
188+
fndata["api"] = fn_api_to_json_result(fn.api).content
136189
fnsdata.append(fndata)
137190
content["functions"] = fnsdata
138191
return JSONResult("fileproofobligations", content, "ok")

0 commit comments

Comments
 (0)