Skip to content

Commit 4466408

Browse files
committed
Replace 3-valued char by enum
1 parent 15a67e4 commit 4466408

File tree

3 files changed

+23
-13
lines changed

3 files changed

+23
-13
lines changed

src/goto-programs/interpreter.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,9 @@ exprt interpretert::get_value(
503503
}
504504
return result;
505505
}
506-
if(use_non_det && (memory[offset].initialized>=0))
506+
if(use_non_det &&
507+
memory[offset].initialized!=
508+
memory_cellt::initializedt::WRITTEN_BEFORE_READ)
507509
return side_effect_expr_nondett(type);
508510
mp_vectort rhs;
509511
rhs.push_back(memory[offset].value);
@@ -681,7 +683,8 @@ void interpretert::execute_assign()
681683
size_t size=get_size(code_assign.lhs().type());
682684
for(size_t i=0; i<size; i++)
683685
{
684-
memory[address+i].initialized=-1;
686+
memory[address+i].initialized=
687+
memory_cellt::initializedt::READ_BEFORE_WRITTEN;
685688
}
686689
}
687690
}
@@ -706,8 +709,8 @@ void interpretert::assign(
706709
<< "\n" << eom;
707710
}
708711
cell.value=rhs[i];
709-
if(cell.initialized==0)
710-
cell.initialized=1;
712+
if(cell.initialized==memory_cellt::initializedt::UNKNOWN)
713+
cell.initialized=memory_cellt::initializedt::WRITTEN_BEFORE_READ;
711714
}
712715
}
713716
}

src/goto-programs/interpreter_class.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,12 +161,18 @@ class interpretert:public messaget
161161
public:
162162
memory_cellt() :
163163
value(0),
164-
initialized(0)
164+
initialized(initializedt::UNKNOWN)
165165
{}
166166
mp_integer value;
167167
// Initialized is annotated even during reads
168+
enum class initializedt
169+
{
170+
UNKNOWN,
171+
WRITTEN_BEFORE_READ,
172+
READ_BEFORE_WRITTEN
173+
};
168174
// Set to 1 when written-before-read, -1 when read-before-written
169-
mutable char initialized;
175+
mutable initializedt initialized;
170176
};
171177

172178
typedef sparse_vectort<memory_cellt> memoryt;

src/goto-programs/interpreter_evaluate.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ void interpretert::read(
3636
{
3737
const memory_cellt &cell=memory[integer2size_t(address+i)];
3838
value=cell.value;
39-
if(cell.initialized==0)
40-
cell.initialized=-1;
39+
if(cell.initialized==memory_cellt::initializedt::UNKNOWN)
40+
cell.initialized=memory_cellt::initializedt::READ_BEFORE_WRITTEN;
4141
}
4242
else
4343
value=0;
@@ -64,8 +64,8 @@ void interpretert::read_unbounded(
6464
{
6565
const memory_cellt &cell=memory[integer2size_t(address+i)];
6666
value=cell.value;
67-
if(cell.initialized==0)
68-
cell.initialized=-1;
67+
if(cell.initialized==memory_cellt::initializedt::UNKNOWN)
68+
cell.initialized=memory_cellt::initializedt::READ_BEFORE_WRITTEN;
6969
}
7070
else
7171
value=0;
@@ -86,7 +86,7 @@ void interpretert::allocate(
8686
{
8787
memory_cellt &cell=memory[integer2size_t(address+i)];
8888
cell.value=0;
89-
cell.initialized=0;
89+
cell.initialized=memory_cellt::initializedt::UNKNOWN;
9090
}
9191
}
9292
}
@@ -96,8 +96,9 @@ void interpretert::clear_input_flags()
9696
{
9797
for(auto &cell : memory)
9898
{
99-
if(cell.second.initialized>0)
100-
cell.second.initialized=0;
99+
if(cell.second.initialized==
100+
memory_cellt::initializedt::WRITTEN_BEFORE_READ)
101+
cell.second.initialized=memory_cellt::initializedt::UNKNOWN;
101102
}
102103
}
103104

0 commit comments

Comments
 (0)