SOLL
SOLL copied to clipboard
Implement inheritance
Add support to inheritance
Parser
- New keywords
- [x] abstract
- [x] is
- [x] override
- [x] virtual
- [x] interface
- structure
- [ ] identifier-path
- [x] inheritance-specifier
- [x] override-specifier
- Add new ability on AST for inheritance
Analysis
- Function Overriding
- [x] Base functions can be overridden by inheriting contracts to change their behavior if they are marked as virtual
- [x] The overriding function must then use the override keyword in the function header
- [x] The overriding function may only change the visibility of the overridden function from external to public
- [x] nonpayable can be overridden by view and pure
- [x] view can be overridden by pure
- [x] payable is an exception and cannot be changed to any other mutability.
- [ ] For multiple inheritance, the most derived base contracts that define the same function must be specified explicitly after the override
- [x] Functions with the private visibility cannot be virtual
- [ ] Public state variables can override external functions if the parameter and return types of the function matches the getter function of the variable:
- Modifier Overriding (The details is as same as Function Overriding)
- [ ] modifier support.
-
Constructors
-
Multiple Inheritance and Linearization
- [x] C3 Linearization (Build inheritance graph)
- [ ] Inheriting Different Kinds of Members of the Same Name
-
Abstract Contracts
-
Interfaces
-
[x] They cannot inherit from other contracts, but they can inherit from other interfaces.
-
[x] All declared functions must be external
-
[x] They cannot declare a constructor.
-
[x] They cannot declare state variables.
-
[x] All functions declared in interfaces are implicitly virtual
-
contract injector