org.oklab.compiler.nametable.content
クラス ContentPoolManager

java.lang.Object
  上位を拡張 org.oklab.compiler.nametable.content.ContentPoolManager
すべての実装されたインタフェース:
IntermediateLangManager

public class ContentPoolManager
extends java.lang.Object
implements IntermediateLangManager

クラスファイル内のContent Pool領域を管理する. クラスファイルには、コンテンツプール(Content Pool)という領域がある.これは クラス名、メソッド名、クラス型、文字列、定数など一元管理している領域である. これにより、メソッド領域など別の領域は、文字列などをクラスファイルにバラバラ に置くのではなく、この領域への参照(ポインタ)を持って利用するようにしている. コンテントプールのデータであるコンテント型オブジェクトをこのクラス内で管理し ているため、コンテントプールを利用したい場合は、このクラスとプリミティブや java.lang.Stringオブジェクトを使うだけでよく、コンテント型の オブジェクトを生成必要はない.

導入されたバージョン:
1.0
バージョン:
1.01
作成者:
Satoshi Okita satoshiokita@gmail.com
関連項目:
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
 

フィールドの詳細

manager

private static ContentPoolManager manager

poolArea

private static java.util.List<Content> poolArea

compileTargetClassRef

private static int compileTargetClassRef

compileTargetSuperClassRef

private static int compileTargetSuperClassRef

contentClass

private java.util.HashMap<java.lang.Integer,ContentClass> contentClass

contentFieldRef

private java.util.Map<java.lang.Integer,ContentFieldRef> contentFieldRef

contentMethodRef

private java.util.Map<java.lang.Integer,ContentMethodRef> contentMethodRef

contentInterfaceMethodRef

private java.util.Map<java.lang.Integer,Content> contentInterfaceMethodRef

contentString

private java.util.Map<java.lang.String,Content> contentString

contentInteger

private java.util.Map<java.lang.Integer,ContentInteger> contentInteger

contentFloat

private java.util.Map<java.lang.Integer,Content> contentFloat

contentLong

private java.util.Map<java.lang.Integer,Content> contentLong

contentDouble

private java.util.Map<java.lang.Integer,Content> contentDouble

contentNameAndType

private java.util.Map<java.lang.Integer,ContentNameAndType> contentNameAndType

contentUTF8

private java.util.Map<java.lang.String,ContentUTF8> contentUTF8
コンストラクタの詳細

ContentPoolManager

private ContentPoolManager()
コンテント型のバッファを初期化する.

メソッドの詳細

getInstance

public static ContentPoolManager getInstance()
唯一のオブジェクトを返す.

戻り値:
唯一のオブジェクトを返す.

init

public void init()
コンテントプールの格納されているデータを初期化する.

定義:
インタフェース IntermediateLangManager 内の init

generateClassRef

public void generateClassRef(java.lang.String compileTargetSuperClass,
                             java.lang.String compileTargetClass)
                      throws CompileError
入力ソースコードのクラスクラス名の参照を作成する.

パラメータ:
compileTargetSuperClass - 親クラス. 通常はjava.lang.Object.
compileTargetClass - 入力ソースコードのファイル名.
例外:
CompileError - クラス名の参照を作成するのに失敗したら、発生する.

getCompileTargetSuperClassRef

public int getCompileTargetSuperClassRef()
親クラスのインデックスを返す.

戻り値:
親クラス. 通常はjava.lang.Object.

getCompileTargetClassRef

public int getCompileTargetClassRef()
入力ソースコードクラスのインデックスを返す.

戻り値:
親クラス. 通常はjava.lang.Object.

emitCode

public static void emitCode(java.io.DataOutputStream classFile)
                     throws java.io.IOException
コンテントプール領域をクラスファイルに出力する.

パラメータ:
classFile - 出力クラスファイル.
例外:
java.io.IOException - コンテントプール領域の出力に失敗したら、発生する.

putNameAndType

private static int putNameAndType(int nameIndex,
                                  int descriptorIndex)
メソッドとフィールドをコンテントプールに格納する際に使う.

パラメータ:
nameIndex - 名前のインデックス.
descriptorIndex - 詳細情報のインデックス.
戻り値:
コンテントプールの現在の個数を返す.

putMethodRef

public static int putMethodRef(int classIndex,
                               int nameIndex,
                               int descriptorIndex)
標準ライブラリや外部ライブラリ用のメソッド参照登録インタフェース.

パラメータ:
classIndex - クラス名のインデックス.
nameIndex - 名前のインデックス.
descriptorIndex - 詳細情報のインデックス.
戻り値:
コンテントプールの現在の個数を返す.

putMethodRef

public static int putMethodRef(int nameIndex,
                               int descriptorIndex)
ソースコード内のメソッド参照登録インタフェース.

パラメータ:
nameIndex - 名前のインデックス.
descriptorIndex - 詳細情報のインデックス.
戻り値:
コンテントプールの現在の個数を返す.

putFieldRef

public static int putFieldRef(int nameIndex,
                              int descriptorIndex)
ソースコード内のフィールド参照登録インタフェース.

パラメータ:
nameIndex - 名前のインデックス.
descriptorIndex - 詳細情報のインデックス.
戻り値:
コンテントプールの現在の個数を返す.

putInteger

public static int putInteger(int value)
コンテントプールに数値型を登録する.

パラメータ:
value - 数値.
戻り値:
コンテントプールの現在の個数を返す.

putClass

public static int putClass(java.lang.String inputFilename)
                    throws CompileError
コンテントプールにクラスを登録する.

パラメータ:
inputFilename - クラス名.
戻り値:
コンテントプールの現在の個数を返す.
例外:
CompileError - 登録に失敗した時に発生する.

putUTF8

public static int putUTF8(java.lang.String UTF8String)
                   throws CompileError
コンテントプールに文字列を登録する.

パラメータ:
UTF8String - 文字列.
戻り値:
コンテントプールの現在の個数を返す.
例外:
CompileError - 登録に失敗した時に発生する.

toDebugString

public static java.lang.String toDebugString()
デバッグ用のtoStringメソッド. poolAreaをすべて表示する.

戻り値:
コンテントプールに格納されているデータ.