Skip to content

Commit 86bf65c

Browse files
author
Aalok Thakkar
committed
Refactored parsing rules for function contracts
1. Renamed cprover_contract to cprover_function_contract. 2. Renamed cprover_contract_sequence to cprover_function_contract_sequence. 3. Renamed cprover_contract_sequence_opt to cprover_function_contract_sequence_opt. 4. Created cprover_contract_assigns_opt and added it to cprover_function_contract. This allows us to reuse the assigns clause for loop contracts in the future.
1 parent 694a714 commit 86bf65c

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

src/ansi-c/parser.y

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3230,7 +3230,7 @@ parameter_abstract_declarator:
32303230
| parameter_postfix_abstract_declarator
32313231
;
32323232

3233-
cprover_contract:
3233+
cprover_function_contract:
32343234
TOK_CPROVER_ENSURES '(' ACSL_binding_expression ')'
32353235
{
32363236
$$=$1;
@@ -3243,7 +3243,11 @@ cprover_contract:
32433243
set($$, ID_C_spec_requires);
32443244
mto($$, $3);
32453245
}
3246-
| TOK_CPROVER_ASSIGNS '(' argument_expression_list ')'
3246+
| cprover_contract_assigns_opt
3247+
;
3248+
3249+
cprover_contract_assigns_opt:
3250+
TOK_CPROVER_ASSIGNS '(' argument_expression_list ')'
32473251
{
32483252
$$=$1;
32493253
set($$, ID_C_spec_assigns);
@@ -3252,19 +3256,19 @@ cprover_contract:
32523256
}
32533257
;
32543258

3255-
cprover_contract_sequence:
3256-
cprover_contract
3257-
| cprover_contract_sequence cprover_contract
3259+
cprover_function_contract_sequence:
3260+
cprover_function_contract
3261+
| cprover_function_contract_sequence cprover_function_contract
32583262
{
32593263
$$=$1;
32603264
merge($$, $2);
32613265
}
32623266
;
32633267

3264-
cprover_contract_sequence_opt:
3268+
cprover_function_contract_sequence_opt:
32653269
/* nothing */
32663270
{ init($$); }
3267-
| cprover_contract_sequence
3271+
| cprover_function_contract_sequence
32683272
;
32693273

32703274
postfixing_abstract_declarator:
@@ -3305,7 +3309,7 @@ postfixing_abstract_declarator:
33053309
parameter_postfixing_abstract_declarator:
33063310
array_abstract_declarator
33073311
| '(' ')'
3308-
cprover_contract_sequence_opt
3312+
cprover_function_contract_sequence_opt
33093313
{
33103314
set($1, ID_code);
33113315
stack_type($1).add(ID_parameters);
@@ -3322,7 +3326,7 @@ parameter_postfixing_abstract_declarator:
33223326
parameter_type_list
33233327
')'
33243328
KnR_parameter_header_opt
3325-
cprover_contract_sequence_opt
3329+
cprover_function_contract_sequence_opt
33263330
{
33273331
set($1, ID_code);
33283332
stack_type($1).subtype()=typet(ID_abstract);

0 commit comments

Comments
 (0)