aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/include/statement.hpp
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-03-22 14:17:29 +0000
committerYann Herklotz <ymherklotz@gmail.com>2017-03-22 14:17:29 +0000
commitf12ccd62ecf08774ce599a2e15d9042500d2760a (patch)
tree12012ae296025441c3329e23a7290732cf33c36c /c_compiler/include/statement.hpp
parent190b7a0e5d45367230795ac0bdf6fc2f248ba9e1 (diff)
downloadCompiler-f12ccd62ecf08774ce599a2e15d9042500d2760a.tar.gz
Compiler-f12ccd62ecf08774ce599a2e15d9042500d2760a.zip
Adding test and break working
Diffstat (limited to 'c_compiler/include/statement.hpp')
-rw-r--r--c_compiler/include/statement.hpp56
1 files changed, 48 insertions, 8 deletions
diff --git a/c_compiler/include/statement.hpp b/c_compiler/include/statement.hpp
index 887ffc5..ba12911 100644
--- a/c_compiler/include/statement.hpp
+++ b/c_compiler/include/statement.hpp
@@ -53,14 +53,14 @@ public:
};
-class SelectionStatement : public Statement
+class IfElseStatement : public Statement
{
protected:
ExpressionPtr condition_;
StatementPtr if_;
StatementPtr else_;
public:
- SelectionStatement(Expression* condition, Statement* _if, Statement* _else = nullptr);
+ IfElseStatement(Expression* condition, Statement* _if, Statement* _else = nullptr);
virtual void print() const;
virtual void printXml() const;
@@ -91,20 +91,58 @@ public:
class JumpStatement : public Statement
{
-protected:
- ExpressionPtr expression_;
public:
- JumpStatement(Expression* expression = nullptr);
-
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const = 0;
+
virtual void print() const;
virtual void printXml() const;
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+
+ virtual void countVariables(unsigned &var_count) const;
+ virtual void countArguments(unsigned &argument_count) const;
+ virtual void countExpressionDepth(unsigned &depth_count) const;
+};
+
+
+class ReturnStatement : public JumpStatement
+{
+private:
+ ExpressionPtr expression_;
+public:
+ ReturnStatement(Expression* expression = nullptr);
+
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
virtual void countVariables(unsigned& var_count) const;
virtual void countArguments(unsigned& argument_count) const;
virtual void countExpressionDepth(unsigned& depth_count) const;
};
+class BreakStatement : public JumpStatement
+{
+public:
+ BreakStatement();
+
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &) const;
+};
+
+class ContinueStatement : public JumpStatement
+{
+public:
+ ContinueStatement();
+
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &) const;
+};
+
+class GotoStatement : public JumpStatement
+{
+private:
+ std::string label_;
+public:
+ GotoStatement(const std::string &label);
+
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &) const;
+};
+
class IterationStatement : public Statement
{
@@ -125,8 +163,10 @@ public:
class WhileLoop : public IterationStatement
{
+private:
+ bool is_while_;
public:
- WhileLoop(Expression* condition, Statement* statement);
+ WhileLoop(Expression* condition, Statement* statement, const bool &is_while = true);
virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
};