diff --git a/docs/grammar/Solidity.g4 b/docs/grammar/Solidity.g4 index 8246ba073..9a99aa475 100644 --- a/docs/grammar/Solidity.g4 +++ b/docs/grammar/Solidity.g4 @@ -84,7 +84,8 @@ contractBodyElement: constructorDefinition | functionDefinition | modifierDefinition - | fallbackReceiveFunctionDefinition + | fallbackFunctionDefinition + | receiveFunctionDefinition | structDefinition | enumDefinition | stateVariableDeclaration @@ -189,9 +190,32 @@ locals[ (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[ boolean visibilitySet = false, boolean mutabilitySet = false, @@ -199,10 +223,10 @@ locals[ boolean overrideSpecifierSet = false ] : - kind=(Fallback | Receive) LParen RParen + kind=Receive LParen RParen ( - {!$visibilitySet}? visibility {$visibilitySet = true;} - | {!$mutabilitySet}? stateMutability {$mutabilitySet = true;} + {!$visibilitySet}? External {$visibilitySet = true;} + | {!$mutabilitySet}? Payable {$mutabilitySet = true;} | modifierInvocation | {!$virtualSet}? Virtual {$virtualSet = true;} | {!$overrideSpecifierSet}? overrideSpecifier {$overrideSpecifierSet = true;}