aboutsummaryrefslogtreecommitdiffstats
path: root/AST.cpp
diff options
context:
space:
mode:
authorLiana Husikyan <liana@ethdev.com>2015-03-14 01:16:04 +0800
committerLiana Husikyan <liana@ethdev.com>2015-03-16 17:46:46 +0800
commitebb4d5e298cbe9d8d6bb6b1fa1d8f6f769d62fba (patch)
tree81ba1220fa9c3b57c792cb87806278ff3af51815 /AST.cpp
parent7d6357ae531f604387fc1f91799fca9a9102e856 (diff)
downloaddexon-solidity-ebb4d5e298cbe9d8d6bb6b1fa1d8f6f769d62fba.tar.gz
dexon-solidity-ebb4d5e298cbe9d8d6bb6b1fa1d8f6f769d62fba.tar.zst
dexon-solidity-ebb4d5e298cbe9d8d6bb6b1fa1d8f6f769d62fba.zip
- added more tests to check constant specifier implementation
- deny use of const for local variables - deny unitialized const variables - only int, fixed strings, and enums can be declaired as const
Diffstat (limited to 'AST.cpp')
-rw-r--r--AST.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/AST.cpp b/AST.cpp
index 605f5352..d05eaf83 100644
--- a/AST.cpp
+++ b/AST.cpp
@@ -332,6 +332,13 @@ void VariableDeclaration::checkTypeRequirements()
// sets the type.
// Note that assignments before the first declaration are legal because of the special scoping
// rules inherited from JavaScript.
+ if (m_isConstant)
+ {
+ if (!dynamic_cast<ContractDefinition const*>(getScope()))
+ BOOST_THROW_EXCEPTION(createTypeError("Illegal use of \"constant\" specifier."));
+ if ((m_type && !m_type->isValueType()) || !m_value)
+ BOOST_THROW_EXCEPTION(createTypeError("Unitialized \"constant\" variable."));
+ }
if (!m_value)
return;
if (m_type)