aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm.cpp4
-rw-r--r--write.cpp21
2 files changed, 14 insertions, 11 deletions
diff --git a/llvm.cpp b/llvm.cpp
index 3ccb1d7..ecfb735 100644
--- a/llvm.cpp
+++ b/llvm.cpp
@@ -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();
diff --git a/write.cpp b/write.cpp
index b5784ab..7cad2c5 100644
--- a/write.cpp
+++ b/write.cpp
@@ -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) {