JP3596570B2 - クラスの主記憶装置への配置方法 - Google Patents
クラスの主記憶装置への配置方法 Download PDFInfo
- Publication number
- JP3596570B2 JP3596570B2 JP30658495A JP30658495A JP3596570B2 JP 3596570 B2 JP3596570 B2 JP 3596570B2 JP 30658495 A JP30658495 A JP 30658495A JP 30658495 A JP30658495 A JP 30658495A JP 3596570 B2 JP3596570 B2 JP 3596570B2
- Authority
- JP
- Japan
- Prior art keywords
- address
- class
- main storage
- storage device
- correction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Description
【発明の属する技術分野】
本発明は、オブジェクト指向技術で開発されたプログラムのクラスの主記憶装置への配置方法に関する。
【0002】
【従来の技術】
オブジェクト指向プログラミングによって、例えばよく知られたC言語によりプログラムを作成する場合、オブジェクトの性質を抽出して宣言するためにクラス定義を行う。このクラスの内部には、ある変数のアドレスを参照するような変数を含めることができる。この変数の中に静的変数というものがあり、これはクラスから生成される全てのインスタンスより共通に参照することができる変数である。この静的変数のアドレスは、クラスの先頭アドレスを基準とした絶対アドレスで表現される。従って、クラスをコンパイル/リンクし、主記憶装置上に配置する場合、静的変数に対しては絶対アドレスが割り付けられる。
【0003】
【発明が解決しようとする課題】
ところで、上記のような従来のクラスの主記憶装置への配置方法には次のような解決すべき課題があった。
オブジェクト指向プログラミング技術で開発されたシステムにおいて、プログラムの修正や機能追加の際には、システムを停止することなく新しいクラスを動的にメモリ上の空き領域に配置する仕組みが要求される。この要求に応えるため、プログラムカウンタ相対アドレシングによる方式が知られている。この方式では、コンパイル/リンクを行うと、クラス内部で参照するアドレスは、プログラムカウンタの値をオフセット値とした相対アドレスに換算され、実行時に参照される。従って、クラスを主記憶装置上の任意の場所に再配置することが可能になる。
【0004】
ところが、クラスに上記のような静的変数が含まれている場合には、その静的変数が参照している他の静的変数のアドレスまでは補正をしない。従って、実際にはアドレスが不正となり、参照が不能になる。このため、従来はプログラムカウンタ相対アドレシング方式を採用する場合には、静的変数による参照を避けてプログラミングを行っていた。ところが、これでは例えば、アドレスを参照する木構造データを静的に作ることはできなかった。なお、この木構造データというのは、枝から順番に幹に向かって変数を辿り、目的とするデータを参照するようなデータ構造をいう。
【0005】
一方、クラスにはクラスの内部に含まれるいくつかのメソッドを選択し分岐する仕組みが含められることがある。この場合、一般のプログラムで行われているような条件文等を伴う分岐関数を設けるとよい。しかしながら、分岐するメソッドの数が多くなると、メソッドを選択して分岐するまでの手順が増えて効率が低下し、クラス定義のコードサイズが大きくなるというデメリットがある。そこで、メソッドのアドレスを参照するジャンプテーブルを用いて、該当するメソッドをコールする方が効率のよいプログラムとなる。ところが、先に説明したプログラムカウンタ相対アドレシングを用いた場合には、やはりクラスの再配置の際にジャンプテーブル中のメソッドのアドレスが補正の対象にならない。従って、絶対アドレスで表示されたメソッドの呼び出しができなくなってしまう。このため、従来このようなジャンプテーブルを静的に作ることはできなかった。
【0006】
【課題を解決するための手段】
本発明は以上の点を解決するため次の構成を採用する。
〈構成1〉
ソースコードにより記述されたクラス定義を実行可能形式ファイルにコンパイルし、クラス定義に示されているアドレスを補正して実行可能形式ファイルを主記憶装置に配置する方法において、クラス定義中で、当該クラス定義内における他の静的変数の絶対アドレスを指定して参照する静的変数を抽出し、主記憶装置上の任意の領域に実行可能形式ファイルを配置するとともに、抽出した静的変数の絶対アドレスに対し、そのクラスの先頭アドレスによって定まるオフセットアドレスを、絶対アドレスに加算する補正を行う。
【0007】
〈説明〉
プログラムカウンタ相対アドレシング方式では、クラス定義中に含まれる静的変数に対して、コンパイル、リンク時に、メモリ即ち主記憶装置上の絶対アドレスが割りつけられる。なお、静的変数とは、オブジェクト指向プログラムにおいて、あるクラスから生成される全てのインスタンスより共通に参照することができ、実記憶上では絶対アドレスにより特定されるデータセグメントに配置された変更不可能な変数のことをいう。
このようなクラスをコンパイルした実行可能形式ファイルが、主記憶装置上の任意の空き領域に再配置されると、ある静的変数が他の静的変数の絶対アドレスを指定して参照しているような場合に、参照するアドレスが不正になる。
そこで、コンパイル時に該当する静的変数を予め抽出する。
【0008】
主記憶装置上のクラスの先頭アドレスによって定まるオフセットアドレスを、絶対アドレスに加算する補正をして新たな絶対アドレスに置き換えれば、その新たな絶対アドレスにより、再配置後の静的変数が参照できるようになる。補正はコンパイル直後でも、主記憶装置への再配置後であってもよい。
これにより、個々のクラスを主記憶装置上に自由に再配置することが可能になる。また、クラス中では専ら静的なアドレス参照を採用すればよいことから、静的変数を頻繁に参照するような場合に、動的なアドレス変換を伴う参照を行う場合に比べて効率の良いプログラミングが可能となる。
【0009】
〈構成2〉
ソースコードにより記述されたクラス定義を実行可能形式ファイルにコンパイルし、クラス定義に示されているアドレスを補正して実行可能形式ファイルを主記憶装置に配置する方法において、クラス定義中で、当該クラス定義内におけるメソッドのアドレスを参照するためにジャンプテーブルを設けている場合に、ジャンブテーブルに含まれるメソッドの絶対アドレスを抽出し、メモリ上の任意の領域に実行可能形式ファイルを配置し、抽出した前記メソッドの絶対アドレスに対し、そのクラスの先頭アドレスによって定まるオフセットアドレスを、絶対アドレスに加算する補正を行う。
【0010】
〈説明〉
クラスの中で、メソッドのアドレスを参照するためにジャンプテーブルを設けている場合に、そのクラスをメモリ上の任意の領域に再配置したとき、ジャンプテーブル中の絶対アドレスは変化しない。従って、あるメソッドの絶対アドレスを指定してジャンプするような場合に、ジャンプ先アドレスが不正になる。そこで、静的変数の場合と同様にして絶対アドレスの補正を行う。その結果、この場合にも、ジャンプテーブルによる静的なアドレス指定を採用すればよいことから、条件分岐やその他の演算による動的なアドレス変換を伴う指定を行う場合に比べて効率の良いプログラミングが可能となる。
【0011】
【発明の実施の形態】
以下、本発明の実施の形態を具体例を用いて説明する。
〈具体例1〉
図1は、本発明の具体例1の方法を説明するブロック図である。
この方法では、クラス定義1をコンパイルする際に、コンパイラ/リンカ2とアドレス補正情報生成装置4とを使用する。クラス定義1はオブジェクト指向プログラミング技術により記述されたよく知られた内容のものである。コンパイラ/リンカ2はソースコードで作成されたクラス定義1をコンパイルし、実行可能形式ファイル3を生成するためのよく知られた装置から構成される。一方、アドレス補正情報生成装置4は、構文解析装置5と、意味解析装置6と、補正アドレス抽出装置7と、構文解析木情報8を備え、クラス定義1の中から静的変数の絶対アドレスを指定して参照するような静的変数を抽出する。構文解析装置5はクラス定義1の各文の要素を検出し、その構文を解析する部分で、意味解析装置6は各要素の意味を解析する部分である。補正アドレス抽出装置7は、構文解析の結果得られた構文解析木情報8を用いて、その内部に含まれる他の静的変数の絶対アドレスを指定して参照する静的変数を抽出する部分である。この具体的な説明は後で述べるが、この補正アドレス抽出装置7によってアドレス補正情報9が得られる。実行可能形式ファイル3は、配置装置11によって主記憶装置13の任意の位置に配置される。このとき、アドレス補正装置12は、アドレス補正情報9を参照しながら、主記憶装置13に配置された実行可能形式ファイル3中の先に説明した静的変数を参照する絶対アドレス部分を取り出し、これを補正する。クラス配置装置10は、このような配置装置11とアドレス補正装置12とから構成されている。
【0012】
なお、上記構文解析装置5はアドレスコードの内容を解析しないよう構文解析木情報8に変換し、構文上の誤り等をチェックする部分で、意味解析装置6は構文解析装置によって得られた構文解析木を元に意味上の誤り等をチェックする部分である。また、補正アドレス抽出装置7は、構文解析木を元に静的変数及び静的変数のアドレスを参照する静的変数の絶対アドレスを抽出し、抽出された情報をテーブル形式でアドレス補正情報としてファイルに出力する部分である。
【0013】
また、クラス配置装置10の配置装置11は実行形式モジュールをメモリ上にプログラムカウンタ相対アドレシング方式によって配置する装置である。このとき、先に説明したように、静的変数を参照する静的変数の内容は修正されずにそのまま主記憶装置上に割り付けられる。アドレス補正装置12は配置装置によって主記憶装置上に配置されたクラスの該当する静的変数部分を検出し、アドレス補正情報9及びそのクラスの主記憶装置上での先頭アドレス(オフセット)を用いて該当する部分の補正を行う装置である。
【0014】
なお、これらの具体的な動作を説明する前に、PC相対アドレシング方式とアドレス補正情報の内容、アドレス補正動作の概要等を説明する。
図2は、PC相対アドレシング方式の説明図である。
図に示すフェーズ1には、クラスAのソースファイルが表示されている。このソースファイルには、例えば変数bのアドレスを参照する静的変数aが含められているとする。フェーズ2では、これがコンパイルされて、実行可能形式ファイルに変換されている。この図を見て分かるように、実行可能形式ファイルの先頭アドレスを0番地とした場合に、変数aは変数bのアドレスを参照している。
【0015】
ここで、PC相対アドレス方式を採用し、主記憶装置上に実行可能形式ファイルを配置すると、フェーズ3に示すようになる。このとき、クラスAの先頭アドレスは、必ずしもメモリの0番地とは一致しない。従って、変数aはクラスAの先頭アドレスに変数aのアドレスを加えた位置に存在する。また、変数bはクラスAの先頭アドレスに変数bのアドレスを加えた位置に存在する。ところが、変数aは静的変数であって、こうしてメモリ上に配置される際にも内容が変更されず、フェーズ2に示した通り、変数bの絶対アドレスを表示している。これではフェーズ3においてクラスをメモリ上に配置した後、変数aは変数bを参照することができない。本発明では、この変数aを変数bのアドレスを参照するように変換する操作を行う。
【0016】
図3に、この目的のために使用するアドレス補正情報の説明図を示す。
まず、クラス定義1は先に説明したように、コンパイラ/リンカ2によって実行可能形式ファイル15に変換される。この場合の実行可能形式ファイル15の構造は図2を用いて説明したフェーズ2に示すものと同様である。
一方、図3において、クラス定義1からアドレス補正情報生成装置4によってアドレス補正情報が抽出される。これはソースコードの段階で構文解析等を行うことによって、静的変数の絶対アドレスを参照する静的変数を抽出することにより行われる。即ち、アドレス補正情報16は、他の静的変数のアドレスを参照する静的変数aの絶対アドレス等により構成される。
【0017】
図4には、アドレス補正動作の説明図を示す。
上記のように生成された実行可能形式ファイル3とアドレス補正情報9は、図1に示したクラス配置装置10に入力する。そして、配置装置11が実行可能形式ファイル3を主記憶装置の所定の場所に配置する。このとき、主記憶装置上でクラスの先頭アドレスが決定する。配置装置11はこの先頭アドレスをアドレス補正装置12に通知する。アドレス補正装置12はアドレス補正情報9を用いて、既に主記憶装置上に配置されたクラスの該当するアドレスの内容を補正する。即ち、変数aの値をクラスの先頭アドレス+bの絶対アドレスになるように書き換える。
【0018】
なお、このアドレスの補正は必ずしも主記憶装置に実行可能形式ファイルを配置してしまった後で行う必要はない。例えば、配置装置11が予め主記憶装置上にクラスを配置する際の先頭アドレスを認識していれば、これをアドレス補正装置12に通知し、アドレス補正装置12は実行可能形式ファイル3の補正を行う。そして、補正後の実行可能形式ファイル3を配置装置11が主記憶装置中に配置するという方法を採用することもできる。前者の方法を▲1▼、後者の方法を▲2▼というように区別してこの図中に示している。
【0019】
図5は、本発明の方法の具体的動作説明図である。
本発明の方法をより具体的に説明するために、この図によって静的変数のコンパイルと補正時の内容について詳細に説明する。
まず、例えばこの図の左上に示すように、クラス定義2に含まれる静的変数をa=100といった内容のものとする。これをステップS1でコンパイルすると、例えばこの図に示すように“XXXX”となるものとする。ここで、ステップS2において、先に説明したように、この静的変数aのアドレス50を抽出し、補正情報としておく。次に、ステップS3においてコンパイルされた静的変数が主記憶装置に配置される。この場合のクラスの先頭アドレスを、例えばこの図に示すように300とする。ここで、アドレス補正処理が開始されると、まずアドレスが50の静的変数aが参照する絶対アドレスの内容を先頭アドレスを用いて補正する。即ち、当初参照していた絶対アドレス100に先頭アドレス300を加算する。そして、正しいアドレスを参照する静的変数をコンパイルした“YYYY”を生成する。そして、主記憶装置上に記憶したクラスの“XXXX”を“YYYY”に置き換える補正を実行する(ステップS5)。以上のようにして静的変数の参照する絶対アドレスがクラスの配置結果に基づいて補正される。
【0020】
〈具体例1の効果〉
以上のようにしてプログラムカウンタ相対アドレシング方式を採用した場合においても、他の静的変数の絶対アドレスを参照する静的変数を適正に補正するので、このような静的変数の使用が可能となる。従って、例えば頻繁に参照のみを行う静的データのアドレスを参照するような静的変数を定義することができ、あるいは木構造のデータを採用することもでき、メソッド毎にアドレス変換等を行うダイナミックなアドレス参照を行う場合に比べて、効率よいプログラミングを実施することができる。
【0021】
〈具体例2〉
上記の例では、クラス中に存在する静的変数を問題としたが、クラス中にメソッドのアドレスを参照するジャンプテーブルが設けられることがある。このジャンプテーブルに入っているメソッドのアドレスは、そのクラスの先頭からカウントした絶対アドレスになっている。プログラムカウンタ相対アドレシングにより実行可能形式ファイルにファイル化され、主記憶装置上に配置される際にこのジャンプテーブルに表示された絶対アドレスも変換されない。そこで、上記の静的変数が参照する絶対アドレスと同様に、この具体例においてジャンプテーブルの絶対アドレスを補正する。
【0022】
図6には、具体例2の方法を説明するブロック図を示す。
クラス定義1は、具体例1と同様にコンパイラ/リンカ2によってコンパイルされ、実行可能形式ファイル3とされる。また、クラス定義1は、ジャンプテーブル補正情報生成装置20によって処理され、ジャンプテーブル補正情報22が抽出される。ジャンプテーブル補正情報生成装置20には、構文解析装置5、意味解析装置6、ジャンプテーブル抽出装置21及び構文解析木情報8が設けられる。上記ジャンプテーブル補正情報生成装置20は、クラス定義1を解析し、ジャンプテーブル上のメソッドのアドレスが格納される領域の絶対アドレスを抽出し、そのテーブルを作成する。このテーブルがジャンプテーブル補正情報22となる。これは具体例1の場合とよく類似している。構文解析装置5、意味解析装置6の構成や役割は、具体例1に示したものと同様である。ジャンプテーブル抽出装置21は、構文解析木情報8を元にテーブル上のメソッドのアドレスが格納される領域の絶対アドレスを抽出する処理を行う部分である。クラス配置装置10は、具体例1で説明したと同様の構成の配置装置11やアドレス補正装置12を備えている。その他の部分は具体例1で説明したものと同様である。
【0023】
図7に、ジャンプテーブル補正情報の説明図を示す。
図に示すように、クラス定義1はコンパイラ/リンカ2によって実行可能形式ファイル25に変換される。このとき、例えばアドレスaにはメソッドAの絶対アドレスが格納され、アドレスbにはメソッドBの絶対アドレスが格納され、アドレスcにはメソッドCの絶対アドレスが格納されているものとする。これらがジャンプテーブルを構成する。図に示すように、メソッドA,B,Cには、実行可能形式ファイル25の該当するアドレスに格納されている。ジャンプテーブル補正情報生成装置20はジャンプテーブルを参照し、図に示すようなジャンプテーブル補正情報26を生成する。その内容は、ジャンプテーブルの各部のアドレスa,b,cとなっている。このような補正情報の生成方法は具体例1と同様である。
【0024】
図8には、アドレス補正動作の説明図を示す。
上記のようにして生成された実行可能形式ファイル25とジャンプテーブル補正情報26は、この図に示すようにして主記憶装置へ配置される際の補正処理に使用される。まず、配置装置11は実行可能形式ファイル25を所定の主記憶装置上のアドレスに配置する。この場合に、アドレス補正装置12は、ジャンプテーブルにおいて指定しているメソッドAの絶対アドレス、メソッドBの絶対アドレス、メソッドCの絶対アドレスをそれぞれ補正して該当するメソッドを参照できるようにする。この場合の補正はクラスの先頭アドレスを各絶対アドレスに加算することにより行われる。
【0025】
なお、この補正動作やその具体的な処理は具体例1を用いて説明した場合と同様である。また、実行可能形式ファイルを主記憶装置上に配置した後でアドレス補正を行ってもよいし、また実行可能形式ファイル25の状態でアドレス補正を行うようにしてもよい。これも具体例1の場合と同様である。
【0026】
〈具体例2の効果〉
クラスのソースコード上で、あるメソッドへジャンプするアドレスを検出し、これを補正することによって、メソッドの絶対アドレスを持つジャンプテーブルを静的に作ることができる。そして、プログラムカウンタ相対アドレシングでクラスを再配置した場合にも、このジャンプテーブルの内容が適正に補正されるため、このような方式においてもジャンプテーブルを利用できる。従って、例えばメソッドを選択して分岐するような処理に一般的なプログラミング言語の持つ分岐機構等を記述することによってコードサイズを増加させたり、記述自体を複雑にし、プログラミングの効率を低下させるといったことを防止できる。
【図面の簡単な説明】
【図1】本発明の方法を説明するブロック図である。
【図2】PC相対アドレシング方式の説明図である。
【図3】アドレス補正情報の説明図である。
【図4】アドレス補正動作の説明図である。
【図5】本発明の方法の具体的動作説明図である。
【図6】具体例2の方法を説明するブロック図である。
【図7】ジャンプテーブル補正情報の説明図である。
【図8】アドレス補正動作の説明図である。
【符号の説明】
1 クラス定義
2 コンパイラ/リンカ
3 実行可能形式ファイル
4 アドレス補正情報生成装置
9 アドレス補正情報
10 クラス配置装置
11 配置装置
12 アドレス補正装置
13 主記憶装置
Claims (2)
- ソースコードにより記述されたクラス定義を実行可能形式ファイルにコンパイルし、前記クラス定義に示されているアドレスを補正して実行可能形式ファイルを主記憶装置に配置する方法において、
前記クラス定義中で、当該クラス定義内における他の静的変数の絶対アドレスを指定して参照する静的変数を抽出し、
主記憶装置上の任意の領域に前記実行可能形式ファイルを配置するとともに、
抽出した前記静的変数の絶対アドレスに対し、そのクラスの先頭アドレスによって定まるオフセットアドレスを、前記絶対アドレスに加算する補正を行うことを特徴とするクラスの主記憶装置への配置方法。 - ソースコードにより記述されたクラス定義を実行可能形式ファイルにコンパイルし、前記クラス定義に示されているアドレスを補正して実行可能形式ファイルを主記憶装置に配置する方法において、
前記クラス定義中で、当該クラス定義内におけるメソッドの絶対アドレスを参照するためにジャンプテーブルを設けている場合に、前記ジャンブテーブルに含まれるメソッドの絶対アドレスを抽出し、
メモリ上の任意の領域に前記実行可能形式ファイルを配置し、
抽出した前記メソッドの絶対アドレスに対し、そのクラスの先頭アドレスによって定まるオフセットアドレスを、前記絶対アドレスに加算する補正を行うことを特徴とするクラスの主記憶装置への配置方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP30658495A JP3596570B2 (ja) | 1995-10-31 | 1995-10-31 | クラスの主記憶装置への配置方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP30658495A JP3596570B2 (ja) | 1995-10-31 | 1995-10-31 | クラスの主記憶装置への配置方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH09128240A JPH09128240A (ja) | 1997-05-16 |
| JP3596570B2 true JP3596570B2 (ja) | 2004-12-02 |
Family
ID=17958830
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP30658495A Expired - Fee Related JP3596570B2 (ja) | 1995-10-31 | 1995-10-31 | クラスの主記憶装置への配置方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP3596570B2 (ja) |
Families Citing this family (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CA2117585C (en) * | 1993-09-14 | 2001-06-05 | Edward T. Shawl | Cement composition |
-
1995
- 1995-10-31 JP JP30658495A patent/JP3596570B2/ja not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| JPH09128240A (ja) | 1997-05-16 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| USRE38104E1 (en) | Method and apparatus for resolving data references in generated code | |
| US5361351A (en) | System and method for supporting run-time data type identification of objects within a computer program | |
| CN100385399C (zh) | 用于多个异常处理模型的中间表示的方法和系统 | |
| CN100483341C (zh) | 用于执行本机绑定的方法和装置 | |
| US6434742B1 (en) | Symbol for automatically renaming symbols in files during the compiling of the files | |
| US5287444A (en) | Message processing system | |
| US8813047B2 (en) | Yet another transformation language (YATL) | |
| CA2306545A1 (en) | Automatic stub/adapter generator | |
| KR20060041228A (ko) | 네이티브 바인딩을 수행하는 방법 빛 장치 | |
| CA2170939A1 (en) | Method and apparatus for displaying locations of errors detected inside software macro calls | |
| US12386603B2 (en) | Decompilation apparatus and recompilation system for a processor architecture | |
| EP0520708B1 (en) | Method and apparatus for converting high level form abstract syntaxes into an intermediate form | |
| US5758163A (en) | Method and apparatus for record fields usage checking at compile time | |
| US7207036B2 (en) | Preprocessing of interfaces to allow fast call through | |
| JP3596570B2 (ja) | クラスの主記憶装置への配置方法 | |
| JP3266097B2 (ja) | 非リエントラントプログラムの自動リエントラント化方法及びシステム | |
| Nadera et al. | The varying faces of a program transformation systems | |
| JP2003050700A (ja) | プログラム変換方法 | |
| JP2720643B2 (ja) | プログラムジェネレータ生成装置 | |
| JP2807162B2 (ja) | プログラム翻訳装置 | |
| Atkinson | Application binary interface compatibility through a customizable language | |
| JPS6326730A (ja) | プログラム修正方式 | |
| JP2001005655A (ja) | アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法 | |
| JP2001014172A (ja) | プログラム変換装置 | |
| JPH056278A (ja) | Fortranコンパイル処理装置 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040608 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040727 |
|
| TRDD | Decision of grant or rejection written | ||
| A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20040824 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040831 |
|
| R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20070917 Year of fee payment: 3 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080917 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080917 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090917 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090917 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100917 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110917 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110917 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120917 Year of fee payment: 8 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120917 Year of fee payment: 8 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130917 Year of fee payment: 9 |
|
| LAPS | Cancellation because of no payment of annual fees |