@@ -101,7 +101,8 @@ optionalt<exprt> string_concat_char_builtin_functiont::eval(
101
101
// / * result[input.length] = character
102
102
// / * return_code = 0
103
103
string_constraintst string_concat_char_builtin_functiont::constraints (
104
- string_constraint_generatort &generator) const
104
+ string_constraint_generatort &generator,
105
+ message_handlert &message_handler) const
105
106
{
106
107
string_constraintst constraints;
107
108
constraints.existential .push_back (length_constraint ());
@@ -111,7 +112,7 @@ string_constraintst string_concat_char_builtin_functiont::constraints(
111
112
const exprt upper_bound =
112
113
zero_if_negative (array_pool.get_or_create_length (input));
113
114
return string_constraintt (
114
- idx, upper_bound, equal_exprt (input[idx], result[idx]));
115
+ idx, upper_bound, equal_exprt (input[idx], result[idx]), message_handler );
115
116
}());
116
117
constraints.existential .push_back (
117
118
equal_exprt (result[array_pool.get_or_create_length (input)], character));
@@ -151,7 +152,8 @@ optionalt<exprt> string_set_char_builtin_functiont::eval(
151
152
// / 3. forall 0 <= i < max(0, min(res.length, pos)). res[i] = str[i]
152
153
// / 4. forall max(0, pos+1) <= i < res.length. res[i] = str[i]
153
154
string_constraintst string_set_char_builtin_functiont::constraints (
154
- string_constraint_generatort &generator) const
155
+ string_constraint_generatort &generator,
156
+ message_handlert &message_handler) const
155
157
{
156
158
string_constraintst constraints;
157
159
constraints.existential .push_back (length_constraint ());
@@ -169,7 +171,8 @@ string_constraintst string_set_char_builtin_functiont::constraints(
169
171
q,
170
172
zero_if_negative (
171
173
minimum (array_pool.get_or_create_length (result), position)),
172
- a3_body);
174
+ a3_body,
175
+ message_handler);
173
176
}());
174
177
constraints.universal .push_back ([&] {
175
178
const symbol_exprt q2 =
@@ -179,7 +182,8 @@ string_constraintst string_set_char_builtin_functiont::constraints(
179
182
q2,
180
183
zero_if_negative (plus_exprt (position, from_integer (1 , position.type ()))),
181
184
zero_if_negative (array_pool.get_or_create_length (result)),
182
- a4_body);
185
+ a4_body,
186
+ message_handler);
183
187
}());
184
188
return constraints;
185
189
}
@@ -279,7 +283,8 @@ static exprt is_lower_case(const exprt &character)
279
283
// / characters: `diff = 'a'-'A' = 0x20` and `is_upper_case` is true for the
280
284
// / upper case characters of Basic Latin and Latin-1 supplement of unicode.
281
285
string_constraintst string_to_lower_case_builtin_functiont::constraints (
282
- string_constraint_generatort &generator) const
286
+ string_constraint_generatort &generator,
287
+ message_handlert &message_handler) const
283
288
{
284
289
// \todo for now, only characters in Basic Latin and Latin-1 supplement
285
290
// are supported (up to 0x100), we should add others using case mapping
@@ -302,7 +307,8 @@ string_constraintst string_to_lower_case_builtin_functiont::constraints(
302
307
return string_constraintt (
303
308
idx,
304
309
zero_if_negative (array_pool.get_or_create_length (result)),
305
- conditional_convert);
310
+ conditional_convert,
311
+ message_handler);
306
312
}());
307
313
return constraints;
308
314
}
@@ -332,9 +338,11 @@ optionalt<exprt> string_to_upper_case_builtin_functiont::eval(
332
338
// / is_lower_case(str[i]) ? res[i] = str[i] - 0x20 : res[i] = str[i]
333
339
// /
334
340
// / \param fresh_symbol: generator of fresh symbols
341
+ // / \param message_handler: message handler
335
342
// / \return set of constraints
336
343
string_constraintst string_to_upper_case_builtin_functiont::constraints (
337
- symbol_generatort &fresh_symbol) const
344
+ symbol_generatort &fresh_symbol,
345
+ message_handlert &message_handler) const
338
346
{
339
347
string_constraintst constraints;
340
348
constraints.existential .push_back (length_constraint ());
@@ -350,7 +358,8 @@ string_constraintst string_to_upper_case_builtin_functiont::constraints(
350
358
zero_if_negative (array_pool.get_or_create_length (result)),
351
359
equal_exprt (
352
360
result[idx],
353
- if_exprt (is_lower_case (input[idx]), converted, input[idx])));
361
+ if_exprt (is_lower_case (input[idx]), converted, input[idx])),
362
+ message_handler);
354
363
}());
355
364
return constraints;
356
365
}
@@ -406,7 +415,8 @@ optionalt<exprt> string_of_int_builtin_functiont::eval(
406
415
}
407
416
408
417
string_constraintst string_of_int_builtin_functiont::constraints (
409
- string_constraint_generatort &generator) const
418
+ string_constraint_generatort &generator,
419
+ message_handlert &message_handler) const
410
420
{
411
421
auto pair =
412
422
generator.add_axioms_for_string_of_int_with_radix (result, arg, radix, 0 );
@@ -475,7 +485,8 @@ string_builtin_function_with_no_evalt::string_builtin_function_with_no_evalt(
475
485
}
476
486
477
487
string_constraintst string_builtin_function_with_no_evalt::constraints (
478
- string_constraint_generatort &generator) const
488
+ string_constraint_generatort &generator,
489
+ message_handlert &message_handler) const
479
490
{
480
491
auto pair =
481
492
generator.add_axioms_for_function_application (function_application);
0 commit comments