diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-22 14:17:29 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-22 14:17:29 +0000 |
commit | f12ccd62ecf08774ce599a2e15d9042500d2760a (patch) | |
tree | 12012ae296025441c3329e23a7290732cf33c36c /c_compiler/include/statement.hpp | |
parent | 190b7a0e5d45367230795ac0bdf6fc2f248ba9e1 (diff) | |
download | Compiler-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.hpp | 56 |
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; }; |