mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Using for with global binding.
This commit is contained in:
@@ -42,6 +42,13 @@ scope (either the contract or the current module/source unit),
|
||||
including within all of its functions, and has no effect
|
||||
outside of the contract or module in which it is used.
|
||||
|
||||
When the directive is used at file level and applied to a
|
||||
user-defined type which was defined at file level in the same file,
|
||||
the word ``global`` can be added at the end. This will have the
|
||||
effect that the functions are attached to the type everywhere
|
||||
the type is available (including other files), not only in the
|
||||
scope of the using statement.
|
||||
|
||||
Let us rewrite the set example from the
|
||||
:ref:`libraries` section in this way, using file-level functions
|
||||
instead of library functions.
|
||||
|
||||
@@ -47,6 +47,7 @@ FixedBytes:
|
||||
'bytes25' | 'bytes26' | 'bytes27' | 'bytes28' | 'bytes29' | 'bytes30' | 'bytes31' | 'bytes32';
|
||||
For: 'for';
|
||||
Function: 'function';
|
||||
Global: 'global'; // not a real keyword
|
||||
Hex: 'hex';
|
||||
If: 'if';
|
||||
Immutable: 'immutable';
|
||||
|
||||
@@ -315,7 +315,7 @@ errorDefinition:
|
||||
* Using directive to bind library functions and free functions to types.
|
||||
* Can occur within contracts and libraries and at the file level.
|
||||
*/
|
||||
usingDirective: Using (identifierPath | (LBrace identifierPath (Comma identifierPath)* RBrace)) For (Mul | typeName) Semicolon;
|
||||
usingDirective: Using (identifierPath | (LBrace identifierPath (Comma identifierPath)* RBrace)) For (Mul | typeName) Global? Semicolon;
|
||||
/**
|
||||
* A type name can be an elementary type, a function type, a mapping type, a user-defined type
|
||||
* (e.g. a contract or struct) or an array type.
|
||||
@@ -389,7 +389,7 @@ inlineArrayExpression: LBrack (expression ( Comma expression)* ) RBrack;
|
||||
/**
|
||||
* Besides regular non-keyword Identifiers, some keywords like 'from' and 'error' can also be used as identifiers.
|
||||
*/
|
||||
identifier: Identifier | From | Error | Revert;
|
||||
identifier: Identifier | From | Error | Revert | Global;
|
||||
|
||||
literal: stringLiteral | numberLiteral | booleanLiteral | hexStringLiteral | unicodeStringLiteral;
|
||||
booleanLiteral: True | False;
|
||||
|
||||
Reference in New Issue
Block a user