@@ -491,14 +491,14 @@ quantifier_expression:
491
491
}
492
492
;
493
493
494
- loop_invariant_opt :
494
+ cprover_contract_invariant_opt :
495
495
/* nothing */
496
496
{ init($$ ); parser_stack($$ ).make_nil(); }
497
497
| TOK_CPROVER_LOOP_INVARIANT ' (' ACSL_binding_expression ' )'
498
498
{ $$ =$3 ; }
499
499
;
500
500
501
- cprover_decreases_opt :
501
+ cprover_contract_decreases_opt :
502
502
/* nothing */
503
503
{ init($$ ); parser_stack($$ ).make_nil(); }
504
504
| TOK_CPROVER_DECREASES ' (' ACSL_binding_expression ' )'
@@ -2426,31 +2426,35 @@ declaration_or_expression_statement:
2426
2426
2427
2427
iteration_statement:
2428
2428
TOK_WHILE ' (' comma_expression_opt ' )'
2429
- loop_invariant_opt cprover_decreases_opt
2429
+ cprover_contract_assigns_opt
2430
+ cprover_contract_invariant_opt
2431
+ cprover_contract_decreases_opt
2430
2432
statement
2431
2433
{
2432
2434
$$=$1 ;
2433
2435
statement ($$, ID_while);
2434
- parser_stack ($$).add_to_operands (std::move (parser_stack ($3 )), std::move (parser_stack ($7 )));
2435
-
2436
- if (parser_stack ($5 ).is_not_nil ())
2437
- parser_stack ($$).add (ID_C_spec_loop_invariant).swap (parser_stack ($5 ));
2436
+ parser_stack ($$).add_to_operands (std::move (parser_stack ($3 )), std::move (parser_stack ($8 )));
2438
2437
2439
2438
if (parser_stack ($6 ).is_not_nil ())
2440
- parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($6 ));
2439
+ parser_stack ($$).add (ID_C_spec_loop_invariant).swap (parser_stack ($6 ));
2440
+
2441
+ if (parser_stack ($7 ).is_not_nil ())
2442
+ parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($7 ));
2441
2443
}
2442
2444
| TOK_DO statement TOK_WHILE ' (' comma_expression ' )'
2443
- loop_invariant_opt cprover_decreases_opt ' ;'
2445
+ cprover_contract_assigns_opt
2446
+ cprover_contract_invariant_opt
2447
+ cprover_contract_decreases_opt ' ;'
2444
2448
{
2445
2449
$$=$1 ;
2446
2450
statement ($$, ID_dowhile);
2447
2451
parser_stack ($$).add_to_operands (std::move (parser_stack ($5 )), std::move (parser_stack ($2 )));
2448
2452
2449
- if (parser_stack ($7 ).is_not_nil ())
2450
- parser_stack ($$).add (ID_C_spec_loop_invariant).swap (parser_stack ($7 ));
2451
-
2452
2453
if (parser_stack ($8 ).is_not_nil ())
2453
- parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($8 ));
2454
+ parser_stack ($$).add (ID_C_spec_loop_invariant).swap (parser_stack ($8 ));
2455
+
2456
+ if (parser_stack ($9 ).is_not_nil ())
2457
+ parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($9 ));
2454
2458
}
2455
2459
| TOK_FOR
2456
2460
{
@@ -2464,7 +2468,9 @@ iteration_statement:
2464
2468
' (' declaration_or_expression_statement
2465
2469
comma_expression_opt ' ;'
2466
2470
comma_expression_opt ' )'
2467
- loop_invariant_opt cprover_decreases_opt
2471
+ cprover_contract_assigns_opt
2472
+ cprover_contract_invariant_opt
2473
+ cprover_contract_decreases_opt
2468
2474
statement
2469
2475
{
2470
2476
$$=$1 ;
@@ -2473,13 +2479,13 @@ iteration_statement:
2473
2479
mto ($$, $4 );
2474
2480
mto ($$, $5 );
2475
2481
mto ($$, $7 );
2476
- mto ($$, $11 );
2477
-
2478
- if (parser_stack ($9 ).is_not_nil ())
2479
- parser_stack ($$).add (ID_C_spec_loop_invariant).swap (parser_stack ($9 ));
2482
+ mto ($$, $12 );
2480
2483
2481
2484
if (parser_stack ($10 ).is_not_nil ())
2482
- parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($10 ));
2485
+ parser_stack ($$).add (ID_C_spec_loop_invariant).swap (parser_stack ($10 ));
2486
+
2487
+ if (parser_stack ($11 ).is_not_nil ())
2488
+ parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($11 ));
2483
2489
2484
2490
if (PARSER.for_has_scope )
2485
2491
PARSER.pop_scope (); // remove the C99 for-scope
@@ -3261,10 +3267,10 @@ cprover_function_contract:
3261
3267
set ($$, ID_C_spec_requires);
3262
3268
mto ($$, $3 );
3263
3269
}
3264
- | cprover_contract_assigns_opt
3270
+ | cprover_contract_assigns
3265
3271
;
3266
3272
3267
- cprover_contract_assigns_opt :
3273
+ cprover_contract_assigns :
3268
3274
TOK_CPROVER_ASSIGNS ' (' argument_expression_list ' )'
3269
3275
{
3270
3276
$$=$1 ;
@@ -3274,6 +3280,12 @@ cprover_contract_assigns_opt:
3274
3280
}
3275
3281
;
3276
3282
3283
+ cprover_contract_assigns_opt:
3284
+ /* nothing */
3285
+ { init ($$); parser_stack ($$).make_nil (); }
3286
+ | cprover_contract_assigns
3287
+ ;
3288
+
3277
3289
cprover_function_contract_sequence:
3278
3290
cprover_function_contract
3279
3291
| cprover_function_contract_sequence cprover_function_contract
0 commit comments