Skip to content

Commit b349279

Browse files
authored
Merge pull request #1479 from diffblue/show-modules-smv
Implement `--show-modules` for SMV
2 parents 81116d5 + 4c484d1 commit b349279

File tree

5 files changed

+64
-6
lines changed

5 files changed

+64
-6
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
CORE
2+
show-modules-smv.smv
3+
--show-modules
4+
activate-multi-line-match
5+
Module 1:
6+
Location: file show-modules-smv\.smv line 3
7+
Identifier: smv::main
8+
Name: main
9+
10+
Module 2:
11+
Location: file show-modules-smv\.smv line 8
12+
Identifier: smv::bar
13+
Name: bar
14+
15+
Module 3:
16+
Location: file show-modules-smv\.smv line 13
17+
Identifier: smv::foo
18+
Name: foo
19+
^EXIT=0$
20+
^SIGNAL=0$
21+
--
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
-- from the NuSMV 2.7 manual
2+
3+
MODULE main
4+
VAR
5+
a : bar;
6+
m : foo(a);
7+
8+
MODULE bar
9+
VAR
10+
q : boolean;
11+
p : boolean;
12+
13+
MODULE foo(c)
14+
DEFINE
15+
flag := c.q | c.p;

src/smvlang/parser.y

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ Function: new_module
177177
178178
\*******************************************************************/
179179

180-
static smv_parse_treet::modulet &new_module(YYSTYPE &module_name)
180+
static smv_parse_treet::modulet &new_module(YYSTYPE &location, YYSTYPE &module_name)
181181
{
182182
auto base_name = stack_expr(module_name).id_string();
183183
const std::string identifier=smv_module_symbol(base_name);
@@ -186,6 +186,7 @@ static smv_parse_treet::modulet &new_module(YYSTYPE &module_name)
186186
PARSER.parse_tree.module_map[identifier] = --PARSER.parse_tree.module_list.end();
187187
module.name = identifier;
188188
module.base_name = base_name;
189+
module.source_location = stack_expr(location).source_location();
189190
PARSER.module = &module;
190191
return module;
191192
}
@@ -363,8 +364,11 @@ module_name: IDENTIFIER_Token
363364
| STRING_Token
364365
;
365366

366-
module_head: MODULE_Token module_name { new_module($2); }
367-
| MODULE_Token module_name { new_module($2); }
367+
module_keyword: MODULE_Token { init($$); /* for the location */ }
368+
;
369+
370+
module_head: module_keyword module_name { new_module($1, $2); }
371+
| module_keyword module_name { new_module($1, $2); }
368372
'(' module_parameters_opt ')'
369373
;
370374

src/smvlang/smv_ebmc_language.cpp

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,26 @@ std::optional<transition_systemt> smv_ebmc_languaget::transition_system()
7070
return {};
7171
}
7272

73-
if(
74-
cmdline.isset("show-modules") || cmdline.isset("modules-xml") ||
75-
cmdline.isset("json-modules"))
73+
if(cmdline.isset("show-modules"))
74+
{
75+
std::size_t count = 0;
76+
auto &out = std::cout;
77+
78+
for(const auto &module : parse_tree.module_list)
79+
{
80+
count++;
81+
82+
out << "Module " << count << ":" << '\n';
83+
84+
out << " Location: " << module.source_location << '\n';
85+
out << " Identifier: " << module.name << '\n';
86+
out << " Name: " << module.base_name << '\n' << '\n';
87+
}
88+
89+
return {};
90+
}
91+
92+
if(cmdline.isset("modules-xml") || cmdline.isset("json-modules"))
7693
{
7794
//show_modules(cmdline, message_handler);
7895
return {};

src/smvlang/smv_parse_tree.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class smv_parse_treet
2929

3030
struct modulet
3131
{
32+
source_locationt source_location;
3233
irep_idt name, base_name;
3334
std::vector<irep_idt> parameters;
3435

0 commit comments

Comments
 (0)