From 1ba0e79c017e3f18d245e75f439211bdec1efe23 Mon Sep 17 00:00:00 2001 From: Stefano Sanfilippo Date: Thu, 12 Mar 2015 17:52:27 +0100 Subject: [PATCH] Making output operator for Type and Operator part of the iface. --- src/CppEmitter.cpp | 68 ---------------------------------------------- src/Nodes.cpp | 68 ++++++++++++++++++++++++++++++++++++++++++++++ src/Nodes.hpp | 4 +++ 3 files changed, 72 insertions(+), 68 deletions(-) diff --git a/src/CppEmitter.cpp b/src/CppEmitter.cpp index f98cc19..55acef8 100644 --- a/src/CppEmitter.cpp +++ b/src/CppEmitter.cpp @@ -270,34 +270,6 @@ bool CppEmitter::emit(Function const& function) { return stream; } -std::ostream& operator<<(std::ostream &stream, Type const& type) { - switch (type) { - case Type::INT: - stream << "int"; - break; - case Type::CHAR: - stream << "char"; - break; - case Type::FLOAT: - stream << "float"; - break; - case Type::BOOL: - stream << "bool"; - break; - case Type::DOUBLE: - stream << "double"; - break; - case Type::VOID: - stream << "void"; - break; - case Type::UNKNOWN: - stream << "???????????"; - break; - } - - return stream; -} - bool CppEmitter::emitFunctionParams(PointerList const& funargs) { if (funargs.empty()) return stream; @@ -347,46 +319,6 @@ bool CppEmitter::emit(VarDeclaration const& decl) { return stream; } -std::ostream& operator<<(std::ostream &stream, Operator op) { - switch (op) { - case Operator::PLUS: - stream << '+'; - break; - case Operator::MINUS: - stream << '-'; - break; - case Operator::TIMES: - stream << '*'; - break; - case Operator::DIV: - stream << '/'; - break; - case Operator::SHL: - stream << "<<"; - break; - case Operator::SHR: - stream << ">>"; - break; - case Operator::LT: - stream << '<'; - break; - case Operator::GT: - stream << '>'; - break; - case Operator::GTE: - stream << ">="; - break; - case Operator::LTE: - stream << "<="; - break; - case Operator::EQ: - stream << "=="; - break; - } - - return stream; -} - bool CppEmitter::emit(BinaryExpression const& node) { GUARDED(node.getLeft().emit(this)); stream << ' ' << node.getOperator() << ' '; diff --git a/src/Nodes.cpp b/src/Nodes.cpp index abdfc09..55504eb 100644 --- a/src/Nodes.cpp +++ b/src/Nodes.cpp @@ -32,3 +32,71 @@ Function *monicelli::makeMain(PointerList *body) { return new Function(proto, body); } +std::ostream& monicelli::operator<<(std::ostream &stream, Type const& type) { + switch (type) { + case Type::INT: + stream << "int"; + break; + case Type::CHAR: + stream << "char"; + break; + case Type::FLOAT: + stream << "float"; + break; + case Type::BOOL: + stream << "bool"; + break; + case Type::DOUBLE: + stream << "double"; + break; + case Type::VOID: + stream << "void"; + break; + case Type::UNKNOWN: + stream << "???????????"; + break; + } + + return stream; +} + +std::ostream& monicelli::operator<<(std::ostream &stream, Operator const& op) { + switch (op) { + case Operator::PLUS: + stream << '+'; + break; + case Operator::MINUS: + stream << '-'; + break; + case Operator::TIMES: + stream << '*'; + break; + case Operator::DIV: + stream << '/'; + break; + case Operator::SHL: + stream << "<<"; + break; + case Operator::SHR: + stream << ">>"; + break; + case Operator::LT: + stream << '<'; + break; + case Operator::GT: + stream << '>'; + break; + case Operator::GTE: + stream << ">="; + break; + case Operator::LTE: + stream << "<="; + break; + case Operator::EQ: + stream << "=="; + break; + } + + return stream; +} + diff --git a/src/Nodes.hpp b/src/Nodes.hpp index ec62ef0..f4b43d9 100644 --- a/src/Nodes.hpp +++ b/src/Nodes.hpp @@ -42,12 +42,16 @@ enum class Type { UNKNOWN }; +std::ostream& operator<<(std::ostream&, Type const&); + enum class Operator { PLUS, MINUS, TIMES, DIV, SHL, SHR, LT, GT, GTE, LTE, EQ }; +std::ostream& operator<<(std::ostream&, Operator const&); + class Emittable { public: virtual ~Emittable() {}