@@ -491,25 +491,25 @@ quantifier_expression:
491
491
}
492
492
;
493
493
494
- loop_invariant :
494
+ cprover_contract_loop_invariant :
495
495
TOK_CPROVER_LOOP_INVARIANT ' (' ACSL_binding_expression ' )'
496
496
{ $$ =$3 ; }
497
497
;
498
498
499
- loop_invariant_list :
500
- loop_invariant
499
+ cprover_contract_loop_invariant_list :
500
+ cprover_contract_loop_invariant
501
501
{ init($$ ); mto($$ , $1 ); }
502
- | loop_invariant_list loop_invariant
502
+ | cprover_contract_loop_invariant_list cprover_contract_loop_invariant
503
503
{ $$ =$1 ; mto($$ , $2 ); }
504
504
;
505
505
506
- loop_invariant_list_opt :
506
+ cprover_contract_loop_invariant_list_opt :
507
507
/* nothing */
508
508
{ init($$ ); parser_stack($$ ).make_nil(); }
509
- | loop_invariant_list
509
+ | cprover_contract_loop_invariant_list
510
510
;
511
511
512
- cprover_decreases_opt :
512
+ cprover_contract_decreases_opt :
513
513
/* nothing */
514
514
{ init($$ ); parser_stack($$ ).make_nil(); }
515
515
| TOK_CPROVER_DECREASES ' (' ACSL_binding_expression ' )'
@@ -2437,31 +2437,35 @@ declaration_or_expression_statement:
2437
2437
2438
2438
iteration_statement:
2439
2439
TOK_WHILE ' (' comma_expression_opt ' )'
2440
- loop_invariant_list_opt cprover_decreases_opt
2440
+ cprover_contract_assigns_opt
2441
+ cprover_contract_loop_invariant_list_opt
2442
+ cprover_contract_decreases_opt
2441
2443
statement
2442
2444
{
2443
2445
$$=$1 ;
2444
2446
statement ($$, ID_while);
2445
- parser_stack ($$).add_to_operands (std::move (parser_stack ($3 )), std::move (parser_stack ($7 )));
2447
+ parser_stack ($$).add_to_operands (std::move (parser_stack ($3 )), std::move (parser_stack ($8 )));
2446
2448
2447
- if (!parser_stack ($5 ).operands ().empty ())
2448
- static_cast <exprt &>(parser_stack ($$).add (ID_C_spec_loop_invariant)).operands ().swap (parser_stack ($5 ).operands ());
2449
+ if (!parser_stack ($6 ).operands ().empty ())
2450
+ static_cast <exprt &>(parser_stack ($$).add (ID_C_spec_loop_invariant)).operands ().swap (parser_stack ($6 ).operands ());
2449
2451
2450
- if (parser_stack ($6 ).is_not_nil ())
2451
- parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($6 ));
2452
+ if (parser_stack ($7 ).is_not_nil ())
2453
+ parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($7 ));
2452
2454
}
2453
2455
| TOK_DO statement TOK_WHILE ' (' comma_expression ' )'
2454
- loop_invariant_list_opt cprover_decreases_opt ' ;'
2456
+ cprover_contract_assigns_opt
2457
+ cprover_contract_loop_invariant_list_opt
2458
+ cprover_contract_decreases_opt ' ;'
2455
2459
{
2456
2460
$$=$1 ;
2457
2461
statement ($$, ID_dowhile);
2458
2462
parser_stack ($$).add_to_operands (std::move (parser_stack ($5 )), std::move (parser_stack ($2 )));
2459
2463
2460
- if (!parser_stack ($7 ).operands ().empty ())
2461
- static_cast <exprt &>(parser_stack ($$).add (ID_C_spec_loop_invariant)).operands ().swap (parser_stack ($7 ).operands ());
2464
+ if (!parser_stack ($8 ).operands ().empty ())
2465
+ static_cast <exprt &>(parser_stack ($$).add (ID_C_spec_loop_invariant)).operands ().swap (parser_stack ($8 ).operands ());
2462
2466
2463
- if (parser_stack ($8 ).is_not_nil ())
2464
- parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($8 ));
2467
+ if (parser_stack ($9 ).is_not_nil ())
2468
+ parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($9 ));
2465
2469
}
2466
2470
| TOK_FOR
2467
2471
{
@@ -2475,7 +2479,9 @@ iteration_statement:
2475
2479
' (' declaration_or_expression_statement
2476
2480
comma_expression_opt ' ;'
2477
2481
comma_expression_opt ' )'
2478
- loop_invariant_list_opt cprover_decreases_opt
2482
+ cprover_contract_assigns_opt
2483
+ cprover_contract_loop_invariant_list_opt
2484
+ cprover_contract_decreases_opt
2479
2485
statement
2480
2486
{
2481
2487
$$=$1 ;
@@ -2484,13 +2490,13 @@ iteration_statement:
2484
2490
mto ($$, $4 );
2485
2491
mto ($$, $5 );
2486
2492
mto ($$, $7 );
2487
- mto ($$, $11 );
2493
+ mto ($$, $12 );
2488
2494
2489
- if (!parser_stack ($9 ).operands ().empty ())
2490
- static_cast <exprt &>(parser_stack ($$).add (ID_C_spec_loop_invariant)).operands ().swap (parser_stack ($9 ).operands ());
2495
+ if (!parser_stack ($10 ).operands ().empty ())
2496
+ static_cast <exprt &>(parser_stack ($$).add (ID_C_spec_loop_invariant)).operands ().swap (parser_stack ($10 ).operands ());
2491
2497
2492
- if (parser_stack ($10 ).is_not_nil ())
2493
- parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($10 ));
2498
+ if (parser_stack ($11 ).is_not_nil ())
2499
+ parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($11 ));
2494
2500
2495
2501
if (PARSER.for_has_scope )
2496
2502
PARSER.pop_scope (); // remove the C99 for-scope
@@ -3272,10 +3278,10 @@ cprover_function_contract:
3272
3278
set ($$, ID_C_spec_requires);
3273
3279
mto ($$, $3 );
3274
3280
}
3275
- | cprover_contract_assigns_opt
3281
+ | cprover_contract_assigns
3276
3282
;
3277
3283
3278
- cprover_contract_assigns_opt :
3284
+ cprover_contract_assigns :
3279
3285
TOK_CPROVER_ASSIGNS ' (' argument_expression_list ' )'
3280
3286
{
3281
3287
$$=$1 ;
@@ -3291,6 +3297,12 @@ cprover_contract_assigns_opt:
3291
3297
}
3292
3298
;
3293
3299
3300
+ cprover_contract_assigns_opt:
3301
+ /* nothing */
3302
+ { init ($$); parser_stack ($$).make_nil (); }
3303
+ | cprover_contract_assigns
3304
+ ;
3305
+
3294
3306
cprover_function_contract_sequence:
3295
3307
cprover_function_contract
3296
3308
| cprover_function_contract_sequence cprover_function_contract
0 commit comments