aboutsummaryrefslogtreecommitdiffstats
path: root/AST.h
diff options
context:
space:
mode:
authorchriseth <c@ethdev.com>2015-03-31 01:33:30 +0800
committerchriseth <c@ethdev.com>2015-03-31 01:33:30 +0800
commiteab085baf6d9953c008803b1d27e0076d51441a5 (patch)
tree5148b9e0f2ddeb880b689f9ebe944f46c5801bb5 /AST.h
parentf728a336b1af6ae25b5cb5282119bef8f55c08b6 (diff)
parentc6781ed38dd7c634ef8dbbbebcac582451c04ddd (diff)
downloaddexon-solidity-eab085baf6d9953c008803b1d27e0076d51441a5.tar
dexon-solidity-eab085baf6d9953c008803b1d27e0076d51441a5.tar.gz
dexon-solidity-eab085baf6d9953c008803b1d27e0076d51441a5.tar.bz2
dexon-solidity-eab085baf6d9953c008803b1d27e0076d51441a5.tar.lz
dexon-solidity-eab085baf6d9953c008803b1d27e0076d51441a5.tar.xz
dexon-solidity-eab085baf6d9953c008803b1d27e0076d51441a5.tar.zst
dexon-solidity-eab085baf6d9953c008803b1d27e0076d51441a5.zip
Merge pull request #1414 from LefterisJP/sol_notImplementedFuncs
Interface contracts
Diffstat (limited to 'AST.h')
-rw-r--r--AST.h82
1 files changed, 54 insertions, 28 deletions
diff --git a/AST.h b/AST.h
index 00ad3307..9f5f9fcb 100644
--- a/AST.h
+++ b/AST.h
@@ -196,6 +196,22 @@ protected:
ASTPointer<ASTString> m_documentation;
};
+/**
+ * Abstract class that is added to AST nodes that can be marked as not being fully implemented
+ */
+class ImplementationOptional
+{
+public:
+ explicit ImplementationOptional(bool _implemented): m_implemented(_implemented) {}
+
+ /// @return whether this node is fully implemented or not
+ bool isFullyImplemented() const { return m_implemented; }
+ void setFullyImplemented(bool _implemented) { m_implemented = _implemented; }
+
+protected:
+ bool m_implemented;
+};
+
/// @}
/**
@@ -203,20 +219,24 @@ protected:
* document order. It first visits all struct declarations, then all variable declarations and
* finally all function declarations.
*/
-class ContractDefinition: public Declaration, public Documented
+class ContractDefinition: public Declaration, public Documented, public ImplementationOptional
{
public:
- ContractDefinition(SourceLocation const& _location,
- ASTPointer<ASTString> const& _name,
- ASTPointer<ASTString> const& _documentation,
- std::vector<ASTPointer<InheritanceSpecifier>> const& _baseContracts,
- std::vector<ASTPointer<StructDefinition>> const& _definedStructs,
- std::vector<ASTPointer<EnumDefinition>> const& _definedEnums,
- std::vector<ASTPointer<VariableDeclaration>> const& _stateVariables,
- std::vector<ASTPointer<FunctionDefinition>> const& _definedFunctions,
- std::vector<ASTPointer<ModifierDefinition>> const& _functionModifiers,
- std::vector<ASTPointer<EventDefinition>> const& _events):
- Declaration(_location, _name), Documented(_documentation),
+ ContractDefinition(
+ SourceLocation const& _location,
+ ASTPointer<ASTString> const& _name,
+ ASTPointer<ASTString> const& _documentation,
+ std::vector<ASTPointer<InheritanceSpecifier>> const& _baseContracts,
+ std::vector<ASTPointer<StructDefinition>> const& _definedStructs,
+ std::vector<ASTPointer<EnumDefinition>> const& _definedEnums,
+ std::vector<ASTPointer<VariableDeclaration>> const& _stateVariables,
+ std::vector<ASTPointer<FunctionDefinition>> const& _definedFunctions,
+ std::vector<ASTPointer<ModifierDefinition>> const& _functionModifiers,
+ std::vector<ASTPointer<EventDefinition>> const& _events
+ ):
+ Declaration(_location, _name),
+ Documented(_documentation),
+ ImplementationOptional(true),
m_baseContracts(_baseContracts),
m_definedStructs(_definedStructs),
m_definedEnums(_definedEnums),
@@ -263,6 +283,7 @@ public:
private:
void checkIllegalOverrides() const;
+ void checkAbstractFunctions();
std::vector<std::pair<FixedHash<4>, FunctionTypePointer>> const& getInterfaceFunctionList() const;
@@ -378,24 +399,29 @@ private:
std::vector<ASTPointer<VariableDeclaration>> m_parameters;
};
-class FunctionDefinition: public Declaration, public VariableScope, public Documented
+class FunctionDefinition: public Declaration, public VariableScope, public Documented, public ImplementationOptional
{
public:
- FunctionDefinition(SourceLocation const& _location, ASTPointer<ASTString> const& _name,
- Declaration::Visibility _visibility, bool _isConstructor,
- ASTPointer<ASTString> const& _documentation,
- ASTPointer<ParameterList> const& _parameters,
- bool _isDeclaredConst,
- std::vector<ASTPointer<ModifierInvocation>> const& _modifiers,
- ASTPointer<ParameterList> const& _returnParameters,
- ASTPointer<Block> const& _body):
- Declaration(_location, _name, _visibility), Documented(_documentation),
- m_isConstructor(_isConstructor),
- m_parameters(_parameters),
- m_isDeclaredConst(_isDeclaredConst),
- m_functionModifiers(_modifiers),
- m_returnParameters(_returnParameters),
- m_body(_body)
+ FunctionDefinition(
+ SourceLocation const& _location,
+ ASTPointer<ASTString> const& _name,
+ Declaration::Visibility _visibility, bool _isConstructor,
+ ASTPointer<ASTString> const& _documentation,
+ ASTPointer<ParameterList> const& _parameters,
+ bool _isDeclaredConst,
+ std::vector<ASTPointer<ModifierInvocation>> const& _modifiers,
+ ASTPointer<ParameterList> const& _returnParameters,
+ ASTPointer<Block> const& _body
+ ):
+ Declaration(_location, _name, _visibility),
+ Documented(_documentation),
+ ImplementationOptional(_body != nullptr),
+ m_isConstructor(_isConstructor),
+ m_parameters(_parameters),
+ m_isDeclaredConst(_isDeclaredConst),
+ m_functionModifiers(_modifiers),
+ m_returnParameters(_returnParameters),
+ m_body(_body)
{}
virtual void accept(ASTVisitor& _visitor) override;