Skip to content

Commit 16b242c

Browse files
committed
code_assumet and code_assertt are frontend only
While code_assumet and code_assertt do not have an equivalent any of the languages supported, they are exclusive to the front-ends. Goto instructions do not use these; they use the guard member instead. Thus, these two classes should live in std_code.h.
1 parent a80fe1f commit 16b242c

File tree

2 files changed

+105
-105
lines changed

2 files changed

+105
-105
lines changed

src/util/goto_instruction_code.h

Lines changed: 0 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -321,111 +321,6 @@ inline code_function_callt &to_code_function_call(codet &code)
321321
return static_cast<code_function_callt &>(code);
322322
}
323323

324-
/// An assumption, which must hold in subsequent code.
325-
class code_assumet : public codet
326-
{
327-
public:
328-
explicit code_assumet(exprt expr) : codet(ID_assume, {std::move(expr)})
329-
{
330-
}
331-
332-
const exprt &assumption() const
333-
{
334-
return op0();
335-
}
336-
337-
exprt &assumption()
338-
{
339-
return op0();
340-
}
341-
342-
protected:
343-
using codet::op0;
344-
using codet::op1;
345-
using codet::op2;
346-
using codet::op3;
347-
};
348-
349-
template <>
350-
inline bool can_cast_expr<code_assumet>(const exprt &base)
351-
{
352-
return detail::can_cast_code_impl(base, ID_assume);
353-
}
354-
355-
inline void validate_expr(const code_assumet &x)
356-
{
357-
validate_operands(x, 1, "assume must have one operand");
358-
}
359-
360-
inline const code_assumet &to_code_assume(const codet &code)
361-
{
362-
PRECONDITION(code.get_statement() == ID_assume);
363-
const code_assumet &ret = static_cast<const code_assumet &>(code);
364-
validate_expr(ret);
365-
return ret;
366-
}
367-
368-
inline code_assumet &to_code_assume(codet &code)
369-
{
370-
PRECONDITION(code.get_statement() == ID_assume);
371-
code_assumet &ret = static_cast<code_assumet &>(code);
372-
validate_expr(ret);
373-
return ret;
374-
}
375-
376-
/// A non-fatal assertion, which checks a condition then permits execution to
377-
/// continue.
378-
class code_assertt : public codet
379-
{
380-
public:
381-
explicit code_assertt(exprt expr) : codet(ID_assert, {std::move(expr)})
382-
{
383-
}
384-
385-
const exprt &assertion() const
386-
{
387-
return op0();
388-
}
389-
390-
exprt &assertion()
391-
{
392-
return op0();
393-
}
394-
395-
protected:
396-
using codet::op0;
397-
using codet::op1;
398-
using codet::op2;
399-
using codet::op3;
400-
};
401-
402-
template <>
403-
inline bool can_cast_expr<code_assertt>(const exprt &base)
404-
{
405-
return detail::can_cast_code_impl(base, ID_assert);
406-
}
407-
408-
inline void validate_expr(const code_assertt &x)
409-
{
410-
validate_operands(x, 1, "assert must have one operand");
411-
}
412-
413-
inline const code_assertt &to_code_assert(const codet &code)
414-
{
415-
PRECONDITION(code.get_statement() == ID_assert);
416-
const code_assertt &ret = static_cast<const code_assertt &>(code);
417-
validate_expr(ret);
418-
return ret;
419-
}
420-
421-
inline code_assertt &to_code_assert(codet &code)
422-
{
423-
PRECONDITION(code.get_statement() == ID_assert);
424-
code_assertt &ret = static_cast<code_assertt &>(code);
425-
validate_expr(ret);
426-
return ret;
427-
}
428-
429324
/// A `codet` representing the declaration that an input of a particular
430325
/// description has a value which corresponds to the value of a given expression
431326
/// (or expressions).

src/util/std_code.h

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,111 @@ inline code_blockt &to_code_block(codet &code)
263263
return static_cast<code_blockt &>(code);
264264
}
265265

266+
/// An assumption, which must hold in subsequent code.
267+
class code_assumet : public codet
268+
{
269+
public:
270+
explicit code_assumet(exprt expr) : codet(ID_assume, {std::move(expr)})
271+
{
272+
}
273+
274+
const exprt &assumption() const
275+
{
276+
return op0();
277+
}
278+
279+
exprt &assumption()
280+
{
281+
return op0();
282+
}
283+
284+
protected:
285+
using codet::op0;
286+
using codet::op1;
287+
using codet::op2;
288+
using codet::op3;
289+
};
290+
291+
template <>
292+
inline bool can_cast_expr<code_assumet>(const exprt &base)
293+
{
294+
return detail::can_cast_code_impl(base, ID_assume);
295+
}
296+
297+
inline void validate_expr(const code_assumet &x)
298+
{
299+
validate_operands(x, 1, "assume must have one operand");
300+
}
301+
302+
inline const code_assumet &to_code_assume(const codet &code)
303+
{
304+
PRECONDITION(code.get_statement() == ID_assume);
305+
const code_assumet &ret = static_cast<const code_assumet &>(code);
306+
validate_expr(ret);
307+
return ret;
308+
}
309+
310+
inline code_assumet &to_code_assume(codet &code)
311+
{
312+
PRECONDITION(code.get_statement() == ID_assume);
313+
code_assumet &ret = static_cast<code_assumet &>(code);
314+
validate_expr(ret);
315+
return ret;
316+
}
317+
318+
/// A non-fatal assertion, which checks a condition then permits execution to
319+
/// continue.
320+
class code_assertt : public codet
321+
{
322+
public:
323+
explicit code_assertt(exprt expr) : codet(ID_assert, {std::move(expr)})
324+
{
325+
}
326+
327+
const exprt &assertion() const
328+
{
329+
return op0();
330+
}
331+
332+
exprt &assertion()
333+
{
334+
return op0();
335+
}
336+
337+
protected:
338+
using codet::op0;
339+
using codet::op1;
340+
using codet::op2;
341+
using codet::op3;
342+
};
343+
344+
template <>
345+
inline bool can_cast_expr<code_assertt>(const exprt &base)
346+
{
347+
return detail::can_cast_code_impl(base, ID_assert);
348+
}
349+
350+
inline void validate_expr(const code_assertt &x)
351+
{
352+
validate_operands(x, 1, "assert must have one operand");
353+
}
354+
355+
inline const code_assertt &to_code_assert(const codet &code)
356+
{
357+
PRECONDITION(code.get_statement() == ID_assert);
358+
const code_assertt &ret = static_cast<const code_assertt &>(code);
359+
validate_expr(ret);
360+
return ret;
361+
}
362+
363+
inline code_assertt &to_code_assert(codet &code)
364+
{
365+
PRECONDITION(code.get_statement() == ID_assert);
366+
code_assertt &ret = static_cast<code_assertt &>(code);
367+
validate_expr(ret);
368+
return ret;
369+
}
370+
266371
/// A \ref codet representing a `skip` statement.
267372
class code_skipt:public codet
268373
{

0 commit comments

Comments
 (0)