aboutsummaryrefslogtreecommitdiffstats
path: root/src/llvm.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2010-12-29 22:50:20 +0000
committerDavid Robillard <d@drobilla.net>2010-12-29 22:50:20 +0000
commit2eda11ca28589991471ff3251cccc2471424770e (patch)
treea763edd57dcdcabba3f5eccf5af23f52d90b1eca /src/llvm.cpp
parent0076c050fb12c92a35b673d63fca82d5cff63bdb (diff)
downloadresp-2eda11ca28589991471ff3251cccc2471424770e.tar.gz
resp-2eda11ca28589991471ff3251cccc2471424770e.tar.bz2
resp-2eda11ca28589991471ff3251cccc2471424770e.zip
Destructuring (i.e. working `match').
git-svn-id: http://svn.drobilla.net/resp/resp@374 ad02d1e2-f140-0410-9f75-f8b11f17cedd
Diffstat (limited to 'src/llvm.cpp')
-rw-r--r--src/llvm.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/llvm.cpp b/src/llvm.cpp
index cc4bf47..28d6f36 100644
--- a/src/llvm.cpp
+++ b/src/llvm.cpp
@@ -62,6 +62,7 @@ struct LLVMEngine : public Engine {
void eraseFn(CEnv& cenv, CFunc f);
CVal compileCall(CEnv& cenv, CFunc f, const ATuple* funcT, const vector<CVal>& args);
+ CVal compileCast(CEnv& cenv, CVal v, const AST* t);
CVal compileCons(CEnv& cenv, const ATuple* type, CVal rtti, const vector<CVal>& fields);
CVal compileDot(CEnv& cenv, CVal tup, int32_t index);
CVal compileGlobalSet(CEnv& cenv, const string& s, CVal v, const AST* t);
@@ -207,6 +208,12 @@ LLVMEngine::compileCall(CEnv& cenv, CFunc f, const ATuple* funcT, const vector<C
}
CVal
+LLVMEngine::compileCast(CEnv& cenv, CVal v, const AST* t)
+{
+ return builder.CreateBitCast(llVal(v), llType(t), "cast");
+}
+
+CVal
LLVMEngine::compileCons(CEnv& cenv, const ATuple* type, CVal rtti, const vector<CVal>& fields)
{
// Find size of memory required