diff options
Diffstat (limited to 'c_compiler/include')
-rw-r--r-- | c_compiler/include/bindings.hpp | 4 | ||||
-rw-r--r-- | c_compiler/include/declaration.hpp | 3 | ||||
-rw-r--r-- | c_compiler/include/expression.hpp | 18 |
3 files changed, 23 insertions, 2 deletions
diff --git a/c_compiler/include/bindings.hpp b/c_compiler/include/bindings.hpp index d99d97b..42d52e1 100644 --- a/c_compiler/include/bindings.hpp +++ b/c_compiler/include/bindings.hpp @@ -15,6 +15,7 @@ struct DeclarationData { TypePtr type; int stack_position; + std::vector<int> array_sizes; }; // stores bindings for the current scope and where they are in the stack @@ -31,7 +32,8 @@ private: public: Bindings(); - void insertBinding(const std::string &id, TypePtr type, const int &stack_position); + void insertBinding(const std::string &id, const TypePtr &type, const int &stack_position); + void insertBinding(const std::string &id, const TypePtr &type, const int &stack_position, const std::vector<int> array_sizes); int insertStringLiteral(const std::string &string_literal); void increaseStackPosition(); void increaseStackPosition(const int &position); diff --git a/c_compiler/include/declaration.hpp b/c_compiler/include/declaration.hpp index 9fe4db2..ef45737 100644 --- a/c_compiler/include/declaration.hpp +++ b/c_compiler/include/declaration.hpp @@ -69,6 +69,9 @@ public: virtual Bindings localAsm(Bindings bindings, int &label_count) const; virtual void countDeclarations(int &declaration_count) const; virtual std::string getId() const; + + int getSize() const; + DeclarationPtr getNextArrayDeclaration() const; }; #endif diff --git a/c_compiler/include/expression.hpp b/c_compiler/include/expression.hpp index c784de7..6bade38 100644 --- a/c_compiler/include/expression.hpp +++ b/c_compiler/include/expression.hpp @@ -14,7 +14,7 @@ typedef std::shared_ptr<Expression> ExpressionPtr; class Expression : public Node { -private: +protected: ExpressionPtr next_expression_; public: @@ -74,6 +74,8 @@ public: virtual void expressionDepth(int &depth_count) const; virtual void stackPosition(Bindings bindings, int &depth_count) const; virtual TypePtr getType(const Bindings &bindings) const; + + ExpressionPtr getIndex() const; }; class PostfixFunctionCall : public UnaryExpression @@ -312,4 +314,18 @@ public: virtual TypePtr getType(const Bindings &bindings) const; }; +class Initializer : public Expression +{ +private: + ExpressionPtr next_initializer_; +public: + Initializer(Expression *next_initializer); + + virtual Bindings printAsm(Bindings bindings, int &label_count) const; + virtual TypePtr getType(const Bindings &bindings) const; + + void printInitializerAsm(Bindings &bindings, int &label_count, int position, const std::vector<int> &iteration_vector, const TypePtr &type) const; + ExpressionPtr getNext() const; +}; + #endif |