fix rebase errors

This commit is contained in:
Lu Guanqun 2015-03-08 17:26:36 -05:00
parent 5dcee599f1
commit ff4d2cc7dc

39
AST.cpp
View File

@ -356,7 +356,12 @@ void VariableDeclaration::checkTypeRequirements()
else else
{ {
// no type declared and no previous assignment, infer the type // no type declared and no previous assignment, infer the type
m_value->checkTypeRequirements(); Identifier* identifier = dynamic_cast<Identifier*>(m_value.get());
if (identifier)
identifier->checkTypeRequirementsFromVariableDeclaration();
else
m_value->checkTypeRequirements();
TypePointer type = m_value->getType(); TypePointer type = m_value->getType();
if (type->getCategory() == Type::Category::IntegerConstant) if (type->getCategory() == Type::Category::IntegerConstant)
{ {
@ -484,39 +489,7 @@ void Return::checkTypeRequirements()
void VariableDeclarationStatement::checkTypeRequirements() void VariableDeclarationStatement::checkTypeRequirements()
{ {
<<<<<<< HEAD
m_variable->checkTypeRequirements(); 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<Identifier*>(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<IntegerConstantType const>(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() void Assignment::checkTypeRequirements()