diff options
author | Matthias Benkard <mulk@minimulk.mst-plus> | 2008-08-12 21:48:22 +0200 |
---|---|---|
committer | Matthias Benkard <mulk@minimulk.mst-plus> | 2008-08-12 21:48:22 +0200 |
commit | da4349e4db58b7ec058387deaccbe4f5b2b28dd1 (patch) | |
tree | cf401f8f86c5d162e2d55a58b7792870939b4647 /MLKLexicalContext-MLKLLVMCompilation.mm | |
parent | fc7674191d1d07f078f1f25c91dc7941ff3a9cec (diff) | |
parent | b9311b05909f586b364e771b3e0f48ddfdfd0d76 (diff) |
Merge branch 'master' of http://matthias.benkard.de/code/mulklisp
Diffstat (limited to 'MLKLexicalContext-MLKLLVMCompilation.mm')
-rw-r--r-- | MLKLexicalContext-MLKLLVMCompilation.mm | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/MLKLexicalContext-MLKLLVMCompilation.mm b/MLKLexicalContext-MLKLLVMCompilation.mm new file mode 100644 index 0000000..7e81ccb --- /dev/null +++ b/MLKLexicalContext-MLKLLVMCompilation.mm @@ -0,0 +1,75 @@ +/* -*- mode: objc; coding: utf-8 -*- */ +/* Toilet Lisp, a Common Lisp subset for the Étoilé runtime. + * Copyright (C) 2008 Matthias Andreas Benkard. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#import "MLKLexicalContext-MLKLLVMCompilation.h" + +#import <Foundation/NSString.h> +#import <Foundation/NSValue.h> + +#include <vector> +#include <llvm/Value.h> +#include <llvm/BasicBlock.h> +using namespace llvm; +using namespace std; + + +@implementation MLKLexicalContext (MLKLLVMCompilation) +-(void) setVariableHeapAllocation:(BOOL)heapp + forSymbol:(id)name +{ + [self setDeepProperty:[NSNumber numberWithBool:heapp] + forVariable:name + key:@"LLVM.heap-flag"]; +} + +-(BOOL) variableHeapAllocationForSymbol:(id)name; +{ + id flag = [self deepPropertyForVariable:name + key:@"LLVM.heap-flag"]; + + return (flag && [flag boolValue]); +} + +-(Value *) functionCellForSymbol:(id)name +{ + return (Value *) [[self deepPropertyForFunction:name + key:@"LLVM.function-cell"] + pointerValue]; +} + +-(Value *) closureDataPointerForSymbol:(id)name +{ + return (Value *) [[self deepPropertyForFunction:name + key:@"LLVM.closure-data-pointer"] + pointerValue]; +} + +-(Value *) bindingForSymbol:(id)name +{ + return (Value *) [[self deepPropertyForVariable:name + key:@"LLVM.variable-binding"] + pointerValue]; +} + +-(Value *) valueForSymbol:(id)name +{ + return (Value *) [[self deepPropertyForVariable:name + key:@"LLVM.variable-value"] + pointerValue]; +} +@end |