diff options
Diffstat (limited to 'MLKLLVMCompiler.mm')
-rw-r--r-- | MLKLLVMCompiler.mm | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/MLKLLVMCompiler.mm b/MLKLLVMCompiler.mm index 18efccb..fdb4844 100644 --- a/MLKLLVMCompiler.mm +++ b/MLKLLVMCompiler.mm @@ -40,23 +40,14 @@ static IRBuilder builder; static FunctionPassManager *fpm; -static BasicBlock *process (Value **value, - id object, - MLKLexicalContext *context, - BasicBlock *block) -{ - -} - - @implementation MLKLLVMCompiler --(void) initialize ++(void) initialize { module = new llvm::Module ("MLKLLVMModule"); execution_engine = ExecutionEngine::create (module); } --(id) compile:(id)object ++(id) compile:(id)object inContext:(MLKLexicalContext *)context { Value *v = NULL; @@ -74,7 +65,10 @@ static BasicBlock *process (Value **value, block = BasicBlock::Create ("entry", function); builder.SetInsertPoint (block); - process (&v, object, context, block); + v = [self processForm:[MLKForm formWithObject:object + inContext:context + forCompiler:self] + inBlock:&block]; builder.CreateRet (v); verifyFunction (*function); @@ -85,8 +79,23 @@ static BasicBlock *process (Value **value, return fn (); } --(void) processTopLevelForm:(id)object ++(void) processTopLevelForm:(id)object { //FIXME } + ++(Value *) processForm:(MLKForm *)form + inBlock:(BasicBlock **)block +{ + return [form processForLLVMInBlock:block]; +} +@end + + +@implementation MLKForm (MLKLLVMCompilation) +-(Value *) processForLLVMInBlock:(BasicBlock **)block +{ + NSLog (@"WARNING: Unrecognised form type: %@", self); + return NULL; +} @end |