Skip to content

Commit d5c9ef8

Browse files
Merge pull request #6240 from thomasspriggs/tas/smt2_data_structures_to_string
Add conversion of incremental smt2 data structures to string
2 parents 5592d7e + 5dd2519 commit d5c9ef8

File tree

10 files changed

+575
-5
lines changed

10 files changed

+575
-5
lines changed

src/solvers/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ SRC = $(BOOLEFORCE_SRC) \
197197
smt2_incremental/smt_options.cpp \
198198
smt2_incremental/smt_sorts.cpp \
199199
smt2_incremental/smt_terms.cpp \
200+
smt2_incremental/smt_to_smt2_string.cpp \
200201
smt2_incremental/smt2_incremental_decision_procedure.cpp \
201202
# Empty last line
202203

src/solvers/smt2_incremental/smt_commands.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,9 @@ smt_define_function_commandt::smt_define_function_commandt(
8383
smt_termt definition)
8484
: smt_commandt{ID_smt_define_function_command}
8585
{
86-
set(ID_identifier, identifier);
86+
set(
87+
ID_identifier,
88+
upcast(smt_identifier_termt{std::move(identifier), definition.get_sort()}));
8789
std::transform(
8890
std::make_move_iterator(parameters.begin()),
8991
std::make_move_iterator(parameters.end()),
@@ -94,9 +96,10 @@ smt_define_function_commandt::smt_define_function_commandt(
9496
set(ID_code, upcast(std::move(definition)));
9597
}
9698

97-
const irep_idt &smt_define_function_commandt::identifier() const
99+
const smt_identifier_termt &smt_define_function_commandt::identifier() const
98100
{
99-
return get(ID_identifier);
101+
return static_cast<const smt_identifier_termt &>(
102+
downcast(find(ID_identifier)));
100103
}
101104

102105
std::vector<std::reference_wrapper<const smt_identifier_termt>>

src/solvers/smt2_incremental/smt_commands.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class smt_define_function_commandt
7070
irep_idt identifier,
7171
std::vector<smt_identifier_termt> parameters,
7272
smt_termt definition);
73-
const irep_idt &identifier() const;
73+
const smt_identifier_termt &identifier() const;
7474
std::vector<std::reference_wrapper<const smt_identifier_termt>>
7575
parameters() const;
7676
const smt_sortt &return_sort() const;

src/solvers/smt2_incremental/smt_sorts.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ smt_bool_sortt::smt_bool_sortt() : smt_sortt{ID_smt_bool_sort}
2727
smt_bit_vector_sortt::smt_bit_vector_sortt(const std::size_t bit_width)
2828
: smt_sortt{ID_smt_bit_vector_sort}
2929
{
30+
INVARIANT(
31+
bit_width > 0,
32+
"The definition of SMT2 bit vector theory requires the number of "
33+
"bits to be greater than 0.");
3034
set_size_t(ID_width, bit_width);
3135
}
3236

0 commit comments

Comments
 (0)