diff options
author | Chris Lattner <sabre@nondot.org> | 2001-06-06 20:29:01 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2001-06-06 20:29:01 +0000 |
commit | 2f7c963559dbc6dbda43df77a090a93f94c6625e (patch) | |
tree | 095d7b8910fd91af079a547362923a3ed877ded1 /llvm/lib/VMCore/iCall.cpp | |
parent | 97724f18c79c7cc81ced24239eb5e883bf1398ef (diff) | |
download | bcm5719-llvm-2f7c963559dbc6dbda43df77a090a93f94c6625e.tar.gz bcm5719-llvm-2f7c963559dbc6dbda43df77a090a93f94c6625e.zip |
Initial revision
llvm-svn: 2
Diffstat (limited to 'llvm/lib/VMCore/iCall.cpp')
-rw-r--r-- | llvm/lib/VMCore/iCall.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/llvm/lib/VMCore/iCall.cpp b/llvm/lib/VMCore/iCall.cpp new file mode 100644 index 00000000000..9ff6bb6fc8c --- /dev/null +++ b/llvm/lib/VMCore/iCall.cpp @@ -0,0 +1,48 @@ +//===-- iCall.cpp - Implement the Call & Invoke instructions -----*- C++ -*--=// +// +// This file implements the call and invoke instructions. +// +//===----------------------------------------------------------------------===// + +#include "llvm/iOther.h" +#include "llvm/DerivedTypes.h" +#include "llvm/Method.h" + +CallInst::CallInst(Method *m, vector<Value*> ¶ms, + const string &Name) + : Instruction(m->getReturnType(), Instruction::Call, Name), M(m, this) { + + const MethodType* MT = M->getMethodType(); + const MethodType::ParamTypes &PL = MT->getParamTypes(); + assert(params.size() == PL.size()); +#ifndef NDEBUG + MethodType::ParamTypes::const_iterator It = PL.begin(); +#endif + for (unsigned i = 0; i < params.size(); i++) { + assert(*It++ == params[i]->getType()); + Params.push_back(Use(params[i], this)); + } +} + +CallInst::CallInst(const CallInst &CI) + : Instruction(CI.getType(), Instruction::Call), M(CI.M, this) { + for (unsigned i = 0; i < CI.Params.size(); i++) + Params.push_back(Use(CI.Params[i], this)); +} + +void CallInst::dropAllReferences() { + M = 0; + Params.clear(); +} + +bool CallInst::setOperand(unsigned i, Value *Val) { + if (i > Params.size()) return false; + if (i == 0) { + assert(Val->getValueType() == Value::MethodVal); + M = (Method*)Val; + } else { + // TODO: assert = method arg type + Params[i-1] = Val; + } + return true; +} |