aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/include
diff options
context:
space:
mode:
Diffstat (limited to 'c_compiler/include')
-rw-r--r--c_compiler/include/bindings.hpp4
-rw-r--r--c_compiler/include/declaration.hpp3
-rw-r--r--c_compiler/include/expression.hpp18
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