diff options
-rw-r--r-- | llvm.cpp | 4 | ||||
-rw-r--r-- | write.cpp | 21 |
2 files changed, 14 insertions, 11 deletions
@@ -493,9 +493,9 @@ call(AType* retT, void* fp) if (lltype(retT) == Type::Int32Ty) ss << ((int32_t (*)())fp)(); else if (lltype(retT) == Type::FloatTy) - ss << ((float (*)())fp)(); + ss << showpoint << ((float (*)())fp)(); else if (lltype(retT) == Type::Int1Ty) - ss << ((bool (*)())fp)(); + ss << (((bool (*)())fp)() ? "#t" : "#f"); else ss << ((void* (*)())fp)(); return ss.str(); @@ -20,14 +20,17 @@ ostream& operator<<(ostream& out, const AST* ast) { -#define TRY_WRITE_LITERAL(T) \ - const ASTLiteral<T>* lit ## T = dynamic_cast<const ASTLiteral<T>*>(ast); \ - if (lit ## T) \ - return out << (lit ## T)->val; - - TRY_WRITE_LITERAL(int32_t); - TRY_WRITE_LITERAL(float); - TRY_WRITE_LITERAL(bool); + const ASTLiteral<float>* flit = dynamic_cast<const ASTLiteral<float>*>(ast); + if (flit) + return out << showpoint << flit->val; + + const ASTLiteral<int32_t>* ilit = dynamic_cast<const ASTLiteral<int32_t>*>(ast); + if (ilit) + return out << ilit->val; + + const ASTLiteral<bool>* blit = dynamic_cast<const ASTLiteral<bool>*>(ast); + if (blit) + return out << (blit->val ? "#t" : "#f"); const ASTSymbol* sym = dynamic_cast<const ASTSymbol*>(ast); if (sym) @@ -40,7 +43,7 @@ operator<<(ostream& out, const AST* ast) case AType::PRIM: return out << type->at(0); case AType::EXPR: break; // will catch Tuple case below } - } + } const ASTTuple* tup = dynamic_cast<const ASTTuple*>(ast); if (tup) { |