|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectorg.oklab.compiler.nametable.content.ContentPoolManager
public class ContentPoolManager
クラスファイル内のContent Pool領域を管理する.
クラスファイルには、コンテンツプール(Content Pool)という領域がある.これは
クラス名、メソッド名、クラス型、文字列、定数など一元管理している領域である.
これにより、メソッド領域など別の領域は、文字列などをクラスファイルにバラバラ
に置くのではなく、この領域への参照(ポインタ)を持って利用するようにしている.
コンテントプールのデータであるコンテント型オブジェクトをこのクラス内で管理し
ているため、コンテントプールを利用したい場合は、このクラスとプリミティブや
java.lang.Stringオブジェクトを使うだけでよく、コンテント型の
オブジェクトを生成必要はない.
IntermediateLangManager,
VM Spec The class File Format| フィールドの概要 | |
|---|---|
private static int |
compileTargetClassRef
|
private static int |
compileTargetSuperClassRef
|
private java.util.HashMap<java.lang.Integer,ContentClass> |
contentClass
|
private java.util.Map<java.lang.Integer,Content> |
contentDouble
|
private java.util.Map<java.lang.Integer,ContentFieldRef> |
contentFieldRef
|
private java.util.Map<java.lang.Integer,Content> |
contentFloat
|
private java.util.Map<java.lang.Integer,ContentInteger> |
contentInteger
|
private java.util.Map<java.lang.Integer,Content> |
contentInterfaceMethodRef
|
private java.util.Map<java.lang.Integer,Content> |
contentLong
|
private java.util.Map<java.lang.Integer,ContentMethodRef> |
contentMethodRef
|
private java.util.Map<java.lang.Integer,ContentNameAndType> |
contentNameAndType
|
private java.util.Map<java.lang.String,Content> |
contentString
|
private java.util.Map<java.lang.String,ContentUTF8> |
contentUTF8
|
private static ContentPoolManager |
manager
|
private static java.util.List<Content> |
poolArea
|
| コンストラクタの概要 | |
|---|---|
private |
ContentPoolManager()
コンテント型のバッファを初期化する. |
| メソッドの概要 | |
|---|---|
static void |
emitCode(java.io.DataOutputStream classFile)
コンテントプール領域をクラスファイルに出力する. |
void |
generateClassRef(java.lang.String compileTargetSuperClass,
java.lang.String compileTargetClass)
入力ソースコードのクラスクラス名の参照を作成する. |
int |
getCompileTargetClassRef()
入力ソースコードクラスのインデックスを返す. |
int |
getCompileTargetSuperClassRef()
親クラスのインデックスを返す. |
static ContentPoolManager |
getInstance()
唯一のオブジェクトを返す. |
void |
init()
コンテントプールの格納されているデータを初期化する. |
static int |
putClass(java.lang.String inputFilename)
コンテントプールにクラスを登録する. |
static int |
putFieldRef(int nameIndex,
int descriptorIndex)
ソースコード内のフィールド参照登録インタフェース. |
static int |
putInteger(int value)
コンテントプールに数値型を登録する. |
static int |
putMethodRef(int nameIndex,
int descriptorIndex)
ソースコード内のメソッド参照登録インタフェース. |
static int |
putMethodRef(int classIndex,
int nameIndex,
int descriptorIndex)
標準ライブラリや外部ライブラリ用のメソッド参照登録インタフェース. |
private static int |
putNameAndType(int nameIndex,
int descriptorIndex)
メソッドとフィールドをコンテントプールに格納する際に使う. |
static int |
putUTF8(java.lang.String UTF8String)
コンテントプールに文字列を登録する. |
static java.lang.String |
toDebugString()
デバッグ用のtoStringメソッド. |
| クラス java.lang.Object から継承されたメソッド |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| フィールドの詳細 |
|---|
private static ContentPoolManager manager
private static java.util.List<Content> poolArea
private static int compileTargetClassRef
private static int compileTargetSuperClassRef
private java.util.HashMap<java.lang.Integer,ContentClass> contentClass
private java.util.Map<java.lang.Integer,ContentFieldRef> contentFieldRef
private java.util.Map<java.lang.Integer,ContentMethodRef> contentMethodRef
private java.util.Map<java.lang.Integer,Content> contentInterfaceMethodRef
private java.util.Map<java.lang.String,Content> contentString
private java.util.Map<java.lang.Integer,ContentInteger> contentInteger
private java.util.Map<java.lang.Integer,Content> contentFloat
private java.util.Map<java.lang.Integer,Content> contentLong
private java.util.Map<java.lang.Integer,Content> contentDouble
private java.util.Map<java.lang.Integer,ContentNameAndType> contentNameAndType
private java.util.Map<java.lang.String,ContentUTF8> contentUTF8
| コンストラクタの詳細 |
|---|
private ContentPoolManager()
| メソッドの詳細 |
|---|
public static ContentPoolManager getInstance()
public void init()
IntermediateLangManager 内の init
public void generateClassRef(java.lang.String compileTargetSuperClass,
java.lang.String compileTargetClass)
throws CompileError
compileTargetSuperClass - 親クラス. 通常はjava.lang.Object.compileTargetClass - 入力ソースコードのファイル名.
CompileError - クラス名の参照を作成するのに失敗したら、発生する.public int getCompileTargetSuperClassRef()
java.lang.Object.public int getCompileTargetClassRef()
java.lang.Object.
public static void emitCode(java.io.DataOutputStream classFile)
throws java.io.IOException
classFile - 出力クラスファイル.
java.io.IOException - コンテントプール領域の出力に失敗したら、発生する.
private static int putNameAndType(int nameIndex,
int descriptorIndex)
nameIndex - 名前のインデックス.descriptorIndex - 詳細情報のインデックス.
public static int putMethodRef(int classIndex,
int nameIndex,
int descriptorIndex)
classIndex - クラス名のインデックス.nameIndex - 名前のインデックス.descriptorIndex - 詳細情報のインデックス.
public static int putMethodRef(int nameIndex,
int descriptorIndex)
nameIndex - 名前のインデックス.descriptorIndex - 詳細情報のインデックス.
public static int putFieldRef(int nameIndex,
int descriptorIndex)
nameIndex - 名前のインデックス.descriptorIndex - 詳細情報のインデックス.
public static int putInteger(int value)
value - 数値.
public static int putClass(java.lang.String inputFilename)
throws CompileError
inputFilename - クラス名.
CompileError - 登録に失敗した時に発生する.
public static int putUTF8(java.lang.String UTF8String)
throws CompileError
UTF8String - 文字列.
CompileError - 登録に失敗した時に発生する.public static java.lang.String toDebugString()
|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||