diff options
[IPL/T] Values now have a return value which can be parsed easily
8 files changed, 24 insertions, 0 deletions
diff --git a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Float.cpp b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Float.cpp index a286fa2..91268d7 100644 --- a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Float.cpp +++ b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Float.cpp @@ -5,6 +5,10 @@ std::string Float::Visit(LLVMVisitor& visitor) const { return visitor.Visit(*this); } +Value::T_Primitive Float::RetType() const { + return Value::T_float; +} + const double& Float::get_value() const { return this->value; } diff --git a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Float.h b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Float.h index 22cd721..0f47be1 100644 --- a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Float.h +++ b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Float.h @@ -7,6 +7,7 @@ class Float : public Value { double value; public: std::string Visit(LLVMVisitor& visitor) const override; + T_Primitive RetType() const override; const double& get_value() const; Float(double value); diff --git a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Function/BuiltInFunction.cpp b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Function/BuiltInFunction.cpp index 6d38aad..954c8da 100644 --- a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Function/BuiltInFunction.cpp +++ b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Function/BuiltInFunction.cpp @@ -5,4 +5,10 @@ std::string BuiltInFunction::Visit(LLVMVisitor& visitor) const { return visitor.Visit(*this); } +Value::T_Primitive BuiltInFunction::RetType() const { + if (args.empty()) + return T_void; + return args.front()->RetType(); +} + BuiltInFunction::BuiltInFunction(std::string name, std::deque<Value*> args) : Function(name, args) {} diff --git a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Function/BuiltInFunction.h b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Function/BuiltInFunction.h index 26fba3f..c4ea301 100644 --- a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Function/BuiltInFunction.h +++ b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Function/BuiltInFunction.h @@ -6,6 +6,7 @@ class BuiltInFunction : public Function { public: std::string Visit(LLVMVisitor& visitor) const override; + T_Primitive RetType() const override; BuiltInFunction(std::string name, std::deque<Value*> args); }; diff --git a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Function/Function.h b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Function/Function.h index 549d15e..34e3ea1 100644 --- a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Function/Function.h +++ b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Function/Function.h @@ -6,6 +6,7 @@ #include "../Value.h" class Function : public Value { +protected: std::string name; std::deque<Value*> args; diff --git a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Integer.cpp b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Integer.cpp index d7f70e3..01bbe54 100644 --- a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Integer.cpp +++ b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Integer.cpp @@ -5,6 +5,10 @@ std::string Integer::Visit(LLVMVisitor& visitor) const { return visitor.Visit(*this); } +Value::T_Primitive Integer::RetType() const { + return Value::T_integer; +} + const int& Integer::get_value() const { return this->value; } diff --git a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Integer.h b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Integer.h index 3859d1d..4a84c31 100644 --- a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Integer.h +++ b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Integer.h @@ -7,6 +7,7 @@ class Integer : public Value { int value; public: std::string Visit(LLVMVisitor& visitor) const override; + T_Primitive RetType() const override; const int& get_value() const; Integer(int value); diff --git a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Value.h b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Value.h index 8488262..0147515 100644 --- a/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Value.h +++ b/Year 2/Implementation of Programming Languages/Transpiler/src/Value/Value.h @@ -7,7 +7,13 @@ class LLVMVisitor; class Value { public: + enum T_Primitive { + T_void, + T_integer, + T_float, + }; virtual std::string Visit(LLVMVisitor& visitor) const = 0; + virtual T_Primitive RetType() const = 0; virtual ~Value() {}; }; |
