diff options
author | mingchuan <mingc@skymizer.com> | 2018-05-23 12:31:20 +0800 |
---|---|---|
committer | mingchuan <mingc@skymizer.com> | 2018-05-30 18:05:55 +0800 |
commit | b7cafcbdf95c807f46fc07f4788d82981b7112b4 (patch) | |
tree | 5714a463da64eaf75a3ec56732165ec89e77d677 /libsolidity/ast | |
parent | 9d5064d04d178474b95d67e87aaa32d0e5e03b0f (diff) | |
download | dexon-solidity-b7cafcbdf95c807f46fc07f4788d82981b7112b4.tar.gz dexon-solidity-b7cafcbdf95c807f46fc07f4788d82981b7112b4.tar.zst dexon-solidity-b7cafcbdf95c807f46fc07f4788d82981b7112b4.zip |
Allow using `calldata` keyword to specify data location
Diffstat (limited to 'libsolidity/ast')
-rw-r--r-- | libsolidity/ast/AST.h | 2 | ||||
-rw-r--r-- | libsolidity/ast/ASTJsonConverter.cpp | 2 | ||||
-rw-r--r-- | libsolidity/ast/Types.cpp | 14 |
3 files changed, 14 insertions, 4 deletions
diff --git a/libsolidity/ast/AST.h b/libsolidity/ast/AST.h index fa0d6921..d703ae53 100644 --- a/libsolidity/ast/AST.h +++ b/libsolidity/ast/AST.h @@ -656,7 +656,7 @@ private: class VariableDeclaration: public Declaration { public: - enum Location { Default, Storage, Memory }; + enum Location { Default, Storage, Memory, CallData }; VariableDeclaration( SourceLocation const& _sourceLocation, diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index b8e00b60..b7855668 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -751,6 +751,8 @@ string ASTJsonConverter::location(VariableDeclaration::Location _location) return "storage"; case VariableDeclaration::Location::Memory: return "memory"; + case VariableDeclaration::Location::CallData: + return "calldata"; default: solAssert(false, "Unknown declaration location."); } diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index 59668e1d..8620f283 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -1469,12 +1469,20 @@ string ReferenceType::stringForReferencePart() const string ReferenceType::identifierLocationSuffix() const { string id; - if (location() == DataLocation::Storage) + switch (location()) + { + case DataLocation::Storage: id += "_storage"; - else if (location() == DataLocation::Memory) + break; + case DataLocation::Memory: id += "_memory"; - else + break; + case DataLocation::CallData: id += "_calldata"; + break; + default: + solAssert(false, "Unknown location returned by location()"); + } if (isPointer()) id += "_ptr"; return id; |