Grammar for fallback returning.

This commit is contained in:
chriseth 2020-11-10 15:37:20 +01:00
parent fda352094f
commit bb9688e0fe

View File

@ -84,7 +84,8 @@ contractBodyElement:
constructorDefinition constructorDefinition
| functionDefinition | functionDefinition
| modifierDefinition | modifierDefinition
| fallbackReceiveFunctionDefinition | fallbackFunctionDefinition
| receiveFunctionDefinition
| structDefinition | structDefinition
| enumDefinition | enumDefinition
| stateVariableDeclaration | stateVariableDeclaration
@ -189,9 +190,32 @@ locals[
(Semicolon | body=block); (Semicolon | body=block);
/** /**
* Definitions of the special fallback and receive functions. * Definition of the special fallback function.
*/ */
fallbackReceiveFunctionDefinition fallbackFunctionDefinition
locals[
boolean visibilitySet = false,
boolean mutabilitySet = false,
boolean virtualSet = false,
boolean overrideSpecifierSet = false,
boolean hasParameters = false
]
:
kind=Fallback LParen (parameterList { $hasParameters = true; } )? RParen
(
{!$visibilitySet}? External {$visibilitySet = true;}
| {!$mutabilitySet}? stateMutability {$mutabilitySet = true;}
| modifierInvocation
| {!$virtualSet}? Virtual {$virtualSet = true;}
| {!$overrideSpecifierSet}? overrideSpecifier {$overrideSpecifierSet = true;}
)*
( {$hasParameters}? Returns LParen returnParameters=parameterList RParen | {!$hasParameters}? )
(Semicolon | body=block);
/**
* Definition of the special receive function.
*/
receiveFunctionDefinition
locals[ locals[
boolean visibilitySet = false, boolean visibilitySet = false,
boolean mutabilitySet = false, boolean mutabilitySet = false,
@ -199,10 +223,10 @@ locals[
boolean overrideSpecifierSet = false boolean overrideSpecifierSet = false
] ]
: :
kind=(Fallback | Receive) LParen RParen kind=Receive LParen RParen
( (
{!$visibilitySet}? visibility {$visibilitySet = true;} {!$visibilitySet}? External {$visibilitySet = true;}
| {!$mutabilitySet}? stateMutability {$mutabilitySet = true;} | {!$mutabilitySet}? Payable {$mutabilitySet = true;}
| modifierInvocation | modifierInvocation
| {!$virtualSet}? Virtual {$virtualSet = true;} | {!$virtualSet}? Virtual {$virtualSet = true;}
| {!$overrideSpecifierSet}? overrideSpecifier {$overrideSpecifierSet = true;} | {!$overrideSpecifierSet}? overrideSpecifier {$overrideSpecifierSet = true;}