diff options
Diffstat (limited to 'src/llvm.cpp')
-rw-r--r-- | src/llvm.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/llvm.cpp b/src/llvm.cpp index 043b5fc..9ca6e46 100644 --- a/src/llvm.cpp +++ b/src/llvm.cpp @@ -94,6 +94,8 @@ struct LLVMEngine : public Engine { if (t->head()->str() == "Int") return Type::getInt32Ty(context); if (t->head()->str() == "Float") return Type::getFloatTy(context); if (t->head()->str() == "String") return PointerType::get(Type::getInt8Ty(context), NULL); + if (t->head()->str() == "Quote") return PointerType::get(Type::getInt8Ty(context), NULL); + if (t->head()->str() == "Lexeme") return PointerType::get(Type::getInt8Ty(context), NULL); throw Error(t->loc, string("Unknown primitive type `") + t->str() + "'"); } else if (t->kind == AType::EXPR && t->head()->str() == "Fn") { AType::const_iterator i = t->begin(); @@ -230,6 +232,8 @@ struct LLVMEngine : public Engine { ss << "\""; } else if (retT->head()->str() == "Lexeme") { ss << ((char* (*)())fp)(); + } else if (retT->head()->str() == "Quote") { + ss << "(quote " << ((char* (*)())fp)() << ")"; } else if (t != Type::getVoidTy(context)) { ss << ((void* (*)())fp)(); } else { |