aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AST.cpp20
-rw-r--r--AST.h4
-rw-r--r--Compiler.cpp10
3 files changed, 7 insertions, 27 deletions
diff --git a/AST.cpp b/AST.cpp
index e146318c..565560ad 100644
--- a/AST.cpp
+++ b/AST.cpp
@@ -283,14 +283,6 @@ void WhileStatement::checkTypeRequirements()
m_body->checkTypeRequirements();
}
-void Continue::checkTypeRequirements()
-{
-}
-
-void Break::checkTypeRequirements()
-{
-}
-
void Return::checkTypeRequirements()
{
if (!m_expression)
@@ -326,8 +318,6 @@ void VariableDefinition::checkTypeRequirements()
void Assignment::checkTypeRequirements()
{
- //@todo lefthandside actually has to be assignable
- // add a feature to the type system to check that
m_leftHandSide->checkTypeRequirements();
if (!m_leftHandSide->isLvalue())
BOOST_THROW_EXCEPTION(createTypeError("Expression has to be an lvalue."));
@@ -368,8 +358,8 @@ void UnaryOperation::checkTypeRequirements()
void BinaryOperation::checkTypeRequirements()
{
- m_right->checkTypeRequirements();
m_left->checkTypeRequirements();
+ m_right->checkTypeRequirements();
if (m_right->getType()->isImplicitlyConvertibleTo(*m_left->getType()))
m_commonType = m_left->getType();
else if (m_left->getType()->isImplicitlyConvertibleTo(*m_right->getType()))
@@ -452,14 +442,6 @@ void Identifier::checkTypeRequirements()
if (asserts(m_referencedDeclaration))
BOOST_THROW_EXCEPTION(InternalCompilerError() << errinfo_comment("Identifier not resolved."));
- //@todo these dynamic casts here are not really nice...
- // is i useful to have an AST visitor here?
- // or can this already be done in NameAndTypeResolver?
- // the only problem we get there is that in
- // var x;
- // x = 2;
- // var y = x;
- // the type of x is not yet determined.
VariableDeclaration* variable = dynamic_cast<VariableDeclaration*>(m_referencedDeclaration);
if (variable)
{
diff --git a/AST.h b/AST.h
index f80031f4..ce9190ea 100644
--- a/AST.h
+++ b/AST.h
@@ -390,7 +390,7 @@ class Continue: public Statement
public:
Continue(Location const& _location): Statement(_location) {}
virtual void accept(ASTVisitor& _visitor) override;
- virtual void checkTypeRequirements() override;
+ virtual void checkTypeRequirements() override {}
};
class Break: public Statement
@@ -398,7 +398,7 @@ class Break: public Statement
public:
Break(Location const& _location): Statement(_location) {}
virtual void accept(ASTVisitor& _visitor) override;
- virtual void checkTypeRequirements() override;
+ virtual void checkTypeRequirements() override {}
};
class Return: public Statement
diff --git a/Compiler.cpp b/Compiler.cpp
index dfc351fa..8afd52b2 100644
--- a/Compiler.cpp
+++ b/Compiler.cpp
@@ -252,17 +252,15 @@ bool Compiler::visit(WhileStatement& _whileStatement)
bool Compiler::visit(Continue&)
{
- if (asserts(!m_continueTags.empty()))
- BOOST_THROW_EXCEPTION(InternalCompilerError() << errinfo_comment("Jump tag not available for \"continue\"."));
- m_context.appendJumpTo(m_continueTags.back());
+ if (!m_continueTags.empty())
+ m_context.appendJumpTo(m_continueTags.back());
return false;
}
bool Compiler::visit(Break&)
{
- if (asserts(!m_breakTags.empty()))
- BOOST_THROW_EXCEPTION(InternalCompilerError() << errinfo_comment("Jump tag not available for \"break\"."));
- m_context.appendJumpTo(m_breakTags.back());
+ if (!m_breakTags.empty())
+ m_context.appendJumpTo(m_breakTags.back());
return false;
}