blob: 62e13b0e4cada66d2a154a8ac8ffc0ced631e496 [file] [log] [blame]
//===-- VMMethod.h - Compiler representation of a Java method ---*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file was developed by the LLVM research group and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file contains the declaration of the Method class that represents a
// compile time representation of a Java class method (java.lang.Method).
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_JAVA_VMMETHOD_H
#define LLVM_JAVA_VMMETHOD_H
#include <llvm/Java/ClassFile.h>
namespace llvm {
class Constant;
class Function;
class FunctionType;
}
namespace llvm { namespace Java {
class VMClass;
class VMMethod {
const VMClass* parent_;
const Method* method_;
Function* function_;
Function* bridgeFunction_;
int index_;
void init();
friend class VMClass;
// Interface for VMClass.
// Create statically bound method reference.
VMMethod(const VMClass* parent, const Method* method);
// Create dynamically bound method reference.
VMMethod(const VMClass* parent, const Method* method, int index);
public:
const VMClass* getParent() const { return parent_; }
const Method* getMethod() const { return method_; }
Function* getFunction() const { return function_; }
int getMethodIndex() const { return index_; }
bool isStaticallyBound() const {
return isStatic() || isPrivate() || getName()[0] == '<';
}
bool isDynamicallyBound() const { return !isStaticallyBound(); }
bool isAbstract() const { return method_->isAbstract(); }
bool isNative() const { return method_->isNative(); }
bool isPrivate() const { return method_->isPrivate(); }
bool isStatic() const { return method_->isStatic(); }
// FIXME: remove when transition is complete.
const std::string& getName() const { return method_->getName()->str(); }
const std::string& getDescriptor() const {
return method_->getDescriptor()->str();
}
std::string getNameAndDescriptor() const {
return getName() + getDescriptor();
}
llvm::Constant* buildMethodDescriptor() const;
llvm::Constant* getBridgeFunction() const;
};
} } // namespace llvm::Java
#endif//LLVM_JAVA_VMMETHOD_H