@@ -39,42 +39,47 @@ static exprt simplify_json_expr(
39
39
{
40
40
const irep_idt &value=to_constant_expr (src).get_value ();
41
41
42
- if (value!=ID_NULL &&
43
- (value!=std::string (value.size (), ' 0' ) ||
44
- !config.ansi_c .NULL_is_zero ) &&
45
- src.operands ().size ()==1 &&
46
- src.op0 ().id ()!=ID_constant)
47
- // try to simplify the constant pointer
48
- return simplify_json_expr (src.op0 (), ns);
42
+ if (
43
+ value != ID_NULL &&
44
+ (value != std::string (value.size (), ' 0' ) ||
45
+ !config.ansi_c .NULL_is_zero ) &&
46
+ src.operands ().size () == 1 &&
47
+ to_unary_expr (src).op ().id () != ID_constant)
48
+ // try to simplify the constant pointer
49
+ {
50
+ return simplify_json_expr (to_unary_expr (src).op (), ns);
51
+ }
49
52
}
50
53
}
51
- else if (src.id ()==ID_address_of &&
52
- src.operands ().size ()==1 &&
53
- src.op0 ().id ()==ID_member &&
54
- id2string (to_member_expr (
55
- src.op0 ()).get_component_name ()).find (" @" )!=std::string::npos)
54
+ else if (
55
+ src.id () == ID_address_of &&
56
+ to_address_of_expr (src).object ().id () == ID_member &&
57
+ id2string (
58
+ to_member_expr (to_address_of_expr (src).object ()).get_component_name ())
59
+ .find (" @" ) != std::string::npos)
56
60
{
57
61
// simplify expressions of the form &member_expr(object, @class_identifier)
58
- return simplify_json_expr (src. op0 (), ns);
62
+ return simplify_json_expr (to_address_of_expr ( src). object (), ns);
59
63
}
60
- else if (src.id ()==ID_address_of &&
61
- src.operands ().size ()==1 &&
62
- src.op0 ().id ()==ID_index &&
63
- to_index_expr (src.op0 ()).index ().id ()==ID_constant &&
64
- to_constant_expr (
65
- to_index_expr (src.op0 ()).index ()).value_is_zero_string ())
64
+ else if (
65
+ src.id () == ID_address_of &&
66
+ to_address_of_expr (src).object ().id () == ID_index &&
67
+ to_index_expr (to_address_of_expr (src).object ()).index ().id () ==
68
+ ID_constant &&
69
+ to_constant_expr (to_index_expr (to_address_of_expr (src).object ()).index ())
70
+ .value_is_zero_string ())
66
71
{
67
72
// simplify expressions of the form &array[0]
68
- return simplify_json_expr (to_index_expr (src.op0 ()).array (), ns);
73
+ return simplify_json_expr (
74
+ to_index_expr (to_address_of_expr (src).object ()).array (), ns);
69
75
}
70
76
else if (src.id ()==ID_member &&
71
- src.operands ().size ()==1 &&
72
77
id2string (
73
78
to_member_expr (src).get_component_name ())
74
79
.find (" @" )!=std::string::npos)
75
80
{
76
81
// simplify expressions of the form member_expr(object, @class_identifier)
77
- return simplify_json_expr (src. op0 (), ns);
82
+ return simplify_json_expr (to_member_expr ( src). struct_op (), ns);
78
83
}
79
84
80
85
return src;
@@ -317,11 +322,15 @@ json_objectt json(
317
322
result[" name" ]=json_stringt (" pointer" );
318
323
result[" type" ]=json_stringt (type_string);
319
324
exprt simpl_expr=simplify_json_expr (expr, ns);
320
- if (simpl_expr.get (ID_value)==ID_NULL ||
321
- // remove typecast on NULL
322
- (simpl_expr.id ()==ID_constant && simpl_expr.type ().id ()==ID_pointer &&
323
- simpl_expr.op0 ().get (ID_value)==ID_NULL))
325
+ if (
326
+ simpl_expr.get (ID_value) == ID_NULL ||
327
+ // remove typecast on NULL
328
+ (simpl_expr.id () == ID_constant &&
329
+ simpl_expr.type ().id () == ID_pointer &&
330
+ to_unary_expr (simpl_expr).op ().get (ID_value) == ID_NULL))
331
+ {
324
332
result[" data" ]=json_stringt (value_string);
333
+ }
325
334
else if (simpl_expr.id ()==ID_symbol)
326
335
{
327
336
const irep_idt &ptr_id=to_symbol_expr (simpl_expr).get_identifier ();
0 commit comments