diff --git a/libsolidity/AST.cpp b/libsolidity/AST.cpp index 9d19b30c9..09c03ef6e 100644 --- a/libsolidity/AST.cpp +++ b/libsolidity/AST.cpp @@ -356,7 +356,12 @@ void VariableDeclaration::checkTypeRequirements() else { // no type declared and no previous assignment, infer the type - m_value->checkTypeRequirements(); + Identifier* identifier = dynamic_cast(m_value.get()); + if (identifier) + identifier->checkTypeRequirementsFromVariableDeclaration(); + else + m_value->checkTypeRequirements(); + TypePointer type = m_value->getType(); if (type->getCategory() == Type::Category::IntegerConstant) { @@ -484,39 +489,7 @@ void Return::checkTypeRequirements() void VariableDeclarationStatement::checkTypeRequirements() { -<<<<<<< HEAD m_variable->checkTypeRequirements(); -======= - // Variables can be declared without type (with "var"), in which case the first assignment - // sets the type. - // Note that assignments before the first declaration are legal because of the special scoping - // rules inherited from JavaScript. - if (m_variable->getValue()) - { - if (m_variable->getType()) - m_variable->getValue()->expectType(*m_variable->getType()); - else - { - // no type declared and no previous assignment, infer the type - Identifier* identifier = dynamic_cast(m_variable->getValue().get()); - if (identifier) - identifier->checkTypeRequirementsFromVariableDeclaration(); - else - m_variable->getValue()->checkTypeRequirements(); - TypePointer type = m_variable->getValue()->getType(); - if (type->getCategory() == Type::Category::IntegerConstant) - { - auto intType = dynamic_pointer_cast(type)->getIntegerType(); - if (!intType) - BOOST_THROW_EXCEPTION(m_variable->getValue()->createTypeError("Invalid integer constant " + type->toString())); - type = intType; - } - else if (type->getCategory() == Type::Category::Void) - BOOST_THROW_EXCEPTION(m_variable->createTypeError("var cannot be void type")); - m_variable->setType(type); - } - } ->>>>>>> implement overload resolution } void Assignment::checkTypeRequirements()