Merge pull request #4699 from ethereum/cleanup_VariableDeclaration

libsolidity: Remove dead code wrt. VariableDeclaration::canHaveAutoType
This commit is contained in:
chriseth 2018-08-07 16:14:41 +02:00 committed by GitHub
commit a949cffd24
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 113 additions and 115 deletions

View File

@ -297,9 +297,17 @@ void ReferencesResolver::endVisit(VariableDeclaration const& _variable)
if (_variable.annotation().type)
return;
TypePointer type;
if (_variable.typeName())
if (!_variable.typeName())
{
// This can still happen in very unusual cases where a developer uses constructs, such as
// `var a;`, however, such code will have generated errors already.
// However, we cannot blindingly solAssert() for that here, as the TypeChecker (which is
// invoking ReferencesResolver) is generating it, so the error is most likely(!) generated
// after this step.
return;
}
TypePointer type;
type = _variable.typeName()->annotation().type;
using Location = VariableDeclaration::Location;
Location varLoc = _variable.referenceLocation();
@ -421,10 +429,6 @@ void ReferencesResolver::endVisit(VariableDeclaration const& _variable)
typeError(_variable.location(), "Data location can only be given for array or struct types.");
_variable.annotation().type = type;
}
else if (!_variable.canHaveAutoType())
typeError(_variable.location(), "Explicit type needed.");
// otherwise we have a "var"-declaration whose type is resolved by the first assignment
}
void ReferencesResolver::typeError(SourceLocation const& _location, string const& _description)

View File

@ -466,11 +466,6 @@ bool VariableDeclaration::isExternalCallableParameter() const
return false;
}
bool VariableDeclaration::canHaveAutoType() const
{
return isLocalVariable() && !isCallableParameter();
}
TypePointer VariableDeclaration::type() const
{
return annotation().type;

View File

@ -696,7 +696,6 @@ public:
bool isExternalCallableParameter() const;
/// @returns true if the type of the variable does not need to be specified, i.e. it is declared
/// in the body of a function or modifier.
bool canHaveAutoType() const;
bool isStateVariable() const { return m_isStateVariable; }
bool isIndexed() const { return m_isIndexed; }
bool isConstant() const { return m_isConstant; }