blob: e482814ed41984f1a5e0ed5c26fa1da971355519 [file] [log] [blame]
//===-- VMField.h - Compiler representation of a Java field -----*- 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 Field class that represents a
// compile time representation of a Java class field (java.lang.Field).
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_JAVA_VMFIELD_H
#define LLVM_JAVA_VMFIELD_H
#include <llvm/Java/ClassFile.h>
#include <cassert>
namespace llvm {
class Constant;
class GlobalVariable;
}
namespace llvm { namespace Java {
class VMClass;
class VMField {
const VMClass* parent_;
const VMClass* class_;
const Field* field_;
union {
int index;
GlobalVariable* global;
} data_;
friend class VMClass;
// Interface for VMClass.
// Create static field reference.
VMField(const VMClass* parent, const Field* field);
// Create member field reference.
VMField(const VMClass* parent, const Field* field, int index);
public:
const std::string& getName() const { return field_->getName()->str(); }
const std::string& getDescriptor() const {
return field_->getDescriptor()->str();
}
bool isStatic() const { return field_->isStatic(); }
const VMClass* getParent() const { return parent_; }
const VMClass* getClass() const { return class_; }
int getMemberIndex() const {
assert(!isStatic() && "Field should not be static!");
return data_.index;
}
GlobalVariable* getGlobal() const {
assert(isStatic() && "Field should be static!");
return data_.global;
}
llvm::Constant* buildFieldDescriptor() const;
llvm::Constant* buildFieldOffset() const;
};
} } // namespace llvm::Java
#endif//LLVM_JAVA_VMFIELD_H