JPH10320204A - プログラム変換装置 - Google Patents

プログラム変換装置

Info

Publication number
JPH10320204A
JPH10320204A JP12560797A JP12560797A JPH10320204A JP H10320204 A JPH10320204 A JP H10320204A JP 12560797 A JP12560797 A JP 12560797A JP 12560797 A JP12560797 A JP 12560797A JP H10320204 A JPH10320204 A JP H10320204A
Authority
JP
Japan
Prior art keywords
class
instruction
override
instruction sequence
program
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.)
Granted
Application number
JP12560797A
Other languages
English (en)
Other versions
JP3672207B2 (ja
Inventor
Toshiyuki Sakata
俊幸 坂田
Shuichi Takayama
秀一 高山
Nobuteru Tominaga
宣輝 富永
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP12560797A priority Critical patent/JP3672207B2/ja
Publication of JPH10320204A publication Critical patent/JPH10320204A/ja
Application granted granted Critical
Publication of JP3672207B2 publication Critical patent/JP3672207B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 オブジェクト指向言語のオーバーライドメソ
ッド呼び出し命令によって呼び出されるメソッドがオー
バーライド機能を使わない場合に、コードサイズを縮小
し、実行速度を向上させるプログラム変換装置を提供す
る。 【解決手段】 継承関係翻訳部104でファイル単位の
クラスの継承関係を翻訳し、継承クラス判定部112で
全ての継承関係を参照する。メソッド翻訳部106でオ
ーバーライドメソッド呼び出し命令を、オーバーライド
メソッドでない場合とオーバーライドメソッドである場
合の両方に翻訳し、メソッド置換部113でどちらかに
置換する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はプログラムを翻訳す
るプログラム変換装置等に関し、特に、オブジェクト指
向言語のオーバーライドメソッド呼び出し命令のコード
サイズを縮小し、実行速度を向上させるプログラム変換
装置等に関する。
【0002】
【従来の技術】オブジェクト指向言語には、多様性を構
築する特別なメソッドとしてオーバーライドメソッドが
ある。オーバーライドメソッドとは、例えば、クラスA
とクラスAを継承するクラスBがそれぞれ同じ型のメソ
ッドfを持ちクラスBのオブジェクトに対してメソッド
fを呼び出すと、その呼び出しがクラスAへのポインタ
やリファレンスを経由していてもクラスBのメソッドf
が呼び出されるような機能を持つメソッドを言う。ま
た、このような機能をオーバーライド機能と言う。
【0003】オブジェクト指向言語C++(以下「C+
+言語」と言う)ではオーバーライドメソッドは仮想関
数と呼ばれ、関数の先頭にvirtual指定子を付加
することにより指定できる。また、C++言語ではメソ
ッドは関数であり、関数fをクラスAで仮想関数に指定
すればそのクラスAを継承するクラスBでもその関数f
は自動的に仮想関数となる。
【0004】また、オブジェクト指向言語Java(以
下「Java言語」と言う)ではメソッドはデフォルト
でオーバーライドメソッドとなる。従来のオブジェクト
指向言語のオーバーライドメソッド呼び出しの実現方法
について、「注釈C++リファレンスマニュアル」
(B.ストラウストラップ著トッパンISBN4−81
01−8027−110.7c)の例を用いて説明す
る。
【0005】図12はC++言語の仮想関数を含むクラ
ス定義を示す図である。図中のvirtual指定子が
先頭についている関数及びそれを継承した関数が仮想関
数である。したがって、クラスAの関数f,g及びh、
クラスBの関数f、g及びh並びにクラスCの関数f,
g及びhが仮想関数である。図13は、図12に示した
クラスの継承関係を表す図である。クラスAはクラスB
に継承され、さらにクラスBはクラスCに継承されてい
る。
【0006】図14は、図12に示したクラスで作成し
たオブジェクトのメモリ配置をクラス別に示す図であ
る。クラスAを例にとると、一般に、メソッドアドレス
テーブル「A_vtbl」をオブジェクト外に配置し、
このメソッドアドレステーブルのアドレス「A_vpt
r」のみをオブジェクト内に配置する。オブジェクト毎
にメソッドアドレステーブルを配置しないので、同じク
ラスのオブジェクトを複数作成した場合にメモリのサイ
ズがそれらの重複分だけ節約できる。ここで、「&
A::f」はクラスAで定義された仮想関数fのアドレ
スを表す。仮想関数fを呼び出す場合は、まずオブジェ
クト内のメソッドアドレステーブル「A_vtbl」の
アドレス「A_vptr」に基づいてこのメソッドアド
レステーブル内の仮想関数のアドレス「&A::f」を
読み出し、その後にこのアドレスを呼び出す事になる。
【0007】図15はクラスCの仮想関数hの呼び出し
を含む関数iをC++言語で記述した例を示す図であ
る。ここで、iの引数はクラスCのオブジェクトへのポ
インタである。図16は、図15の関数iを従来のプロ
グラム変換装置で機械語命令列に 変換した例を示す図
である。関数iは引数であるオブジェクトへのポインタ
をレジスタr0上に保持した状態で呼び出される。
【0008】まず、クラスCのオブジェクトの中の仮想
関数hへのポインタを命令「mov(r0+4),r
1」でr1レジスタに転送する。次にこれを用いてメソ
ッドアドレステーブル内のオフセット8を加算したとこ
ろにある仮想関数hの実アドレス「&C::h」を命令
「mov(r1+8),r1」でr1レジスタに転送
し、命令「jsr r1」でr1のアドレスへ分岐して
いる。ここで、命令「mov(r0+d),r1」はr
0のアドレスにdを加算したアドレスで示されるメモリ
の内容をr1に読み出す命令を表し、命令「jsr r
1」はr1のアドレスに分岐するサブルーチンコール命
令を表し、命令「rts」は関数iからの復帰命令を表
す。
【0009】図17は、上記の関数hが仮想関数でない
関数(以下「非仮想関数」と言う)として定義されてい
たと仮定した場合に、関数hの呼び出しを含む関数iを
機械語命令列に変換した例を示す図である。図16と図
17を比較すると、仮想関数の呼び出しは4命令、非仮
想関数の呼び出しは2命令である。
【0010】
【発明が解決しようとする課題】しかしながら、上記の
ような従来のオブジェクト指向言語のオーバーライドメ
ソッド呼び出しの実現方法は、オーバーライドメソッド
に指定されたものは全て同様に処理するので、オーバー
ライド機能を使わないメソッドをオーバーライドメソッ
ドに指定すると機械語命令列のコードサイズが大きくな
り実行速度が遅くなるという問題点がある。
【0011】また、プログラマがオーバーライド機能を
使わないメソッドの全てをオーバーライドメソッドでな
いメソッド(以下「非オーバーライドメソッド」と言
う)に指定するのは、いちいちオーバーライド機能を使
うかどうかを考慮したり、設計段階でオーバーライド機
能を使うかどうかを確定できないメソッドを後で非オー
バーライドメソッドに指定したりしなければならず、プ
ログラマの負担が大きくなる。
【0012】さらに、java言語ではメソッドがオー
バーライドメソッドでないことを表すfinal指定子
が用意されているが、C++言語ではオーバーライドメ
ソッドでないことを表す指定子が無いので、あるメソッ
ドをクラスAでオーバーライドメソッドに指定すると、
そのクラスAを継承するクラスBでそのメソッドを非オ
ーバーライドメソッドに指定することができない。
【0013】そこで、本発明はかかる問題点に鑑み、オ
ブジェクト指向言語のオーバーライドメソッド呼び出し
命令のコードサイズを縮小し、実行速度を向上させるプ
ログラム変換装置を提供することを目的とする。
【0014】
【課題を解決するための手段】本発明に係るプログラム
変換装置は、オーバーライドメソッドを含むクラスの定
義とオーバーライドメソッド呼び出し命令が含まれるオ
ブジェクト指向言語のプログラムを機械語命令列に翻訳
して実行ファイルを生成するプログラム変換装置であっ
て、前記クラスの定義に基づいて全てのクラスの継承関
係を継承関係情報として抽出する抽出手段と、全ての前
記継承関係情報に基づいて前記オーバーライドメソッド
呼び出し命令によって呼び出されるメソッドが属するク
ラスが継承されるか否かを判断する判断手段と、前記判
断手段で継承されないと判断された場合に前記オーバー
ライドメソッド呼び出し命令をオーバーライドメソッド
でない場合の機械語命令列に翻訳するメソッド翻訳手段
を備えることを特徴とする。
【0015】本発明は,1つの入力ファイルにプログラ
ムの実行に必要な全てのクラス定義が含まれている場合
に、全てのクラスの継承関係に基づいてオーバーライド
メソッド呼び出し命令をオーバーライドメソッドでない
場合もしくはオーバーライドメソッドである場合のどち
らかに翻訳するという方法をとる。これによって、ある
クラスが他のクラスに全く継承されない場合にそのクラ
スで定義されるオーバーライドメソッドがオーバーライ
ド機能を使うことができないという性質を利用して、オ
ーバーライドメソッド呼び出し命令をオーバーライドメ
ソッドでない場合の命令列に翻訳することができる。即
ち、間接呼び出しを直接呼び出しにすることができる。
【0016】また、本発明に係るプログラム変換装置
は、オーバーライドメソッドを含むクラスの定義とオー
バーライドメソッド呼び出し命令が含まれるオブジェク
ト指向言語のプログラムをファイル単位で機械語命令列
に翻訳し出力ファイルとして出力する翻訳装置と、前記
翻訳装置で翻訳された出力ファイルを連結して実行ファ
イルを生成する連結装置とを備えるプログラム変換装置
であって、前記オブジェクト指向言語のプログラムには
オーバーライドメソッドを含むクラスの定義とオーバー
ライドメソッド呼び出し命令が含まれ、前記翻訳装置
は、前記クラスの定義に基づいてファイル単位のクラス
の継承関係を継承関係情報に翻訳する継承関係翻訳手段
と、前記オーバーライドメソッド呼び出し命令をこの命
令によって呼び出されるメソッドが属するクラスを表す
メソッドクラス情報とこの命令によって呼び出されるメ
ソッドがオーバーライドメソッドでない場合の機械語命
令列を表す非オーバーライド情報とオーバーライドメソ
ッドである場合の機械語命令列を表すオーバーライド情
報とを含むメソッド命令列に翻訳するメソッド翻訳手段
とを備え、前記連結装置は、前記翻訳装置で翻訳された
全ての出力ファイルの中の全ての前記継承関係情報に基
づいて前記オーバーライドメソッド呼び出し命令によっ
て呼び出されるメソッドが属するクラスが継承されるか
否かを判断する判断手段と、前記メソッド命令列を前記
判断手段で継承されないと判断された場合にはオーバー
ライドメソッドでない場合の機械語命令列だけに置換
し、一方、継承されると判断された場合にはオーバーラ
イドメソッドである場合の機械語命令列だけに置換する
置換手段とを備えることを特徴とする。
【0017】入力ファイルが複数の場合、翻訳装置では
ファイル単位のクラスの継承関係が判るだけで全てのク
ラスの継承関係は判らない。また、従来の連結装置では
クラスの継承関係は全く判らない。本発明は、翻訳装置
でファイル単位のクラスの継承関係を継承関係情報に翻
訳し、連結装置で全ての前記継承関係情報を参照するの
で、連結装置において全てのクラスの継承関係が判る。
さらに、翻訳装置でオーバーライドメソッド呼び出し命
令を、オーバーライドメソッドでない場合とオーバーラ
イドメソッドである場合の両方の命令列に翻訳し、連結
装置でどちらかを選択するという方法をとる。
【0018】これによって、あるクラスが他のクラスに
全く継承されない場合にそのクラスで定義されるオーバ
ーライドメソッドがオーバーライド機能を使うことがで
きないという性質を利用して、オーバーライドメソッド
呼び出し命令をオーバーライドメソッドでない場合の命
令列に翻訳することができる。即ち、間接呼び出しを直
接呼び出しにすることができる。
【0019】
【発明の実施の形態】以下、本発明の実施の形態につい
て、図面を用いて説明する。図1は本発明のプログラム
変換装置の構成を示す図である。便宜上、図1には入力
ファイルA101、B102、出力ファイルA108、
B109及び実行ファイル115も併せて記載してい
る。ここで、この入力ファイルA101及びB102は
高級言語で書かれたソースプログラムである。また、こ
の出力ファイルA108及びB109は各入力ファイル
を翻訳した機械語命令列である。さらに、この実行ファ
イル115はこの2つの出力ファイルを連結し、生成し
た機械語命令列である。なお、ここで言うファイルと
は、入出力の単位となるソースプログラムや機械語命令
列の集まりを指す。
【0020】本装置は大別すると、翻訳部103及び連
結部110で構成されている。翻訳部103はファイル
単位で実施され、クラス定義毎にクラスの継承関係を継
承関係疑似命令に翻訳し、オーバーライドメソッド呼び
出し命令を、この命令によって呼び出されるメソッドが
属するクラスを表すメソッドクラス疑似命令、この命令
によって呼び出されるメソッドがオーバーライドメソッ
ドでない場合の機械語命令列及びオーバーライドメソッ
ドである場合の機械語命令列に翻訳し、その他の翻訳し
なかった命令を機械語命令列に翻訳し、出力ファイルと
して出力する。
【0021】ここでは、入力ファイルA101の入力に
より出力ファイルA108を、入力ファイルB102の
入力により出力ファイルB109を出力する。翻訳部1
03は、継承関係翻訳部104、メソッド呼び出し検出
部105、メソッド翻訳部106及び命令翻訳部107
を備えている。継承関係翻訳部104はクラス定義毎
に、クラスの継承関係を継承関係疑似命令に翻訳する。
【0022】メソッド呼び出し検出部105は入力ファ
イル内のオーバーライドメソッド呼び出し命令を検出す
る。メソッド翻訳部106は、メソッド呼び出し検出部
105で検出されたオーバーライドメソッド呼び出し命
令をメソッド命令列に翻訳する。ここでメソッド命令列
は、この命令によって呼び出されるメソッドが属するク
ラスを表すメソッドクラス疑似命令、この命令によって
呼び出されるメソッドがオーバーライドメソッドでない
場合の機械語命令列、オーバーライドメソッドである場
合の機械語命令列及びこれらを識別する疑似命令の総称
とする。
【0023】命令翻訳部107は、前記メソッド翻訳部
106で翻訳しなかった命令を機械語命令列に翻訳す
る。連結部110は翻訳部103で翻訳された出力ファ
イルの全てを、置換し連結して実行ファイルを生成す
る。ここでは、出力ファイルA108及びB109の入
力により実行ファイル115を出力する。
【0024】連結部110は、メソッド命令列検出部1
11、継承クラス判定部112、メソッド置換部113
及びファイル連結部114を備えている。メソッド命令
列検出部111は入力された全ての出力ファイルの中か
ら、メソッド翻訳部106により翻訳されたメソッド命
令列を検出する。継承クラス判定部112は、メソッド
命令列検出部111で検出されたメソッド命令列中のメ
ソッドクラス疑似命令からそのメソッドの属するクラス
を認識し、そのクラスが他のクラスに継承されるかどう
かを、全ての出力ファイル中の全ての継承関係疑似命令
に基づいて判定する。
【0025】メソッド置換部113は、メソッド命令列
検出部111で検出されたメソッド命令列を、継承クラ
ス判定部112によってメソッド命令列の属するクラス
が継承されないクラスであると判定された場合にはオー
バーライドメソッドでない場合の機械語命令列だけに置
換し、逆に、継承されるクラスと判定された場合にはオ
ーバーライドメソッドである場合の機械語命令列だけに
置換し、全ての置換後全ての継承関係疑似命令を消去す
る。
【0026】ファイル連結部114は、メソッド置換部
113で置換されたファイルの全てを連結して実行ファ
イルを生成する。図1のように構成したプログラム作成
装置の動作をC++言語のプログラムを用いて説明す
る。図2はC++言語の仮想関数を含むクラスXの定
義、クラスXを継承するクラスYの定義、クラスXを継
承するクラスZの定義、関数void i(Y*)の定
義及び関数void j(Z*)の定義を示す図であ
る。ここでは、図1中の入力ファイルA101に納めら
れる。
【0027】図3は、図2に示したクラスの継承関係を
表す図である。クラスXはクラスY及びクラスZに継承
されている。図4はC++言語の仮想関数を含むクラス
Xの定義、クラスXを継承するクラスYの定義、クラス
Xを継承するクラスZの定義、クラスZを継承するクラ
スWの定義及び関数void k(W*)の定義を示す
図である。ここでは、図1中の入力ファイルB102に
納められる。なお、簡単のために説明に関係しないメソ
ッドの定義、プログラム及び以後の処理内容の表記は省
略する。ただし、プログラムの実行に必要なクラスの定
義はすべて表記されているものとする。
【0028】図5は、図4に示したクラスの継承関係を
表す図である。クラスXはクラスY及びクラスZに、ク
ラスZはクラスWに継承されている。入力ファイルA1
01には図2に示したC++言語のソースプログラム
が、入力ファイルB102には図4に示したC++言語
のソースプログラムが納められている。
【0029】翻訳部103は図2に示した入力ファイル
A101の入力により、図6で示した出力ファイルA1
08を出力する。同様にして、翻訳部103は図4に示
した入力ファイルB102の入力により、図7で示した
出力ファイルB109を出力する。連結部110は、図
6に示した出力ファイルA108及び図7に示した出力
ファイルB109の入力により、図8で示した実行ファ
イル115を出力する。
【0030】また、ここで用いられている機械語命令列
等の意味は以下のとうりである。 .BASE name : nameで表されるクラ
スが、別のクラスから継承されていることを表す継承関
係疑似命令である。 _i_FP1Y : 関数void i(Y
*)のアドレスを表すラベルである。
【0031】.METHOD S : メソッド命
令列の先頭を表す疑似命令である。 .CLASS name : メソッドの属するクラス
を表すメソッドクラス疑似命令である。 jsr Label : Labelで表されるア
ドレスに分岐するサブルーチンコール命令である。
【0032】_h_1Y : クラスYの
仮想関数void h(void)のアドレスを表すラ
ベルである。 .METHOD M : オーバーライドメソッド
でない場合の命令列とオーバーライドメソッドである場
合の命令列を区切る疑似命令である。 mov(r0+4),r1: r0+4をアドレスとす
るメモリの内容をr1にロードする転送命令である。
【0033】mov(r1+0),r1: r1をアド
レスとするメモリの内容をr1にロードする転送命令で
ある。 jsr r1 : レジスタr1に格納され
たアドレスに分岐するサブルーチンコール命令である。 .METHOD E : メソッド命令列の終端を
表す疑似命令である。
【0034】rts : 関数からの
復帰命令である。 _j_FP1Z : 関数void j(Z
*)のアドレスを表すラベルである。 _h_1Z : クラスZの仮想関数vo
id h(void)のアドレスを表すラベルである。
【0035】_k_FP1W : 関数voi
d k(W*)のアドレスを表すラベルである。 _h_1W : クラスWの仮想関数vo
id h(void)のアドレスを表すラベルである。 ここから、翻訳部103の詳細な動作について説明す
る。
【0036】図9は翻訳部103の動作フローチャート
を示す図である。まず、入力ファイルA101が入力さ
れる。ここでは、図2に示したC++言語のプログラム
が入力された場合を考える(ステップ901)。次に、
継承関係翻訳部104の処理が終了したかどうかを判定
する。終了してなければクラス情報を取得しに行き、終
了していたらメソッド呼び出し検出部105の処理へ行
く。ここでは、クラスX、クラスY及びクラスZの定義
毎に順次クラス情報を取得しに行き、その後メソッド呼
び出し検出部105の処理へ行く(ステップ902)。
【0037】未処理のクラス定義がある場合は、クラス
定義毎にクラス情報を取得する。ここでは、クラスX、
クラスY及びクラスZの定義毎に順次クラス情報を取得
する(ステップ903)。次に、取得したクラス定義毎
のクラス情報からこのクラスが他のクラスを継承してい
るかどうかを判定する。Yesなら継承関係を翻訳しに
行き、Noなら終了判定へ戻る。ここでは、クラスXの
場合は他のクラスを継承していないので終了判定へ戻
り、クラスY及びクラスZの場合はクラスXを継承して
いるので順次継承関係を翻訳しに行く(ステップ90
4)。
【0038】このクラスが他のクラスを継承している場
合は、クラスの継承関係を継承関係疑似命令に翻訳す
る。ここでは、クラスY及びクラスZがクラスXを継承
しているので継承しているクラス名を継承関係疑似命令
「.BASE 1X」に翻訳し、終了判定へ戻る(ステ
ップ905)。なお、継承関係疑似命令は、継承される
クラスのクラス名と継承するクラスのクラス名とをペア
で表すものであってもよい。この様にすると、全てのク
ラスの継承関係を連結装置で完全に再現できるので、全
てのクラスの継承関係はもとより、オーバーライドメソ
ッド呼び出し命令をオーバーライドメソッドでない場合
の命令列に翻訳した場合にその根拠となった情報等を参
照用に出力することもできる。
【0039】継承関係翻訳部104の処理が終了する
と、次に、メソッド呼び出し検出部105の処理が終了
したかどうかを判定する。終了してなければオーバーラ
イドメソッド呼び出し命令を検出しに行き、終了してい
たら従来の翻訳処理へ行く。ここでは、関数「void
i(Y*)」の仮想関数呼び出し命令及び関数「vo
id j(Z*)」の仮想関数呼び出し命令について順
次命令を検出しに行き、その後従来の翻訳処理へ行く
(ステップ906)。
【0040】未処理のオーバーライドメソッド呼び出し
命令がある場合は、これを検出する。ここでは、関数
「void i(Y*)」及び関数「void j(Z
*)」の仮想関数呼び出し命令を順次検出し、メソッド
命令列に翻訳しに行く(ステップ907)。次に、検出
されたオーバーライドメソッド呼び出し命令をメソッド
翻訳部106がメソッド命令列に翻訳する。ここでは、
関数「void i(Y*)」及び関数「void j
(Z*)」の仮想関数呼び出し命令をメソッド命令列に
順次翻訳し、終了判定へ戻る(ステップ908)。ここ
で、関数「void i(Y*)」のメソッド命令列
は、図6で示される出力ファイルA108前半の「.M
ETHOD S」で始まり「.METHOD E」で終
了する部分である。このメソッド命令列に含まれている
「.CLASS 1Y」はこの命令によって呼び出され
るメソッドがクラスYに属することを表すメソッドクラ
ス疑似命令であり、「.CLASS 1Y」と「.ME
THOD M」の間にある機械語命令列はこの命令によ
って呼び出されるメソッドがオーバーライドメソッドで
ない場合の機械語命令列であり、「.METHOD
M」と「.METHOD E」の間にある機械語命令列
はオーバーライドメソッドである場合の機械語命令列で
ある。なお、機械語命令列を生成する方法は従来と同様
なので説明を省略する。また、関数「void j(Z
*)」のメソッド命令列は関数「void i(Y
*)」と同様なので説明を省略する。
【0041】図10はメソッド命令列を示す図である。
なお、メソッド命令列は常に同じ形式となるので図10
(a)に示すメソッド命令列を、図10(b)に示すよ
うにメソッドクラス疑似命令及び1つのマクロ命令で表
してもよいし、図10(c)に示すようにメソッドクラ
ス疑似命令の情報も含め1つのマクロ命令で表してもよ
い。ここで、図10(b)でマクロ名「jsrv」の後
ろに順に出力しているのは、オーバーライドメソッド呼
び出し命令によって呼び出されるメソッドがオーバーラ
イドメソッドでない場合に呼び出すラベル名、オーバー
ライドメソッドである場合に使用するオブジェクトの先
頭からのオフセット値、オーバーライドメソッドである
場合に使用するメソッドアドレス格納テーブルの先頭か
らのオフセット値及びオーバーライドメソッドである場
合に使用するレジスタ名であり、図10(c)でマクロ
名「jsrw」の後ろに順に出力しているのは、オーバ
ーライドメソッド呼び出し命令によって呼び出されるメ
ソッドの属するクラス名、このオーバーライドメソッド
呼び出し命令によって呼び出されるメソッドがオーバー
ライドメソッドでない場合に呼び出すラベル名、オーバ
ーライドメソッドである場合に使用するオブジェクトの
先頭からのオフセット値、オーバーライドメソッドであ
る場合に使用するメソッドアドレス格納テーブルの先頭
からのオフセット値及びオーバーライドメソッドである
場合に使用するレジスタ名である。なお、オーバーライ
ドメソッドである場合に使用するレジスタ名は固定して
おけば必ずしも必要ではない。
【0042】メソッド呼び出し検出部105の処理が終
了すると、次に、メソッド翻訳部106で翻訳しなかっ
た命令を命令翻訳部107が機械語命令列に翻訳する。
なお、この処理は従来の翻訳装置が行なう処理と異なら
ないので詳しい説明を省略する(ステップ909)。次
に、出力ファイルA108を出力する。ここでは、図6
に示した出力ファイルを出力する(ステップ910)。
【0043】続いて、入力ファイルB102が入力され
る。ここでは、図4に示したC++言語のプログラムが
入力された場合を考える(ステップ901)。次に、ク
ラスX、クラスY、クラスZ及びクラスWの定義毎に順
次クラス情報を取得しに行き、その後メソッド呼び出し
検出部105の処理へ行く(ステップ902)。
【0044】未処理のクラス定義がある場合は、クラス
X、クラスY、クラスZ及びクラスWの定義毎に順次ク
ラス情報を取得する(ステップ903)。次に、クラス
Xの場合は他のクラスを継承していないので終了判定へ
戻り、クラスY及びクラスZの場合はクラスXを継承
し、クラスWの場合はクラスZを継承しているので順次
継承関係を翻訳しに行く(ステップ904)。
【0045】クラスY及びクラスZがクラスXを継承し
ているので継承しているクラス名を継承関係疑似命
令「.BASE 1X」に翻訳し、クラスWがクラスZ
を継承しているので継承しているクラス名を継承関係疑
似命令「.BASE 1Z」に翻訳し、順次終了判定へ
戻る(ステップ905)。継承関係翻訳部104の処理
が終了すると、次に、関数「void k(W*)」の
仮想関数呼び出し命令について命令を検出しに行き、そ
の後従来の翻訳処理へ行く(ステップ906)。
【0046】未処理のオーバーライドメソッド呼び出し
命令がある場合は、関数「voidk(W*)」の仮想
関数呼び出し命令を検出し、メソッド命令列に翻訳しに
行く(ステップ907)。次に、関数「void k
(W*)」の仮想関数呼び出し命令をメソッド命令列に
翻訳し、終了判定へ戻る(ステップ908)。関数「v
oid k(Z*)」のメソッド命令列は関数「voi
d i(Y*)」と同様なので説明を省略する。
【0047】メソッド呼び出し検出部105の処理が終
了すると、次に、メソッド翻訳部106で翻訳しなかっ
た命令を命令翻訳部107が機械語命令列に翻訳する。
なお、この処理は従来の翻訳装置が行なう処理と異なら
ないので詳しい説明を省略する(ステップ909)。次
に、出力ファイルB109を出力する。ここでは、図7
に示した出力ファイルを出力する(ステップ910)。
【0048】続いて、連結部110の詳細な動作につい
て説明する。図11は連結部110の動作フローチャー
トを示す図である。まず、出力ファイルA108及び出
力ファイルB109が入力される。ここでは、図6に示
した出力ファイル及び図4に示した出力ファイルが入力
された場合を考える(ステップ1101)。
【0049】次に、メソッド命令列検出部111の処理
が終了したかどうかを判定する。終了してなければ命令
列を検出しに行き、終了していたら承継関係疑似命令を
消去しに行く。ここでは、関数「void i(Y
*)」のメソッド命令列、関数「void j(Z
*)」のメソッド命令列及び関数「void k(W
*)」のメソッド命令列について順次命令列を検出しに
行き、その後承継関係疑似命令を消去しに行く(ステッ
プ1102)。
【0050】未処理のメソッド命令列がある場合は、入
力された全ての出力ファイルの中からメソッド命令列を
検出する。ここでは、関数「void i(Y*)」、
関数「void j(Z*)」及び関数「void k
(W*)」のメソッド命令列を順次検出し、そのクラス
が継承されるかを判定に行く(ステップ1103)。次
に、検出されたメソッド命令列中のメソッドクラス疑似
命令からそのメソッドの属するクラスを認識し、そのク
ラスが他のクラスに継承されるかどうかを、全ての出力
ファイル中の全ての継承関係疑似命令に基づいて判定す
る。ここでは、まず、関数「void i(Y*)」の
メソッド命令列中のメソッドクラス疑似命令「.CLA
SS 1Y」からクラスYを認識し、全ての出力ファイ
ル中の全ての継承関係疑似命令「.BASE 1X」及
び「.BASE 1Z」に基づいてクラスYが他のクラ
スに継承されないことを判定し、オーバーライドメソッ
ドでない場合の命令列に置換しに行き、次に、関数「v
oid j(Z*)」のメソッドクラス疑似命令「.C
LASS 1Z」からクラスZを認識し、出力ファイル
B109中の継承関係疑似命令「.BASE 1Z」に
基づいてクラスZが他のクラスに継承されることを判定
し、オーバーライドメソッドである場合の命令列に置換
しに行き、次に、関数「void k(W*)」のメソ
ッド命令列中のメソッドクラス疑似命令「.CLASS
1W」からクラスWを認識し、全ての出力ファイル中
の全ての継承関係疑似命令「.BASE 1X」及
び「.BASE 1Z」に基づいてクラスWが他のクラ
スに継承されないことを判定し、オーバーライドメソッ
ドでない場合の命令列に置換しに行く(ステップ110
4)。
【0051】そのメソッドの属するクラスが他のクラス
に継承されないと判定された場合には、メソッド命令列
検出部111で検出されたメソッド命令列をメソッド置
換部113が、オーバーライドメソッドでない場合の機
械語命令列だけに置換する。ここでは、関数「void
i(Y*)」のメソッド命令列を命令「jsr _h
_1Y」に、関数「void j(W*)」のメソッド
命令列を命令「jsr_h_1W」に順次置換し終了判
定へ戻る(ステップ1105)。
【0052】そのメソッドの属するクラスが他のクラス
に継承されると判定された場合には、メソッド命令列検
出部111で検出されたメソッド命令列をメソッド置換
部113が、オーバーライドメソッドである場合の機械
語命令列だけに置換する。ここでは、関数「void
j(Z*)」のメソッド命令列を命令「mov (r0
+4),r1」、「mov (r1+0),r1」及び
「jsr r1」に置換し終了判定へ戻る(ステップ1
106)。
【0053】メソッド命令列検出部111の処理が終了
すると、次に、全ての継承関係疑似命令を、メソッド置
換部113が消去する。ここでは、継承関係疑似命
令「.BASE 1X」及び「.BASE 1Z」を消
去する(ステップ1107)。次に、メソッド置換部1
13で置換されたファイルの全てを、ファイル連結部1
14が連結して実行ファイルを生成する。なお、上記の
ファイルを連結する処理は従来の連結装置が行なう処理
と異ならないので詳しい説明を省略する(ステップ11
08)。
【0054】次に、実行ファイル115を出力する。こ
こでは、図8に示した実行ファイルを出力する(ステッ
プ1109)。なお、本実施例でメソッド置換部113
が行う処理は、図10(a)に示すようにメソッド命令
列がオーバーライドメソッドでない場合の命令列とオー
バーライドメソッドである場合の命令列の両方をそのま
まの形で含んでいる場合にはこのメソッド命令列から不
必要な部分を除くだけの処理となり、メソッド命令列が
図10(b)(c)に示すようなマクロ命令の場合には
このマクロ命令に基づいて必要な命令列を生成する処理
となる。
【0055】また、本実施例では翻訳装置と連結装置と
を備えるとしたが、連結装置は必ずしも必要ではない。
1つの入力ファイルにプログラムの実行に必要な全ての
クラス定義が含まれている場合には、この入力ファイル
を翻訳するだけのプログラム変換装置であってもよく、
この入力ファイルは複数の入力ファイルからあらかじめ
連結されて生成されたものであってもよい。この場合に
は、プログラム変換装置は、クラス定義で継承している
クラス名を疑似命令に翻訳したり、オーバーライドメソ
ッド呼び出し命令をメソッド命令列に翻訳したり、メソ
ッド命令列を置換したりする必要がなく、クラスの定義
に基づいて全てのクラスの継承関係を抽出し、オーバー
ライドメソッド呼び出し命令をオーバーライドメソッド
でない場合もしくはオーバーライドメソッドである場合
のどちらかに翻訳するものであればよい。
【0056】また、本実施例のプログラム変換装置は本
実施例を実現するプログラムを汎用のコンピュータに読
み取らせることで実現可能である。従って、このプログ
ラムを記録したコンピュータ読み取り可能な記憶媒体の
みの移動により容易に譲渡される。
【0057】
【発明の効果】
(イ)以上の説明から明かなように、本発明に係るプロ
グラム変換装置は、オブジェクト指向言語のプログラム
を機械語命令列に翻訳して実行ファイルを生成するプロ
グラム変換装置であって、前記オブジェクト指向言語の
プログラムにはオーバーライドメソッドを含むクラスの
定義とオーバーライドメソッド呼び出し命令が含まれ、
前記クラスの定義に基づいて全てのクラスの継承関係を
継承関係情報として抽出する抽出手段と、全ての前記継
承関係情報に基づいて前記オーバーライドメソッド呼び
出し命令によって呼び出されるメソッドが属するクラス
が継承されるか否かを判断する判断手段と、前記判断手
段で継承されないと判断された場合に前記オーバーライ
ドメソッド呼び出し命令をオーバーライドメソッドでな
い場合の機械語命令列に翻訳するメソッド翻訳手段を備
えることを特徴とする。
【0058】本発明は,1つの入力ファイルにプログラ
ムの実行に必要な全てのクラス定義が含まれている場合
に、全てのクラスの継承関係に基づいてオーバーライド
メソッド呼び出し命令をオーバーライドメソッドでない
場合もしくはオーバーライドメソッドである場合のどち
らかに翻訳するという方法をとる。これによって、ある
クラスが他のクラスに全く継承されない場合にそのクラ
スで定義されるオーバーライドメソッドがオーバーライ
ド機能を使うことができないという性質を利用して、オ
ーバーライドメソッド呼び出し命令をオーバーライドメ
ソッドでない場合の命令列に翻訳することができる。即
ち、間接呼び出しを直接呼び出しにすることができる。
【0059】従って、この分だけオーバーライドメソッ
ド呼び出し命令のコードサイズが縮小でき、実行速度が
向上する。 (ロ)また、本発明に係るプログラム変換装置は、オブ
ジェクト指向言語のプログラムをファイル単位で機械語
命令列に翻訳し出力ファイルとして出力する翻訳装置
と、前記翻訳装置で翻訳された出力ファイルを連結して
実行ファイルを生成する連結装置とを備えるプログラム
変換装置であって、前記オブジェクト指向言語のプログ
ラムにはオーバーライドメソッドを含むクラスの定義と
オーバーライドメソッド呼び出し命令が含まれ、前記翻
訳装置は、前記クラスの定義に基づいてファイル単位の
クラスの継承関係を継承関係情報に翻訳する継承関係翻
訳手段と、前記オーバーライドメソッド呼び出し命令を
この命令によって呼び出されるメソッドが属するクラス
を表すメソッドクラス情報とこの命令によって呼び出さ
れるメソッドがオーバーライドメソッドでない場合の機
械語命令列を表す非オーバーライド情報とオーバーライ
ドメソッドである場合の機械語命令列を表すオーバーラ
イド情報とを含むメソッド命令列に翻訳するメソッド翻
訳手段とを備え、前記連結装置は、前記翻訳装置で翻訳
された全ての出力ファイルの中の全ての前記継承関係情
報に基づいて前記オーバーライドメソッド呼び出し命令
によって呼び出されるメソッドが属するクラスが継承さ
れるか否かを判断する判断手段と、前記メソッド命令列
を前記判断手段で継承されないと判断された場合にはオ
ーバーライドメソッドでない場合の機械語命令列だけに
置換し、一方、継承されると判断された場合にはオーバ
ーライドメソッドである場合の機械語命令列だけに置換
する置換手段とを備えることを特徴とする。
【0060】入力ファイルが複数の場合、翻訳装置では
ファイル単位のクラスの継承関係が判るだけで全てのク
ラスの継承関係は判らない。また、従来の連結装置では
クラスの継承関係は全く判らない。本発明は、翻訳装置
でファイル単位のクラスの継承関係を継承関係情報に翻
訳し、連結装置で全ての前記継承関係情報を参照するの
で、連結装置において全てのクラスの継承関係が判る。
さらに、翻訳装置でオーバーライドメソッド呼び出し命
令を、オーバーライドメソッドでない場合とオーバーラ
イドメソッドである場合の両方の命令列に翻訳し、連結
装置でどちらかを選択するという方法をとる。
【0061】これによって、あるクラスが他のクラスに
全く継承されない場合にそのクラスで定義されるオーバ
ーライドメソッドがオーバーライド機能を使うことがで
きないという性質を利用して、オーバーライドメソッド
呼び出し命令をオーバーライドメソッドでない場合の命
令列に翻訳することができる。即ち、間接呼び出しを直
接呼び出しにすることができる。
【0062】従って、この分だけオーバーライドメソッ
ド呼び出し命令のコードサイズが縮小でき、実行速度が
向上する。 (ハ)また、本発明に係るプログラム変換装置は前記
(ロ)のプログラム変換装置において、前記メソッド翻
訳手段は、前記非オーバーライド命令と、前記オーバー
ライド命令とを1つのマクロ命令で表すことを特徴とす
る。
【0063】これによって、命令数が減少する。従っ
て、翻訳装置から出力される出力ファイルのファイルサ
イズが縮小でき、前記連結装置の実行速度が向上する。 (ニ)また、本発明に係るプログラム変換装置は前記
(ロ)のプログラム変換装置において、前記メソッド翻
訳手段は、前記メソッドクラス情報と、前記非オーバー
ライド命令と、前記オーバーライド命令とを1つのマク
ロ命令で表すことを特徴とする。
【0064】これによって、前記メソッドクラス情報の
命令も不要となり、命令数が減少する。また、マクロ命
令が1行なので従来の連結装置が行う命令の書式と類似
している。従って、翻訳装置から出力される出力ファイ
ルのファイルサイズが縮小でき、前記連結装置の実行速
度が向上し、また、前記連結装置の追加変更を少なくす
ることができる。
【0065】(ホ)また、本発明に係るプログラム変換
装置は前記(ニ)のプログラム変換装置において、前記
マクロ命令は、マクロ名と、前記メソッドクラス情報
と、オーバーライドメソッドでない場合に呼び出すラベ
ル名と、オーバーライドメソッドである場合に使用する
オブジェクトの先頭からのオフセット値と、オーバーラ
イドメソッドである場合に使用するメソッドアドレス格
納テーブルの先頭からのオフセット値で構成されること
を特徴とする。
【0066】これによって、このマクロ命令の書式は従
来の連結装置が行う命令の書式と類似する。従って、前
記連結装置の追加変更を少なくすることができる。 (ヘ)また、本発明に係るプログラム変換装置は前記
(イ)、(ロ)、(ハ)、(ニ)又は(ホ)のプログラ
ム変換装置において、前記継承関係情報は、クラスの定
義において他のクラスに継承されているクラス名を表す
情報であることを特徴とする。
【0067】これによって、複数のクラスが同じクラス
を継承している場合に、前記継承関係情報は複数必要な
く、1つを共用することができる。従って、翻訳装置か
ら出力される出力ファイルのファイルサイズが縮小で
き、前記連結装置の実行速度が向上する。 (ト)また、本発明に係るプログラムを記録したコンピ
ュータ読み取り可能な記憶媒体は、オブジェクト指向言
語のプログラムを機械語命令列に翻訳して実行ファイル
を生成するプログラムを記録したコンピュータ読み取り
可能な記憶媒体であって、前記オブジェクト指向言語の
プログラムにはオーバーライドメソッドを含むクラスの
定義とオーバーライドメソッド呼び出し命令が含まれ、
前記クラスの定義に基づいて全てのクラスの継承関係を
継承関係情報として抽出する抽出手順と、全ての前記継
承関係情報に基づいて前記オーバーライドメソッド呼び
出し命令によって呼び出されるメソッドが属するクラス
が継承されるか否かを判断する判断手順と、前記判断手
順で継承されないと判断された場合に前記オーバーライ
ドメソッド呼び出し命令をオーバーライドメソッドでな
い場合の機械語命令列に翻訳するメソッド翻訳手順を備
えることを特徴とする。
【0068】本発明は,1つの入力ファイルにプログラ
ムの実行に必要な全てのクラス定義が含まれている場合
に、全てのクラスの継承関係に基づいてオーバーライド
メソッド呼び出し命令をオーバーライドメソッドでない
場合もしくはオーバーライドメソッドである場合のどち
らかに翻訳するという方法をとる。これによって、ある
クラスが他のクラスに全く継承されない場合にそのクラ
スで定義されるオーバーライドメソッドがオーバーライ
ド機能を使うことができないという性質を利用して、オ
ーバーライドメソッド呼び出し命令をオーバーライドメ
ソッドでない場合の命令列に翻訳することができる。即
ち、間接呼び出しを直接呼び出しにすることができる。
【0069】従って、この分だけオーバーライドメソッ
ド呼び出し命令のコードサイズが縮小でき、実行速度が
向上する。 (チ)また、本発明に係るプログラムを記録したコンピ
ュータ読み取り可能な記憶媒体は、オブジェクト指向言
語のプログラムをファイル単位で機械語命令列に翻訳し
出力ファイルとして出力する翻訳手順と前記翻訳手順で
翻訳された出力ファイルを連結して実行ファイルを生成
する連結手順とを備えるプログラムを記録したコンピュ
ータ読み取り可能な記憶媒体であって、前記オブジェク
ト指向言語のプログラムにはオーバーライドメソッドを
含むクラスの定義とオーバーライドメソッド呼び出し命
令が含まれ、前記翻訳手順は、前記クラスの定義に基づ
いてファイル単位のクラスの継承関係を継承関係情報に
翻訳する継承関係翻訳手順と、前記オーバーライドメソ
ッド呼び出し命令をこの命令によって呼び出されるメソ
ッドが属するクラスを表すメソッドクラス情報とこの命
令によって呼び出されるメソッドがオーバーライドメソ
ッドでない場合の機械語命令列を表す非オーバーライド
情報とオーバーライドメソッドである場合の機械語命令
列を表すオーバーライド情報とを含むメソッド命令列に
翻訳するメソッド翻訳手順とを備え、前記連結手順は、
前記翻訳手順で翻訳された全ての出力ファイルの中の全
ての前記継承関係情報に基づいて前記オーバーライドメ
ソッド呼び出し命令によって呼び出されるメソッドが属
するクラスが継承されるか否かを判断する判断手順と、
前記メソッド命令列を前記判断手順で継承されないと判
断された場合にはオーバーライドメソッドでない場合の
機械語命令列だけに置換し、一方、継承されると判断さ
れた場合にはオーバーライドメソッドである場合の機械
語命令列だけに置換する置換手順とを備えることを特徴
とする。
【0070】入力ファイルが複数の場合、翻訳手順では
ファイル単位のクラスの継承関係が判るだけで全てのク
ラスの継承関係は判らない。また、従来の連結手順では
クラスの継承関係は全く判らない。本発明は、翻訳手順
でファイル単位のクラスの継承関係を継承関係情報に翻
訳し、連結手順で全ての前記継承関係情報を参照するの
で、連結手順において全てのクラスの継承関係が判る。
さらに、翻訳手順でオーバーライドメソッド呼び出し命
令を、オーバーライドメソッドでない場合とオーバーラ
イドメソッドである場合の両方の命令列に翻訳し、連結
手順でどちらかを選択するという方法をとる。
【0071】これによって、あるクラスが他のクラスに
全く継承されない場合にそのクラスで定義されるオーバ
ーライドメソッドがオーバーライド機能を使うことがで
きないという性質を利用して、オーバーライドメソッド
呼び出し命令をオーバーライドメソッドでない場合の命
令列に翻訳することができる。即ち、間接呼び出しを直
接呼び出しにすることができる。
【0072】従って、この分だけオーバーライドメソッ
ド呼び出し命令のコードサイズが縮小でき、実行速度が
向上する。
【図面の簡単な説明】
【図1】本発明のプログラム変換装置の構成を示す図で
ある
【図2】入力ファイルA101に納められる、C++言
語の仮想関数を含むクラスXの定義、クラスXを継承す
るクラスYの定義、クラスXを継承するクラスZの定
義、関数void i(Y*)の定義及び関数void
j(Z*)の定義を示す図である。
【図3】図2に示したクラスの継承関係を表す図であ
る。
【図4】入力ファイルB102に納められる、C++言
語の仮想関数を含むクラスXの定義、クラスXを継承す
るクラスYの定義、クラスXを継承するクラスZの定
義、クラスZを継承するクラスWの定義及び関数voi
d k(W*)の定義を示す図である。
【図5】図4に示したクラスの継承関係を表す図であ
る。
【図6】図2に示した入力ファイルA101の入力によ
り、翻訳部103が出力する出力ファイルA108を示
す図である。
【図7】図4に示した入力ファイルB102の入力によ
り、翻訳部103が出力する出力ファイルB109を示
す図である。
【図8】図6に示した出力ファイルA108及び図7に
示した出力ファイルB109の入力により、連結部11
0が出力する実行ファイル115を示す図である。
【図9】翻訳部103の動作フローチャートを示す図で
ある。
【図10】図10(a)はメソッド命令列を示す図であ
る。図10(b)はメソッド命令列をメソッドクラス疑
似命令及び1つのマクロ命令で表した図である。図10
(c)はメソッド命令列をメソッドクラス疑似命令の情
報も含め1つのマクロ命令で表した図である。
【図11】連結部110の動作フローチャートを示す図
である。
【図12】C++言語の仮想関数を含むクラス定義を示
す図である。
【図13】図12に示したクラスの継承関係を表す図で
ある。
【図14】図12に示したクラスで作成したオブジェク
トのメモリ配置をクラス別に示す図である。
【図15】クラスCの仮想関数hの呼び出しを含む関数
iをC++言語で記述した例を示す図である。
【図16】図15の関数iを従来のプログラム変換装置
で機械語命令列に 変換した例を示す図である。
【図17】上記の関数hが非仮想関数として定義されて
いたと仮定した場合に、関数hの呼び出しを含む関数i
を機械語命令列に変換した例を示す図である。
【符合の説明】
101 入力ファイルA 102 入力ファイルB 103 翻訳部 104 継承関係翻訳部 105 メソッド呼び出し検出部 106 メソッド翻訳部 107 命令翻訳部 108 出力ファイルA 109 出力ファイルB 110 連結部 111 メソッド命令列検出部 112 継承クラス判定部 113 メソッド置換部 114 ファイル連結部 115 実行ファイル

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】 オブジェクト指向言語のプログラムを機
    械語命令列に翻訳して実行ファイルを生成するプログラ
    ム変換装置であって、 前記オブジェクト指向言語のプログラムにはオーバーラ
    イドメソッドを含むクラスの定義とオーバーライドメソ
    ッド呼び出し命令が含まれ、 前記クラスの定義に基づいて全てのクラスの継承関係
    を、継承関係情報として抽出する抽出手段と、 全ての前記継承関係情報に基づいて、前記オーバーライ
    ドメソッド呼び出し命令によって呼び出されるメソッド
    が属するクラスが、継承されるか否かを判断する判断手
    段と、 前記判断手段で継承されないと判断された場合に、前記
    オーバーライドメソッド呼び出し命令を、オーバーライ
    ドメソッドでない場合の機械語命令列に翻訳するメソッ
    ド翻訳手段を備えることを特徴とするプログラム変換装
    置。
  2. 【請求項2】 オブジェクト指向言語のプログラムをフ
    ァイル単位で機械語命令列に翻訳し出力ファイルとして
    出力する翻訳装置と、前記翻訳装置で翻訳された出力フ
    ァイルを連結して実行ファイルを生成する連結装置とを
    備えるプログラム変換装置であって、 前記オブジェクト指向言語のプログラムには、オーバー
    ライドメソッドを含むクラスの定義とオーバーライドメ
    ソッド呼び出し命令が含まれ、 前記翻訳装置は、 前記クラスの定義に基づいてファイル単位のクラスの継
    承関係を、継承関係情報に翻訳する継承関係翻訳手段
    と、 前記オーバーライドメソッド呼び出し命令を、この命令
    によって呼び出されるメソッドが属するクラスを表すメ
    ソッドクラス情報と、この命令によって呼び出されるメ
    ソッドがオーバーライドメソッドでない場合の機械語命
    令列を表す非オーバーライド情報と、オーバーライドメ
    ソッドである場合の機械語命令列を表すオーバーライド
    情報とを含むメソッド命令列に翻訳するメソッド翻訳手
    段とを備え、 前記連結装置は、 前記翻訳装置で翻訳された全ての出力ファイルの中の全
    ての前記継承関係情報に基づいて、前記オーバーライド
    メソッド呼び出し命令によって呼び出されるメソッドが
    属するクラスが、継承されるか否かを判断する判断手段
    と、 前記メソッド命令列を、前記判断手段で継承されないと
    判断された場合にはオーバーライドメソッドでない場合
    の機械語命令列だけに置換し、一方、継承されると判断
    された場合にはオーバーライドメソッドである場合の機
    械語命令列だけに置換する置換手段とを備えることを特
    徴とするプログラム変換装置。
  3. 【請求項3】 前記メソッド翻訳手段は、 前記非オーバーライド命令と、前記オーバーライド命令
    とを1つのマクロ命令で表すことを特徴とする請求項2
    記載のプログラム変換装置。
  4. 【請求項4】 前記メソッド翻訳手段は、 前記メソッドクラス情報と、前記非オーバーライド命令
    と、前記オーバーライド命令とを1つのマクロ命令で表
    すことを特徴とする請求項2記載のプログラム変換装
    置。
  5. 【請求項5】 前記マクロ命令は、 マクロ名と、前記メソッドクラス情報と、オーバーライ
    ドメソッドでない場合に呼び出すラベル名と、オーバー
    ライドメソッドである場合に使用するオブジェクトの先
    頭からのオフセット値と、オーバーライドメソッドであ
    る場合に使用するメソッドアドレス格納テーブルの先頭
    からのオフセット値で構成されることを特徴とする請求
    項4記載のプログラム変換装置。
  6. 【請求項6】 前記継承関係情報は、 クラスの定義において他のクラスに継承されているクラ
    ス名を表す情報であることを特徴とする請求項1、2、
    3、4又は5記載のプログラム変換装置。
  7. 【請求項7】 オブジェクト指向言語のプログラムを機
    械語命令列に翻訳して実行ファイルを生成するプログラ
    ムを記録したコンピュータ読み取り可能な記憶媒体であ
    って、 前記オブジェクト指向言語のプログラムにはオーバーラ
    イドメソッドを含むクラスの定義とオーバーライドメソ
    ッド呼び出し命令が含まれ、 前記クラスの定義に基づいて全てのクラスの継承関係を
    継承関係情報として抽出する抽出手順と、 全ての前記継承関係情報に基づいて、前記オーバーライ
    ドメソッド呼び出し命令によって呼び出されるメソッド
    が属するクラスが、継承されるか否かを判断する判断手
    順と、 前記判断手順で継承されないと判断された場合に、前記
    オーバーライドメソッド呼び出し命令を、オーバーライ
    ドメソッドでない場合の機械語命令列に翻訳するメソッ
    ド翻訳手順を備えることを特徴とするプログラムを記録
    したコンピュータ読み取り可能な記憶媒体。
  8. 【請求項8】 オブジェクト指向言語のプログラムをフ
    ァイル単位で機械語命令列に翻訳し出力ファイルとして
    出力する翻訳手順と、前記翻訳手順で翻訳された出力フ
    ァイルを連結して実行ファイルを生成する連結手順とを
    備えるプログラムを記録したコンピュータ読み取り可能
    な記憶媒体であって、 前記オブジェクト指向言語のプログラムには、オーバー
    ライドメソッドを含むクラスの定義とオーバーライドメ
    ソッド呼び出し命令が含まれ、 前記翻訳手順は、 前記クラスの定義に基づいてファイル単位のクラスの継
    承関係を、継承関係情報に翻訳する継承関係翻訳手順
    と、 前記オーバーライドメソッド呼び出し命令を、この命令
    によって呼び出されるメソッドが属するクラスを表すメ
    ソッドクラス情報と、この命令によって呼び出されるメ
    ソッドがオーバーライドメソッドでない場合の機械語命
    令列を表す非オーバーライド情報と、オーバーライドメ
    ソッドである場合の機械語命令列を表すオーバーライド
    情報とを含むメソッド命令列に翻訳するメソッド翻訳手
    順とを備え、 前記連結手順は、 前記翻訳手順で翻訳された全ての出力ファイルの中の全
    ての前記継承関係情報に基づいて、前記オーバーライド
    メソッド呼び出し命令によって呼び出されるメソッドが
    属するクラスが、継承されるか否かを判断する判断手順
    と、 前記メソッド命令列を、前記判断手順で継承されないと
    判断された場合にはオーバーライドメソッドでない場合
    の機械語命令列だけに置換し、一方、継承されると判断
    された場合にはオーバーライドメソッドである場合の機
    械語命令列だけに置換する置換手順とを備えることを特
    徴とするプログラムを記録したコンピュータ読み取り可
    能な記憶媒体。
JP12560797A 1997-05-15 1997-05-15 プログラム変換装置 Expired - Fee Related JP3672207B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP12560797A JP3672207B2 (ja) 1997-05-15 1997-05-15 プログラム変換装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP12560797A JP3672207B2 (ja) 1997-05-15 1997-05-15 プログラム変換装置

Publications (2)

Publication Number Publication Date
JPH10320204A true JPH10320204A (ja) 1998-12-04
JP3672207B2 JP3672207B2 (ja) 2005-07-20

Family

ID=14914307

Family Applications (1)

Application Number Title Priority Date Filing Date
JP12560797A Expired - Fee Related JP3672207B2 (ja) 1997-05-15 1997-05-15 プログラム変換装置

Country Status (1)

Country Link
JP (1) JP3672207B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010006750A (ko) * 1999-03-16 2001-01-26 포만 제프리 엘 호출의 타겟이 동일한 패키지에 속한다고 보증된 자바패키지 내의 호출을 식별하는 방법
US6675377B1 (en) 1999-09-13 2004-01-06 Matsushita Electric Industrial Co., Ltd. Program conversion apparatus
JP2006146613A (ja) * 2004-11-19 2006-06-08 Matsushita Electric Ind Co Ltd プログラム変換方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010006750A (ko) * 1999-03-16 2001-01-26 포만 제프리 엘 호출의 타겟이 동일한 패키지에 속한다고 보증된 자바패키지 내의 호출을 식별하는 방법
US6675377B1 (en) 1999-09-13 2004-01-06 Matsushita Electric Industrial Co., Ltd. Program conversion apparatus
JP2006146613A (ja) * 2004-11-19 2006-06-08 Matsushita Electric Ind Co Ltd プログラム変換方法
US7747991B2 (en) 2004-11-19 2010-06-29 Panasonic Corporation Program converting method

Also Published As

Publication number Publication date
JP3672207B2 (ja) 2005-07-20

Similar Documents

Publication Publication Date Title
CN108920133B (zh) 跨语言编程方法、装置、电子设备及存储介质
US7010796B1 (en) Methods and apparatus providing remote operation of an application programming interface
US8286146B2 (en) Method for automatic generation of schema mapping application code
US6931627B2 (en) System and method for combinatorial test generation in a compatibility testing environment
JP4130713B2 (ja) プログラム変換装置
JPH05508503A (ja) 後方記号実行による分岐分析
US7367013B2 (en) Method for integrating Linux kernel and application software packages and generating installation file list based on CML2 computer language
JP2005129027A (ja) アプリケーションプログラミングインターフェース(api)の設計
JPH06502269A (ja) プログラムコードの交差像参照方法
JP2008251033A (ja) 構造化データの汎用オブジェクト指向記述(gdl)のための方法
JPH05508504A (ja) プログラム翻訳方法
JPH11110194A (ja) 外部ライブラリ関数との結合方法ならびに同方法がプログラムされ記録される記録媒体
Freeman Essential TypeScript 5
US7966600B2 (en) Distributed resource understanding tool management
JP2005018425A (ja) プログラム変換方法、プログラムおよび記憶媒体
AU2003204197A1 (en) System and method for defining and using subclasses declaratively within markup
JPH10320204A (ja) プログラム変換装置
US6922735B2 (en) Management of co-processor information by integrating non-program information with program information
JP2006146613A (ja) プログラム変換方法
CN116301826A (zh) Caa开发中调用软件命令进行数据批量处理的方法
US6763516B2 (en) Convention checking apparatus, convention checking system, convention checking method, and storage medium on which is recorded a convention checking program
JP2000122876A (ja) 情報処理装置
JP5399601B2 (ja) 実装コード開発システム、及び実装コード開発プログラム
JP6264179B2 (ja) コンパイル方法、コンパイル装置およびコンパイルプログラム
Ilett More shader fundamentals

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040513

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050104

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050303

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: 20050412

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050415

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: 20080428

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090428

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100428

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110428

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120428

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130428

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130428

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140428

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees