Skip to content

Commit

Permalink
JSON output for the modules
Browse files Browse the repository at this point in the history
This adds --json-modules, to get a JSON array with all the modules.
  • Loading branch information
kroening committed Jun 22, 2024
1 parent 459b5f8 commit 282de8f
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 3 deletions.
29 changes: 29 additions & 0 deletions regression/ebmc/CLI/json-modules.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
CORE
json-modules.v
--json-modules -
activate-multi-line-match
\[
\{
"identifier": "Verilog::foo",
"location": \{
"file": "json-modules\.v",
"line": "1",
"workingDirectory": ".*"
\},
"mode": "Verilog",
"name": "foo"
\},
\{
"identifier": "Verilog::bar",
"location": \{
"file": "json-modules.v",
"line": "4",
"workingDirectory": ".*"
\},
"mode": "Verilog",
"name": "bar"
\}
\]
^EXIT=0$
^SIGNAL=0$
--
5 changes: 5 additions & 0 deletions regression/ebmc/CLI/json-modules.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module foo;
endmodule

module bar;
endmodule
2 changes: 1 addition & 1 deletion src/ebmc/ebmc_parse_options.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ int ebmc_parse_optionst::doit()
if(cmdline.isset("show-parse"))
return show_parse(cmdline, ui_message_handler);

if(cmdline.isset("show-modules") || cmdline.isset("modules-xml"))
if(cmdline.isset("show-modules") || cmdline.isset("modules-xml") || cmdline.isset("json-modules"))
return show_modules(cmdline, ui_message_handler);

if(cmdline.isset("show-module-hierarchy"))
Expand Down
3 changes: 2 additions & 1 deletion src/ebmc/ebmc_parse_options.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ class ebmc_parse_optionst:public parse_options_baset
"(show-properties)(property):p:(trace)(waveform)(numbered-trace)"
"(dimacs)(module):(top):"
"(po)(cegar)(k-induction)(2pi)(bound2):"
"(outfile):(xml-ui)(verbosity):(gui)(json-result):"
"(outfile):(xml-ui)(verbosity):(gui)"
"(json-result):(json-modules):"
"(neural-liveness)(neural-engine):"
"(reset):"
"(version)(verilog-rtl)(verilog-netlist)"
Expand Down
17 changes: 17 additions & 0 deletions src/ebmc/transition_system.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,23 @@ int get_transition_system(
return 0;
}

if(cmdline.isset("json-modules"))
{
auto file_name = cmdline.get_value("json-modules");
if(file_name == "-")
{
json_modules(transition_system.symbol_table, std::cout);
}
else
{
std::ofstream out(widen_if_needed(file_name));
if(!out)
throw ebmc_errort() << "failed to open " << file_name;
json_modules(transition_system.symbol_table, out);
}
return 0;
}

if(cmdline.isset("show-symbol-table"))
{
std::cout << transition_system.symbol_table;
Expand Down
37 changes: 36 additions & 1 deletion src/trans-word-level/show_modules.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Author: Daniel Kroening, [email protected]
\*******************************************************************/

#include <util/xml.h>
#include <util/json_irep.h>
#include <util/xml_irep.h>

#include "show_modules.h"
Expand Down Expand Up @@ -91,3 +91,38 @@ void show_modules(const symbol_table_baset &symbol_table, std::ostream &out)
}
}
}

/*******************************************************************\
Function: json_modules
Inputs:
Outputs:
Purpose:
\*******************************************************************/

void json_modules(const symbol_table_baset &symbol_table, std::ostream &out)
{
json_arrayt json_modules;

for(const auto &s : symbol_table.symbols)
{
const symbolt &symbol = s.second;

if(symbol.type.id() == ID_module)
{
json_objectt json_module;
json_module["location"] = json(symbol.location);
json_module["identifier"] = json_stringt{id2string(symbol.name)};
json_module["mode"] = json_stringt{id2string(symbol.mode)};
json_module["name"] = json_stringt{id2string(symbol.display_name())};

json_modules.push_back(std::move(json_module));
}
}

out << json_modules;
}
2 changes: 2 additions & 0 deletions src/trans-word-level/show_modules.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,6 @@ void show_modules(const symbol_table_baset &, std::ostream &);

void show_modules_xml(const symbol_table_baset &, std::ostream &);

void json_modules(const symbol_table_baset &, std::ostream &);

#endif

0 comments on commit 282de8f

Please sign in to comment.