Making output operator for Type and Operator part of the iface.
This commit is contained in:
parent
09c69f163f
commit
1ba0e79c01
|
@ -270,34 +270,6 @@ bool CppEmitter::emit(Function const& function) {
|
||||||
return stream;
|
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<FunArg> const& funargs) {
|
bool CppEmitter::emitFunctionParams(PointerList<FunArg> const& funargs) {
|
||||||
if (funargs.empty()) return stream;
|
if (funargs.empty()) return stream;
|
||||||
|
|
||||||
|
@ -347,46 +319,6 @@ bool CppEmitter::emit(VarDeclaration const& decl) {
|
||||||
return stream;
|
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) {
|
bool CppEmitter::emit(BinaryExpression const& node) {
|
||||||
GUARDED(node.getLeft().emit(this));
|
GUARDED(node.getLeft().emit(this));
|
||||||
stream << ' ' << node.getOperator() << ' ';
|
stream << ' ' << node.getOperator() << ' ';
|
||||||
|
|
|
@ -32,3 +32,71 @@ Function *monicelli::makeMain(PointerList<Statement> *body) {
|
||||||
return new Function(proto, 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,12 +42,16 @@ enum class Type {
|
||||||
UNKNOWN
|
UNKNOWN
|
||||||
};
|
};
|
||||||
|
|
||||||
|
std::ostream& operator<<(std::ostream&, Type const&);
|
||||||
|
|
||||||
enum class Operator {
|
enum class Operator {
|
||||||
PLUS, MINUS, TIMES, DIV,
|
PLUS, MINUS, TIMES, DIV,
|
||||||
SHL, SHR,
|
SHL, SHR,
|
||||||
LT, GT, GTE, LTE, EQ
|
LT, GT, GTE, LTE, EQ
|
||||||
};
|
};
|
||||||
|
|
||||||
|
std::ostream& operator<<(std::ostream&, Operator const&);
|
||||||
|
|
||||||
class Emittable {
|
class Emittable {
|
||||||
public:
|
public:
|
||||||
virtual ~Emittable() {}
|
virtual ~Emittable() {}
|
||||||
|
|
Reference in New Issue
Block a user