@@ -381,17 +381,13 @@ void cpp_typecheckt::typecheck_function_expr(
381
381
std::string op_name=" operator->" ;
382
382
383
383
// turn this into a function call
384
- side_effect_expr_function_callt function_call;
385
- function_call.arguments ().reserve (expr.operands ().size ());
386
- function_call.add_source_location ()=expr.source_location ();
387
-
388
384
// first do function/operator
389
385
const cpp_namet cpp_name (op_name, expr.source_location ());
390
386
391
- function_call.function () = cpp_name.as_expr ();
387
+ side_effect_expr_function_callt function_call (
388
+ cpp_name.as_expr (), {expr.op0 ()}, typet{}, expr.source_location ());
389
+ function_call.arguments ().reserve (expr.operands ().size ());
392
390
393
- // now do the argument
394
- function_call.arguments ().push_back (expr.op0 ());
395
391
typecheck_side_effect_function_call (function_call);
396
392
397
393
exprt tmp (ID_already_typechecked);
@@ -487,10 +483,6 @@ bool cpp_typecheckt::operator_is_overloaded(exprt &expr)
487
483
std::string op_name=std::string (" operator" )+" (" +cpp_type2name (t)+" )" ;
488
484
489
485
// turn this into a function call
490
- side_effect_expr_function_callt function_call;
491
- function_call.arguments ().reserve (expr.operands ().size ());
492
- function_call.add_source_location ()=expr.source_location ();
493
-
494
486
const cpp_namet cpp_name (op_name, expr.source_location ());
495
487
496
488
// See if the struct declares the cast operator as a member
@@ -513,16 +505,16 @@ bool cpp_typecheckt::operator_is_overloaded(exprt &expr)
513
505
if (!found_in_struct)
514
506
return false ;
515
507
516
- {
517
- exprt member (ID_member);
518
- member.add (ID_component_cpp_name)= cpp_name;
508
+ exprt member (ID_member);
509
+ member.add (ID_component_cpp_name) = cpp_name;
519
510
520
- exprt tmp (ID_already_typechecked);
521
- tmp.copy_to_operands (expr.op0 ());
522
- member.copy_to_operands (tmp);
511
+ exprt tmp (ID_already_typechecked);
512
+ tmp.copy_to_operands (expr.op0 ());
513
+ member.copy_to_operands (tmp);
523
514
524
- function_call.function ()=member;
525
- }
515
+ side_effect_expr_function_callt function_call (
516
+ std::move (member), {}, typet{}, expr.source_location ());
517
+ function_call.arguments ().reserve (expr.operands ().size ());
526
518
527
519
if (expr.operands ().size ()>1 )
528
520
{
@@ -563,10 +555,6 @@ bool cpp_typecheckt::operator_is_overloaded(exprt &expr)
563
555
const cpp_namet cpp_name (op_name, expr.source_location ());
564
556
565
557
// turn this into a function call
566
- side_effect_expr_function_callt function_call;
567
- function_call.arguments ().reserve (expr.operands ().size ());
568
- function_call.add_source_location ()=expr.source_location ();
569
-
570
558
// There are two options to overload an operator:
571
559
//
572
560
// 1. In the scope of a as a.operator(b, ...)
@@ -603,16 +591,16 @@ bool cpp_typecheckt::operator_is_overloaded(exprt &expr)
603
591
if (resolve_result.is_not_nil ())
604
592
{
605
593
// Found! We turn op(a, b, ...) into a.op(b, ...)
606
- {
607
- exprt member (ID_member);
608
- member.add (ID_component_cpp_name)=cpp_name;
594
+ exprt member (ID_member);
595
+ member.add (ID_component_cpp_name) = cpp_name;
609
596
610
- exprt tmp (ID_already_typechecked);
611
- tmp.copy_to_operands (expr.op0 ());
612
- member.copy_to_operands (tmp);
597
+ exprt tmp (ID_already_typechecked);
598
+ tmp.copy_to_operands (expr.op0 ());
599
+ member.copy_to_operands (tmp);
613
600
614
- function_call.function ()=member;
615
- }
601
+ side_effect_expr_function_callt function_call (
602
+ std::move (member), {}, typet{}, expr.source_location ());
603
+ function_call.arguments ().reserve (expr.operands ().size ());
616
604
617
605
if (expr.operands ().size ()>1 )
618
606
{
@@ -645,9 +633,9 @@ bool cpp_typecheckt::operator_is_overloaded(exprt &expr)
645
633
if (resolve_result.is_not_nil ())
646
634
{
647
635
// found!
648
- function_call. function ()=
649
- static_cast < const exprt &>(
650
- static_cast < const irept &>(cpp_name ));
636
+ side_effect_expr_function_callt function_call (
637
+ cpp_name. as_expr (), {}, typet{}, expr. source_location ());
638
+ function_call. arguments (). reserve (expr. operands (). size ( ));
651
639
652
640
// now do arguments
653
641
forall_operands (it, expr)
@@ -904,11 +892,11 @@ void cpp_typecheckt::typecheck_expr_explicit_typecast(exprt &expr)
904
892
{
905
893
// It's really a function call. Note that multiple arguments
906
894
// become a comma expression, and that these are already typechecked.
907
- side_effect_expr_function_callt f_call;
908
-
909
- f_call. add_source_location ()=expr. source_location ();
910
- f_call. function (). swap (expr. type ());
911
- f_call. arguments ()= collect_comma_expression ( expr.op0 ()). operands ( );
895
+ side_effect_expr_function_callt f_call (
896
+ std::move (symbol_expr),
897
+ collect_comma_expression (expr. op0 ()). operands (),
898
+ typet{},
899
+ expr.source_location () );
912
900
913
901
typecheck_side_effect_function_call (f_call);
914
902
@@ -2495,10 +2483,8 @@ void cpp_typecheckt::typecheck_side_effect_assignment(side_effect_exprt &expr)
2495
2483
member.set (ID_component_cpp_name, cpp_name);
2496
2484
member.add_to_operands (std::move (already_typechecked));
2497
2485
2498
- side_effect_expr_function_callt new_expr;
2499
- new_expr.function ().swap (member);
2500
- new_expr.arguments ().push_back (expr.op1 ());
2501
- new_expr.add_source_location ()=expr.source_location ();
2486
+ side_effect_expr_function_callt new_expr (
2487
+ std::move (member), {expr.op1 ()}, typet{}, expr.source_location ());
2502
2488
2503
2489
typecheck_side_effect_function_call (new_expr);
2504
2490
@@ -2565,9 +2551,8 @@ void cpp_typecheckt::typecheck_side_effect_inc_dec(
2565
2551
member.set (ID_component_cpp_name, cpp_name);
2566
2552
member.add_to_operands (std::move (already_typechecked));
2567
2553
2568
- side_effect_expr_function_callt new_expr;
2569
- new_expr.function ().swap (member);
2570
- new_expr.add_source_location ()=expr.source_location ();
2554
+ side_effect_expr_function_callt new_expr (
2555
+ std::move (member), {}, typet{}, expr.source_location ());
2571
2556
2572
2557
// the odd C++ way to denote the post-inc/dec operator
2573
2558
if (post)
0 commit comments