From 009505452b713ed2e3a8e99c5545a6e721c65495 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 6 Jun 2001 20:29:01 +0000 Subject: Initial revision git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/iCall.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 lib/VMCore/iCall.cpp (limited to 'lib/VMCore/iCall.cpp') diff --git a/lib/VMCore/iCall.cpp b/lib/VMCore/iCall.cpp new file mode 100644 index 0000000..9ff6bb6 --- /dev/null +++ b/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 ¶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; +} -- cgit v1.1