CBMC
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
show_goto_functions_json.cpp
Go to the documentation of this file.
1/*******************************************************************\
2
3Module: Goto Program
4
5Author: Thomas Kiley
6
7\*******************************************************************/
8
11
13
14#include <util/cprover_prefix.h>
15#include <util/json_irep.h>
16
17#include "goto_functions.h"
18
19#include <iostream>
20
26
31 const goto_functionst &goto_functions)
32{
35
36 const auto sorted = goto_functions.sorted();
37
38 for(const auto &function_entry : sorted)
39 {
40 const irep_idt &function_name = function_entry->first;
41 const goto_functionst::goto_functiont &function = function_entry->second;
42
44 json_functions.push_back(jsont()).make_object();
45 json_function["name"] = json_stringt(function_name);
46 json_function["isBodyAvailable"]=
47 jsont::json_boolean(function.body_available());
48 bool is_internal = function_name.starts_with(CPROVER_PREFIX) ||
49 function_name.starts_with("java::array[") ||
50 function_name.starts_with("java::org.cprover") ||
51 function_name.starts_with("java::java");
52 json_function["isInternal"]=jsont::json_boolean(is_internal);
53
54 if(list_only)
55 continue;
56
57 if(function.body_available())
58 {
60
61 for(const goto_programt::instructiont &instruction :
62 function.body.instructions)
63 {
65 {"instructionId", json_stringt(instruction.to_string())}};
66
67 if(instruction.code().source_location().is_not_nil())
68 {
69 instruction_entry["sourceLocation"] =
70 json(instruction.code().source_location());
71 }
72
73 std::ostringstream instruction_builder;
74 instruction.output(instruction_builder);
75
76 instruction_entry["instruction"]=
78
79 if(!instruction.code().operands().empty())
80 {
82 for(const exprt &operand : instruction.code().operands())
83 {
85 no_comments_irep_converter.convert_from_irep(
86 operand);
88 }
89 instruction_entry["operands"] = std::move(operand_array);
90 }
91
92 if(instruction.has_condition())
93 {
95 no_comments_irep_converter.convert_from_irep(
96 instruction.condition());
97
98 instruction_entry["guard"] = std::move(guard_object);
99 }
100
101 json_instruction_array.push_back(std::move(instruction_entry));
102 }
103
104 json_function["instructions"] = std::move(json_instruction_array);
105 }
106 }
107
108 return json_objectt({{"functions", json_functions}});
109}
110
119 const goto_functionst &goto_functions,
120 std::ostream &out,
121 bool append)
122{
123 if(append)
124 {
125 out << ",\n";
126 }
127 out << convert(goto_functions);
128}
virtual void output(const namespacet &ns, const irep_idt &function_id, const goto_programt &goto_program, std::ostream &out) const
Output the abstract states for a single function.
Definition ai.cpp:39
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Definition ai.h:562
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition dstring.h:38
bool starts_with(const char *s) const
equivalent of as_string().starts_with(s)
Definition dstring.h:95
Base class for all expressions.
Definition expr.h:56
A collection of goto functions.
::goto_functiont goto_functiont
std::vector< function_mapt::const_iterator > sorted() const
returns a vector of the iterators in alphabetical order
This class represents an instruction in the GOTO intermediate representation.
Definition json.h:27
static jsont json_boolean(bool value)
Definition json.h:97
void operator()(const goto_functionst &goto_functions, std::ostream &out, bool append=true)
Print the json object generated by show_goto_functions_jsont::show_goto_functions to the provided str...
json_objectt convert(const goto_functionst &goto_functions)
Walks through all of the functions in the program and returns a JSON object representing all their fu...
show_goto_functions_jsont(bool _list_only=false)
For outputting the GOTO program in a readable JSON format.
#define CPROVER_PREFIX
Goto Programs with Functions.
static void json(json_objectT &result, const irep_idt &property_id, const property_infot &property_info)