org.oklab.compiler.nametable
クラス Method

java.lang.Object
  上位を拡張 org.oklab.compiler.syntaxtree.Node
      上位を拡張 org.oklab.compiler.syntaxtree.scope.Scope
          上位を拡張 org.oklab.compiler.nametable.Method

public class Method
extends Scope

メソッドの情報とメソッド内(ブロック内)の実行コードを保持するクラス.

導入されたバージョン:
1.0
バージョン:
1.01
作成者:
Satoshi Okita satoshiokita@gmail.com
関連項目:
VM Spec ClassFile

フィールドの概要
private static int ACC_ABSTRACT
           
private static int ACC_FINAL
           
private static int ACC_NATIVE
           
private static int ACC_PRIVATE
           
private static int ACC_PROTECTED
           
private static int ACC_PUBLIC
           
private static int ACC_STATIC
           
private static int ACC_STRICT
           
private static int ACC_SYNCHRONIZED
           
private  Block codeInBlock
           
 java.lang.String descriptorBuffer
          メソッドマネージャに登録するための識別子.
private  int descriptorIndex
           
private  java.lang.String filename
           
private  int nameIndex
           
private  int referenceIndex
           
private  int returnType
           
 
クラス org.oklab.compiler.syntaxtree.Node から継承されたフィールド
parent
 
コンストラクタの概要
Method(int returnType, java.lang.String methodName, SourceReader sReader)
          メソッドの情報を中間表現で保持する際に、そのメソッドの構文解析も おこなうので、このコンストラクタを生成するときに実行する.
Method(int returnType, java.lang.String methodName, java.lang.String descriptor)
          メソッドの情報を中間表現で保持する際に利用する.このメソッドは構文解析を行わないため あらかじめ実装してある標準ライブラリの読み込みなどに利用される.
 
メソッドの概要
(package private)  void emitCode(java.io.DataOutputStream classfile)
          このメソッド情報をファイルに放つ.
(package private)  int getReferenceIndex()
          参照先の索引を取得する.
 int getReturnType()
          戻り値の型を取得する.
private  java.lang.String parseParameter(java.lang.String methodName, SourceReader sReader)
          メソッド引数の構文解析.
protected  Expression parseRefferenceOrCall(Node node, java.lang.String curentIdentifer, SourceReader sReader)
          参照か関数呼び出しのどちらであるかを解析する.
 
クラス org.oklab.compiler.syntaxtree.scope.Scope から継承されたメソッド
createReference, localVariableCount, putLocalVariable
 
クラス org.oklab.compiler.syntaxtree.Node から継承されたメソッド
parseExpression, parseFactor, parseStatement, parseTerm, setParent
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

ACC_PUBLIC

private static final int ACC_PUBLIC
関連項目:
定数フィールド値

ACC_PRIVATE

private static final int ACC_PRIVATE
関連項目:
定数フィールド値

ACC_PROTECTED

private static final int ACC_PROTECTED
関連項目:
定数フィールド値

ACC_STATIC

private static final int ACC_STATIC
関連項目:
定数フィールド値

ACC_FINAL

private static final int ACC_FINAL
関連項目:
定数フィールド値

ACC_SYNCHRONIZED

private static final int ACC_SYNCHRONIZED
関連項目:
定数フィールド値

ACC_NATIVE

private static final int ACC_NATIVE
関連項目:
定数フィールド値

ACC_ABSTRACT

private static final int ACC_ABSTRACT
関連項目:
定数フィールド値

ACC_STRICT

private static final int ACC_STRICT
関連項目:
定数フィールド値

filename

private java.lang.String filename

returnType

private int returnType

nameIndex

private int nameIndex

referenceIndex

private int referenceIndex

descriptorIndex

private int descriptorIndex

descriptorBuffer

public java.lang.String descriptorBuffer
メソッドマネージャに登録するための識別子. このクラスからの参照とMethoMangerからの重複参照が発生するのを防ぐため、 このフィールドを用いてメソッドマネージャに登録している.


codeInBlock

private Block codeInBlock
コンストラクタの詳細

Method

Method(int returnType,
       java.lang.String methodName,
       java.lang.String descriptor)
 throws CompileError
メソッドの情報を中間表現で保持する際に利用する.このメソッドは構文解析を行わないため あらかじめ実装してある標準ライブラリの読み込みなどに利用される.

パラメータ:
returnType - 戻り値の型.
methodName - メソッド名.
descriptor - メソッドの詳細情報.
例外:
CompileError - 中間表現の保持に失敗した時に発生する.

Method

Method(int returnType,
       java.lang.String methodName,
       SourceReader sReader)
 throws CompileError
メソッドの情報を中間表現で保持する際に、そのメソッドの構文解析も おこなうので、このコンストラクタを生成するときに実行する.

パラメータ:
returnType - 戻り値の型.
methodName - メソッド名.
例外:
CompileError - 中間表現の保持に失敗した時に発生する.構文解析に失敗した時に発生する.
メソッドの詳細

getReturnType

public int getReturnType()
戻り値の型を取得する.

オーバーライド:
クラス Node 内の getReturnType
戻り値:
戻り値の型.
関連項目:
getReturnType()

getReferenceIndex

int getReferenceIndex()
参照先の索引を取得する.

戻り値:
参照先の索引.

parseParameter

private java.lang.String parseParameter(java.lang.String methodName,
                                        SourceReader sReader)
                                 throws CompileError
メソッド引数の構文解析. メソッド引数とはそのメソッドが呼ばれた時に呼ばれた元からのデータを入力して 保持する変数である.つまりそのメソッドでのローカル変数ということになる. そのため、メソッド引数を解析する際に、そのメソッドのローカル変数として 管理しなければならない.

パラメータ:
methodName - メソッド名.
sReader - ソースコードリーダ.
戻り値:
メソッドの解析を行いメソッド名と引数の情報を結合し返す.この値がUTF8の コンテントプール情報となり管理される.
例外:
CompileError - 解析に失敗した時に発生する.

emitCode

void emitCode(java.io.DataOutputStream classfile)
        throws CompileError
このメソッド情報をファイルに放つ. MethodManagerが各オブジェクトのemitCodeに出力を 委譲されるので、各クラスはemitCodeメソッドを持つ.

パラメータ:
classfile - 出力先ファイル.
例外:
CompileError - 出力に失敗した時に発生する.
関連項目:
VM Spec - ClassFile

parseRefferenceOrCall

protected Expression parseRefferenceOrCall(Node node,
                                           java.lang.String curentIdentifer,
                                           SourceReader sReader)
                                    throws CompileError
参照か関数呼び出しのどちらであるかを解析する.

オーバーライド:
クラス Node 内の parseRefferenceOrCall
パラメータ:
node - 親ノード.
curentIdentifer - 識別子.
sReader - ソースコードリーダ.
戻り値:
解析した式.
例外:
CompileError
関連項目:
Node.parseRefferenceOrCall(Node, String, SourceReader)