diff options
author | Gordon Henriksen <gordonhenriksen@mac.com> | 2008-03-23 22:21:29 +0000 |
---|---|---|
committer | Gordon Henriksen <gordonhenriksen@mac.com> | 2008-03-23 22:21:29 +0000 |
commit | 07a45f4edbad9f21fd3a65e7a400621df170c949 (patch) | |
tree | fad9dbf6d0e4a42f7e68892c99172b00203d9fb8 /llvm/lib/VMCore/Core.cpp | |
parent | 1fdd5e9133e858ec6adc1d355c91651b504f76e8 (diff) | |
download | bcm5719-llvm-07a45f4edbad9f21fd3a65e7a400621df170c949.tar.gz bcm5719-llvm-07a45f4edbad9f21fd3a65e7a400621df170c949.zip |
Objective Caml bindings for basic block, function, global, and arg iterators.
llvm-svn: 48711
Diffstat (limited to 'llvm/lib/VMCore/Core.cpp')
-rw-r--r-- | llvm/lib/VMCore/Core.cpp | 40 |
1 files changed, 36 insertions, 4 deletions
diff --git a/llvm/lib/VMCore/Core.cpp b/llvm/lib/VMCore/Core.cpp index ac7738bf859..59b9b1ab69a 100644 --- a/llvm/lib/VMCore/Core.cpp +++ b/llvm/lib/VMCore/Core.cpp @@ -628,7 +628,7 @@ LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar) { LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar) { GlobalVariable *GV = unwrap<GlobalVariable>(GlobalVar); Module::global_iterator I = GV; - if (I == GV->getParent()->global_end()) + if (I == GV->getParent()->global_begin()) return 0; return wrap(--I); } @@ -705,7 +705,7 @@ LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn) { LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn) { Function *Func = unwrap<Function>(Fn); Module::iterator I = Func; - if (I == Func->getParent()->end()) + if (I == Func->getParent()->begin()) return 0; return wrap(--I); } @@ -767,6 +767,38 @@ LLVMValueRef LLVMGetParamParent(LLVMValueRef V) { return wrap(unwrap<Argument>(V)->getParent()); } +LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn) { + Function *Func = unwrap<Function>(Fn); + Function::arg_iterator I = Func->arg_begin(); + if (I == Func->arg_end()) + return 0; + return wrap(I); +} + +LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn) { + Function *Func = unwrap<Function>(Fn); + Function::arg_iterator I = Func->arg_end(); + if (I == Func->arg_begin()) + return 0; + return wrap(--I); +} + +LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg) { + Argument *A = unwrap<Argument>(Arg); + Function::arg_iterator I = A; + if (++I == A->getParent()->arg_end()) + return 0; + return wrap(I); +} + +LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg) { + Argument *A = unwrap<Argument>(Arg); + Function::arg_iterator I = A; + if (I == A->getParent()->arg_begin()) + return 0; + return wrap(--I); +} + /*--.. Operations on basic blocks ..........................................--*/ LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB) { @@ -781,8 +813,8 @@ LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val) { return wrap(unwrap<BasicBlock>(Val)); } -LLVMValueRef LLVMGetBasicBlockParent(LLVMValueRef V) { - return wrap(unwrap<BasicBlock>(V)->getParent()); +LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB) { + return wrap(unwrap(BB)->getParent()); } unsigned LLVMCountBasicBlocks(LLVMValueRef FnRef) { |