JP3405996B2 - コンピュータベースのソフトウェアコンパイルシステム及びデバッガ - Google Patents

コンピュータベースのソフトウェアコンパイルシステム及びデバッガ

Info

Publication number
JP3405996B2
JP3405996B2 JP24115391A JP24115391A JP3405996B2 JP 3405996 B2 JP3405996 B2 JP 3405996B2 JP 24115391 A JP24115391 A JP 24115391A JP 24115391 A JP24115391 A JP 24115391A JP 3405996 B2 JP3405996 B2 JP 3405996B2
Authority
JP
Japan
Prior art keywords
virtual table
data format
virtual
address
debug
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
Application number
JP24115391A
Other languages
English (en)
Other versions
JPH04247536A (ja
Inventor
ドゥミトリー・レンコフ
シャンカー・ユニ
ミケイ・メタ
マーク・ダブリュ・マクドウェル
マノイ・ダドゥー
ブルーノ・メリ
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.)
HP Inc
Original Assignee
Hewlett Packard Co
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 Hewlett Packard Co filed Critical Hewlett Packard Co
Publication of JPH04247536A publication Critical patent/JPH04247536A/ja
Application granted granted Critical
Publication of JP3405996B2 publication Critical patent/JP3405996B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、クラスの例示の実行時
のデータ形式(以下では、実行時データ形式とも記載)
の識別を支援するコンピュータソフトウェアのコンパイ
ルシステムおよび方法に関する。この明細書では、クラ
スの例示をオブジェクトとも言う。
【0002】特に、本発明は、多形(polymorphism)を
支援するコンピュータプログラム言語で表わされたオブ
ジェクトの実行時データ形式の識別を支援するコンピュ
ータソフトウェアのコンパイルシステムおよび方法に関
する。多形は、正確に同じインタフェースを使用して多
様な関数を呼出す能力である。本発明は、多形を実現す
るのに導出クラスおよび仮想関数を使用するコンピュー
タプログラム言語(C++のような)で動作するようにな
っており、それで動作することを意図している。この場
合仮想関数の呼出しは、コンパイラが生成する関数アド
レスのテーブルによる間接関数呼出しとして実施され
る。このようなテーブルを仮想テーブルと言う。
【0003】この明細書は、本発明の特徴、構造、およ
び動作を例示するのに屡々C++コンピュータプログラム
言語を参照する。この明細書はまた、本発明の背景を説
明するのにもC++コンピュータプログラム言語を参照す
る。
【0004】しかし、C++コンピュータプログラム言語
の参照は、この明細書では例示の目的だけで行われる。
本発明は、C++コンピュータプログラム言語に限定され
ない。むしろ、本発明は、多形を支援し、仮想テーブル
を使用して仮想メンバー関数のアドレスを格納するコン
ピュータプログラム言語で動作するようになっており且
つそれを目的としている。C++コンピュータプログラム
言語は、このようなコンピュータプログラム言語の一例
である。
【0005】
【従来の技術】従来のC++トランスレータ、コンパイ
ラ、およびデバッガは、コンピュータプログラムにおけ
るオブジェクトの実行時データ形式の識別を支援しな
い。換言すれば、従来のC++トランスレータおよびコン
パイラを用いて作られるコンピュータプログラムにおけ
るオブジェクトに対する正確なデータ形式情報は、実行
時には利用できない。その結果、従来のC++デバッガは
従来のC++トランスレータおよびコンパイラを用いて作
られるコンピュータプログラムにおけるオブジェクトに
対する正確な実行時データ形式情報を抽出し、利用する
ようにはなっていない。
【0006】実行時中にこのようなデータ形式情報を利
用できないことによりデバッガの機能が限定される。た
とえば、実行時中このようなデータ形式情報にアクセス
しなければ、デバッガは、ポインタや参照変数を確実に
参照して(ポインタや参照変数がオブジェクトを指す)
オブジェクトの実際のデータ形式を決定し、使用するこ
とができない。また、デバッガは、ポインタや参照変数
を確実に使用してオブジェクトの内容を完全且つ正確に
表示することができない。
【0007】また、実行時中に、このようなデータ形式
情報を利用できることは、C++のような言語において、
新しく取り入れられた照会演算子(innovative type in
quiry operator)を作り出す基礎として使用することが
できる。このような演算子は、オブジェクトの正確なデ
ータ形式を識別するのに必要なコードを書くとき有用で
ある。
【0008】上に述べた問題点を図1および図2を参照
して下に更に詳細に説明する。
【0009】最初に図1を参照するが、下の表1の命令
文がC++コンピュータプログラムにあると仮定する。
【0010】
【表1】
【0011】[ANIMAL]は、二つの仮想メンバー関数
(以下では、単にメンバー関数とも記載)、[x()]お
よび[y()]を有するクラスとして宣言される。[dog_p
tr]136および[horse_ptr]134は、形式[ANIMAL]を
指すポインタとして宣言される。[dog_ptr]136および
[horse_ptr]134は、形式[ANIMAL]の、それぞれのオ
ブジェクト124、122を指すように割当てられている。図
1は、表1のクラスおよびポインタの宣言とオブジェク
トの例示についてのオブジェクトコード表現102を図式
的に示す。オブジェクトコード表現102は従来のC++ト
ランスレータおよびコンパイラにより生成される。
【0012】図1に示すように、オブジェクトコード表
現102は、メンバー関数[x()]のコード部分106とメン
バー関数[y()]のコード部分108とを備えている。オブ
ジェクトコード表現102はまた、クラス[ANIMAL]と関
連する仮想テーブル104を備えている。一般に、仮想テ
ーブルは、仮想メンバー関数を備えたクラスと関連して
いる。
【0013】仮想テーブル104は、メンバー関数[y()]
に対するエントリ110、112とメンバー関数[x()]に対
するエントリ114、116とを備えている。一般に、クラス
に関連する仮想テーブルは、クラスの各メンバー関数に
ついて一つのエントリを備えている。
【0014】メンバー関数[y()]に対するエントリ11
0、112は、メンバー関数[y()]のコード部分108を指す
ポインタ118が入っているフィールド112を備えている。
ポインタ118は、メンバー関数[y()]のコード部分108
の仮想メンバー関数のアドレスを表わす。エントリ11
0、112はまた、メンバー関数[y()]のコード部分108を
呼出すことに関連する情報が入っているフィールド110
を備えている。
【0015】メンバー関数[x()]に対するエントリ11
4、116はメンバー関数[y()]に対するエントリ110、11
2のものと類似であるフィールド114、116を備えてい
る。
【0016】形式[ANIMAL]のオブジェクト122、124
は、自己記述情報を備えている。自己記述情報は、仮想
テーブルアドレスフィールド126、128をそれぞれ含む。
仮想テーブルアドレスフィールド126、128には、クラス
[ANIMAL]と関連する仮想テーブル104を指す仮想テー
ブルアドレス130、132がそれぞれ入っている。一般に、
同じクラスのオブジェクトには同じ仮想テーブルを指す
仮想テーブルアドレスが入っている。
【0017】表1で、命令文 i=(*dog_ptr).x(); は、[dog_ptr]136により指示されているオブジェクト
124に関連する(および[ANIMAL]クラスとも関連す
る)メンバー関数[x()]を呼出し、[x()]により返さ
れた整数を変数[i]に割当てる。メンバー関数[x()]
のコード部分106は、仮想テーブル104のポインタ120を
介してアクセスされる。仮想テーブル104は、オブジェ
クト124の仮想テーブルアドレス132を介してアクセスさ
れる。オブジェクト124は、[dog_ptr]136を介してア
クセスされる。
【0018】今度は図2を参照して、下の表2の文がC
++コンピュータプログラムで書かれていると仮定する。
【0019】
【表2】
【0020】[ONE]は、データメンバー[I1]および
仮想メンバー関数[mem_1()]を有するクラスとして宣
言される。同様に、[TWO]はデータメンバー[I2]お
よび仮想メンバー関数[mem_2()]を有するクラスとし
て宣言される。[THREE]は[ONE]および[TWO]クラ
スの導出クラスであり、データメンバー[I3]を備えて
いる。
【0021】[ptr3]226は、クラス[THREE]を指すポ
インタとして宣言され、クラス[THREE]のオブジェク
ト202を指すように割当てられる。
【0022】図2は、表2の命令文のオブジェクトコー
ド表現102を図式に示したものである。具体的には、図
2は、クラス[THREE]の例示オブジェクト202の内部配
置を図示している。オブジェクトコード表現102は、従
来のC++トランスレータおよびコンパイラにより作られ
る。
【0023】図2に示すように、オブジェクト202には
データメンバー[I1]206、[I2]210、および[I3]21
4がある。オブジェクト202は仮想テーブル216の仮想テ
ーブルアドレス220が入っている仮想テーブルアドレス
フィールド208をも備えている。オブジェクト202はま
た、仮想テーブル218の仮想テーブルアドレス222が入っ
ている仮想テーブルアドレスフィールド212を備えてい
る。仮想テーブル216、218は図1に示す仮想テーブル10
4と同様である。
【0024】[Ptr3]226はクラス[THREE]を指すポイ
ンタとして宣言されているので、デバッガおよび新しく
取り入れられた照会演算子は、オブジェクト202の実際
のデータ形式を決定するのに[Ptr3]226を使用するこ
とができる。また、[Ptr3]226はオブジェクト202の始
まりを指すので、デバッガは[Ptr3]226を使用してオ
ブジェクト202の内容を完全に且つ正確に表示すること
ができる。
【0025】命令文、 THREE*Ptr3=new THREE を備える代りに、表2が命令文 ONE*Ptr1=new THREE を備えていると仮定する。
【0026】この新しい命令文は[Ptr1]224をクラス
[ONE]を指すポインタとして宣言している。しかし、
この命令文は[Ptr1]224をクラス[THREE]のオブジェ
クト202を指すポインタに割当てる。
【0027】図2に示すように、[Ptr1]224はオブジ
ェクト202の始まりを指すので、デバッガは[Ptr1]224
を使用してオブジェクト202の内容を完全に且つ正確に
表示することができる。しかし、[Ptr1]224はクラス
[ONE]を指すポインタとして宣言されているので、デ
バッガおよび新しく取り入れられた照会演算子はオブジ
ェクト202の実際のデータ形式を決定するのに[Ptr1]2
24を使用することができない。
【0028】命令文 ONE*Ptr1=new THREE を備える代りに表2に命令文 TWO*Ptr2=new THREE が入っていると仮定する。
【0029】この新しい命令文は、[Ptr2]228をクラ
ス[TWO]を指すポインタとして宣言している。しか
し、この命令文は[Ptr2]228をクラス[THREE]のオブ
ジェクト202を指すポインタに割当てる。
【0030】図2に示すように、[Ptr2]228はクラス
[TWO]を指すポインタとして宣言されているので、デ
バッガおよび新しく取り入れられた照会演算子はオブジ
ェクト202の実際のデータ形式を決定するのに[Ptr2]2
28を使用することができない。また、[Ptr2]228は、
オブジェクト202の始まりを指さないので、デバッガは
[Ptr2]228を使用してオブジェクト202の内容を完全に
且つ正確に表示することができない。
【0031】それ故、図1および図2に例示し且つ上に
説明したように、従来のC++トランスレータ、コンパイ
ラ、およびデバッガは、コンピュータプログラムにおけ
るオブジェクトの実行時データ形式の識別を支援しない
という点で不適である。
【0032】従来のC++トランスレータ、コンパイラ、
およびデバッガのこのような不適性を解決する従来の方
法には、ユーザが明白に介入する方法がある。これら従
来の方法のもとでは、コンピュータプログラマーは、別
のメンバーをクラス宣言に付加することにより、コンピ
ュータプログラム内のクラス宣言を修正する必要があ
る。付加メンバーはオブジェクトの実際のデータ形式を
格納するのに使用される。具体的には、外部手段、所定
の仮想メンバー関数、または従来のC++コンパイラの動
作により、オブジェクトの実際のデータ形式が付加メン
バーに格納される。その結果、実行時中のオブジェクト
のデータ形式の識別が付加メンバーを参照することによ
り可能になる。
【0033】しかし、従来の方法は、それらがコンピュ
ータプログラマーに対して透明でないという点で不完全
である。また、コンピュータプログラマーはクラス宣言
を明白に修正しなければならないから、従来の方法は労
力を要すると共に誤りを生じやすい。
【0034】
【発明が解決しようとする課題】本発明は、コンピュー
タプログラムにおけるオブジェクトの実行時のデータ形
式の識別を支援するソフトウェアコンパイルシステムお
よび方法を目的とする。
【0035】特に、本発明は、多形を支援するコンピュ
ータプログラム言語におけるオブジェクトの実行時デー
タ形式の識別を支援するコンピュータソフトウェアコン
パイルシステムおよび方法を目的とする。多形は、正確
に同じインタフェースを使用して多様な関数を呼出す能
力である。本発明は、多形を実現するのに導出クラスお
よび仮想関数を使用するコンピュータプログラム言語
(C++のような)で動作するようになっており且つそれ
を目的としている。この場合、仮想関数の呼出しは、コ
ンパイルにより生成された関数アドレスのテーブルによ
る間接的な関数呼出しとして実施される。このようなテ
ーブルを仮想テーブルと言う。
【0036】
【課題を解決するための手段】本発明は、改良されたト
ランスレータ、改良されたコンパイラ、および改良され
たデバッガから構成される。
【0037】本発明は、コンピュータプログラムにおけ
るオブジェクトの実行時データ形式の識別を支援する第
1の方法および第2の方法から構成される。
【0038】第1の方法によれば、改良されたコンパイ
ラとトランスレータとが修正デバッグ情報をオブジェク
トコードファイルに格納する。修正デバッグ情報には複
数の仮想テーブルに関する情報が含まれている。デバッ
グ参照テーブル(以下では、単に参照テーブルとも記
載)は、修正デバッグ情報から構成されている。改良さ
れたデバッガは、デバッグ参照テーブルを使用してオブ
ジェクトの実際のデータ形式を決定し、オブジェクトの
内容を完全に且つ正確に表示する。また、新しく取り入
れられた照会演算子は、実行時中、デバッグ参照テーブ
ルを参照してオブジェクトの実際のデータ形式を決定す
る。
【0039】第1の方法を効率の面で改良した第2の方
法によれば、改良されたコンパイラとトランスレータと
が連鎖状仮想テーブルを作り出す。第1の方法の場合の
ように、改良されたコンパイラとトランスレータとが修
正デバッグ情報をオブジェクトコードファイルに格納す
る。修正デバッグ情報には連鎖状仮想テーブルに関する
情報が入っている。第1の方法の場合のように、デバッ
グ参照テーブルは、修正デバッグ情報から構成されてい
る。改良されたデバッガは、デバッグ参照テーブルを使
用してオブジェクトの実際のデータ形式を決定し、オブ
ジェクトの内容を完全に且つ正確に表示する。新しく取
り入れられた照会演算子は、実行時中、連鎖状仮想テー
ブルを参照してオブジェクトの実際のデータ形式を決定
する。
【0040】本発明の第1および第2の方法によるコン
パイラ、トランスレータ、およびデバッガの動作は(上
に手短かに述べたように)、コンピュータのプログラマ
ーとオペレータに対して透明である。それ故、コンパイ
ラ、トランスレータ、およびデバッガは、コンピュータ
プログラムにおけるオブジェクトの実行時データ形式の
識別をユーザに使いやすく、エラーのない仕方で支援す
る。
【0041】本発明のこれらのおよび他の長所および特
徴の他に、本発明がそれらを如何にして実現しているか
については、下記の、各種実施例の詳細な説明と図、お
よび特許請求の範囲からさらに良く認識される。本発明
は、添付の図を参照して説明される。
【0042】
【実施例】1.0 本発明の概観 本発明328(ここでは、本発明によるアプリケーション
コンピュータプログラム)は、コンピュータプログラム
402におけるオブジェクトの実行時データ形式の識別を
支援するソフトウェアコンパイルシステムおよび方法を
目的としている。
【0043】特に、本発明は、多形を支援するコンピュ
ータプログラム言語におけるオブジェクトの実行時デー
タ形式の識別を支援するコンピュータソフトウェアコン
パイルシステムおよび方法を目的としている。多形は、
正確に同じインタフェースを使用して多様な関数を呼出
す能力である。本発明は、多形を実現するのに導出クラ
スおよび仮想関数を使用する(C++のような)オブジェ
クト指向コンピュータプログラム言語(以下では、単に
コンピュータプログラム言語と記載)で動作するように
なっており、且つそれを目的としている。この場合、仮
想関数の呼出しは、コンパイラが生成する関数アドレス
のテーブルによる間接的な関数呼出しとして実現され
る。このようなテーブルは、仮想テーブルと呼ばれる。
【0044】本発明328は、改良されたトランスレータ5
04、改良されたコンパイラ406、および改良されたデバ
ッガ420から構成されている。
【0045】上に記したとおり、この明細書は、本発明
328の特徴、構造および動作を例示するのにC++コンピ
ュータプログラム言語を屡々参照する。
【0046】しかし、これらC++コンピュータプログラ
ム言語の参照は、この明細書では例示目的のためだけに
行われる。本発明328は、C++コンピュータプログラム
言語に限定されるものではない。むしろ、本発明328
は、多形を支援し、仮想メンバー関数アドレスを格納す
るのに仮想テーブルを使用するコンピュータプログラム
言語で動作するようになっており、且つそれを目的とし
ている。C++コンピュータプログラム言語はこのような
コンピュータプログラム言語の一例である。
【0047】図3に示したように、本発明は、コンピュ
ータプラットフォーム302で動作するアプリケーション
コンピュータプログラム328である。コンピュータプラ
ットフォーム302は、中央処理装置(CPU)312、ラン
ダムアクセスメモリ(RAM)310、および入出力イン
タフェース314から成る一定のハードウェアユニット308
を備えている。アプリケーションコンピュータプログラ
ム328は、RAM310に置くことができる。コンピュータ
プラットフォーム302はまた、オペレーティングシステ
ム304を備えることができ、マイクロ命令コード306を備
えることができる。端末318、データ記憶装置322、およ
びプリンタ326のような各種周辺構成要素をコンピュー
タプラットフォーム302に接続することができる。
【0048】本発明328の好適実施例では、コンピュー
タプラットフォーム302は、HP9000シリーズ300、60
0、または800コンピュータプラットフォームであり、こ
の上で動作するオペレーティングシステム304はHP−
UXのバージョン7.0である。また本発明328のアプリケ
ーションコンピュータプログラム328は、C++コンピュ
ータプログラム言語で書かれているのが望ましい。
【0049】図4に示すとおり、本発明328の第1の実
施例は、コンパイラ406、リンカ430、およびデバッガ42
0から構成されている。
【0050】図5に示すように、本発明328の第2の実
施例は、トランスレータ/コンパイラ複合体502から構
成されており、これはトランスレータ504とコンパイラ5
06とを備えている。トランスレータ/コンパイラ複合体
502は、第1の実施例のコンパイラ406の機能を行う。第
2の実施例のトランスレータ504とコンパイラ506の構造
および動作は、第1の実施例のコンパイラ406の構造お
よび動作と同様である。それ故、第2の実施例のトラン
スレータ504とコンパイラ506との構造および動作は、こ
の明細書で教示し、且つ示唆している本発明328の特徴
および機能に関して、当業者には第1の実施例のコンパ
イラ406の構造および動作についての下記の詳細な説明
に基き明らかなはずである。
【0051】本発明328のいくつかの局面は、現存のコ
ンパイラ、トランスレータ、リンカ、およびデバッガの
技術を使用して実現することができる。しかし、現存す
るコンパイラ、トランスレータ、およびデバッガの技術
に加える修正は本発明328の改良を行うのに必要であ
る。下記説明は、現存するコンパイラ、トランスレー
タ、およびデバッガの技術に加えられるこれらの修正に
重点を置いている。現存するコンパイラ、トランスレー
タ、リンカ、およびデバッガの技術の一般的説明につい
ては、アルフレッド・ヴィ・アホー(Alfred V. Ah
o)、ラビ・セティ(Ravi Sethi)、およびジェフリー
・ディ・ウルマン(Jeffrey D. Ullman)による「Compi
lers,Principles,Techniques,and Tools(コンパイラ、
原理、技法、および手段)」(Addison Wesley 1986)
を参照のこと。これをここに参照により全面的に取入れ
てある。本発明328は、コンピュータプログラム402にお
けるオブジェクトの実行時データ形式の識別を支援する
第1の方法および第2の方法から構成されている。
【0052】第1の方法によれば、改良されたコンパイ
ラ406は、修正デバッグ情報416をオブジェクトコードフ
ァイル412に格納する。修正デバッグ情報416には複数の
仮想テーブル1208、1216、1220、1224に関する情報が入
っている。デバッグ参照テーブル1236は、修正デバッグ
情報416から構成されている。改良されたデバッガ420
は、デバッグ参照テーブル1236を使用してオブジェクト
の実際のデータ形式を決定し、オブジェクトの内容を完
全且つ正確に表示し、修正する。
【0053】また第1の方法によれば、デバッグ参照テ
ーブル1236と同様の参照テーブルを生成することができ
る。新しく取り入れられた照会演算子は、参照テーブル
を参照して、実行時中にオブジェクトの実際のデータ形
式を決定することができる。
【0054】第1の方法に改良を加えたものである第2
の方法によれば、改良されたコンパイラ406が連鎖状仮
想テーブル1318を作り出す。改良されたコンパイラ406
は、修正デバッグ情報416をオブジェクトコードファイ
ル412に格納する。修正デバッグ情報416には連鎖状仮想
テーブル1318に関する情報が入っている。デバッグ参照
テーブル1236は、修正デバッグ情報416から構成されて
いる。改良されたデバッガ420は、デバッグ参照テーブ
ル1236を使用してオブジェクトの実際のデータ形式を決
定し、オブジェクトの内容を完全且つ正確に表示し、修
正する。新しく取り入れられた照会演算子は、連鎖状仮
想テーブル1318を参照して、実行時中に、オブジェクト
の実際のデータ形式を決定する。
【0055】本発明328の第1および第2の方法による
コンパイラ406およびデバッガ420の動作は(上に手短か
に述べたように)、コンピュータのプログラマーおよび
オペレータに対して透明である。それ故、コンパイラ40
6およびデバッガ420は、コンピュータプログラム(ここ
では、ソースコード)402におけるオブジェクトの実行
時データ形式の識別を、ユーザに使い易く、且つエラー
のない仕方で支援する。
【0056】図4に示すように、および上に手短かに述
べたように、本発明328の第1の実施例は、コンパイラ4
06、リンカ430、およびデバッガ420を備えている。コン
パイラ406は、ソースコード402を受取り、オブジェクト
コード414およびデバッグ情報416を生成する。オブジェ
クトコード414およびデバッグ情報416はオブジェクトコ
ードファイル412に格納される。
【0057】リンカ430は、オブジェクトコードファイ
ル412を他のオブジェクトコードファイル432と連結して
実行可能ファイル438を形成する。実行可能ファイル438
は、少なくともオブジェクトコード414およびデバッグ
情報416を備えている。
【0058】デバッガ420は、実行可能ファイル438を受
取り、ユーザ(図4には示してない)の指令のもとに、
実行可能ファイル438の中のオブジェクトコード414およ
びデバッグ情報416を使用してソースコード402のエラー
を識別し、修正する。
【0059】コンパイラ406の構造図/機能流れ図を図
6に示す。図6において、長方形はソフトウェアモジュ
ール/処理を表わし、長円形はソフトウェアモジュール
/処理の入力および出力を表わしている。
【0060】図6に示すように、コンパイラ406は、ス
キャナ/構文解析器(構文解析部)602、意味解析器
(意味解析部)610、デバッグ情報発生器(デバッグ情
報発生部)620、およびコード発生器(コード発生部)6
24を備えている。
【0061】スキャナ/構文解析器602は、ソースコー
ド402を受取り、抽象構文ツリー(AST:Abstract Sy
ntax Tree)606を構築する。AST606はコンパイルさ
れているソースコード402の構造の実質的なモデルであ
る。AST606は、宣言、関数定義、命令文、および式
を表わすサブツリーから構成されている。
【0062】意味解析器610はAST606を入力として受
取る。意味解析器610は、AST606のノードを記号テー
ブルおよび形式テーブルのエントリ(図6には示してい
ない)を指すポインタで「装飾(decorate)」し、装飾
抽象構文ツリー(decoratedabstract syntax tree)614
を作る。
【0063】コード発生器624は装飾抽象構文ツリー614
を入力として受取る。コード発生器624は、装飾抽象構
文ツリー614からオブジェクトコード414を生成し、オブ
ジェクトコード414をオブジェクトコードファイル412に
配置する。
【0064】デバッグ情報発生器620もまた、装飾抽象
構文ツリー614を入力として受取る。デバッグ情報発生
器620は、修正デバッグ情報416を生成し、オブジェクト
コードファイル412に格納する。本発明の第1の方法に
よれば、修正デバッグ情報416には複数の仮想テーブル1
208、1216、1220、1224に関する情報が入っている。本
発明の第2の実施例によれば、修正デバッグ情報416に
は連鎖状仮想テーブル1318に関する情報が入っている。
デバッグ情報発生器620について下に詳細に説明する。
【0065】デバッガ420の構造図/機能流れ図を図7
に示す。図7において、端末318およびユーザ714の他
は、長方形はソフトウェアモジュール/処理を表わし、
長円形はソフトウェアモジュール/処理の入力および出
力を表わしている。
【0066】図7に示すように、デバッガ420は、プリ
プロセッサ702および主デバッガ710を備えている。
【0067】プリプロセッサ702は、実行可能ファイル4
38(オブジェクトコード414およびデバッグ情報416から
構成されている)を受取り、前処理デバッグ情報706を
生成する。前処理デバッグ情報706は、実行可能ファイ
ル438の内容と同じであるが、プリプロセッサ702が重複
情報を除外し、デバッグ情報416の種々な部分の間のポ
インタを用意し、一定のデータをいくつかの特殊テーブ
ルに集め、これらが主デバッガ710による使用のための
前処理デバッグ情報706に付加されることが異なる。特
に、プリプロセッサ702は、デバッグ参照テーブル1236
を生成する。デバッグ参照テーブル1236を使用すること
によって、主デバッガ710は、ポインタおよび参照変数
により参照されるオブジェクトのデータ形式を、実行時
に正確且つ完全に決定することができる。
【0068】主デバッガ710は、前処理デバッグ情報706
を受取る。端末318を経由して主デバッガ710と通信する
ユーザ714の指令のもとに、主デバッガ710は、ソースコ
ード402のエラーの場所をつき止め且つ修正する際に前
処理デバッグ情報706を使用してユーザ714を支援する。
【0069】特に、主デバッガ710は、前処理デバッグ
情報706を使用して、とりわけ、ソースコード402を表示
し、コンパイラ406により生成されたソースコード402の
アセンブリコードの翻訳を表示して、ソースコード402
による実行の流れを制御し且つ変更し、変数形式(変数
の型)を表示し、変数値を観察、設定する。
【0070】実行時中のオブジェクトのデータ形式の識
別を支援するために、デバッガ420はデバッグ参照テー
ブル1236を構築する。デバッガ420は、デバッグ参照テ
ーブル1236を使用してオブジェクトの実際のデータ形式
を決定し、オブジェクトの内容を完全に且つ正確に表示
し、ユーザ714がオブジェクトの内容を修正することが
できるようにする。デバッガ420について下に詳細に説
明する。
【0071】2.0 第1の方法−複数の仮想テーブルの
使用 この章では本発明328の第1の方法によるデバッグ情報
発生器620およびデバッガ420の動作を説明する。最初
に、この章ではデバッグ参照テーブル1236のフォーマッ
トを説明する。
【0072】表3の命令文がソースコード402に入って
いると仮定する。図12には本発明の第1の方法によ
る、対応するデバッグ参照テーブル1236を示す。
【0073】
【表3】
【0074】[ptr1]1202はクラスAのポインタとして
宣言され、クラスAのオブジェクト1204を指すポインタ
に割当てられる。オブジェクト1204には仮想テーブル12
08を指す仮想テーブルアドレス1206が入っている。
【0075】[ptr2]1210はクラスBのポインタとして
宣言され、クラスBのオブジェクト1212を指すポインタ
に割り当てられる。オブジェクト1212には仮想テーブル
1216を指す仮想テーブルアドレス1214が入っている。
【0076】[ptr4]1234はクラスCのポインタとして
宣言され、クラスCのオブジェクト1226/1228/1260を
指すように割当てられる。オブジェクト1226/1228/12
60には、それぞれ仮想テーブル1220、1224を指す仮想テ
ーブルアドレス1218、1222が入っている。
【0077】デバッグ参照テーブル1236には各仮想テー
ブルに対するエントリ1270、1272、1274、1276が入って
いる。エントリ1270、1272、1274、1276は三つのフィー
ルドを備えている。すなわち、オブジェクト形式識別フ
ィールド(ここでは、クラス形式識別フィールド)123
8、オブジェクトオフセットフィールド1240、および仮
想テーブルアドレスフィールド1242である。
【0078】仮想テーブルアドレスフィールド1242に
は、エントリ1270、1272、1274、1276に関連する仮想テ
ーブル1208、1216、1224、1220の仮想テーブルアドレス
1244、1246、1248、1250が入っている。
【0079】クラス形式識別フィールド1238には仮想テ
ーブルアドレスフィールド1242の仮想テーブルアドレス
と関連するオブジェクトのデータ形式識別情報(ここで
は、データ形式情報)が入っている。たとえば、デバッ
グ参照テーブル1236のエントリ1270は仮想テーブルアド
レス1244を格納している。仮想テーブルアドレス1244は
仮想テーブル1208を指す。仮想テーブル1208はクラスA
に関連している。それ故、エントリ1270に関連するクラ
ス形式識別フィールド1238はクラスAを識別する。
【0080】オブジェクトオフセットフィールド1240に
はオブジェクトの始まりに対するポインタオブジェクト
オフセット(値)が入っている。たとえば図12に示す
ように、[ptr4]1234はオブジェクト1226/1228/1260
の始まりを指さない。具体的には、[ptr4]1234は、オ
ブジェクト1226/1228/1260の始まりからオブジェクト
オフセットd(dはこの場合、クラスAのオブジェクト
の大きさに等しい)だけ変位している。それ故、エント
リ1276(エントリ1276は、[ptr4]1234と関連する仮想
テーブルアドレス1218に等しい仮想テーブルアドレス12
50を格納している)のオブジェクトオフセットフィール
ド1240にはオフセットdに等しい値が入っている。
【0081】本発明328の第1の方法によるデバッグ情
報発生器620および主デバッガ710の動作を図8〜図12
を参照して下に説明する。
【0082】図8は、デバッグ情報発生器620が本発明3
28の第1の方法による修正デバッグ情報416を生成する
仕方を示している。
【0083】ステップ806で、デバッグ情報発生器620
は、装飾AST614内でオブジェクト1204、1212、1226
/1228/1260が属しているクラスの位置をつきとめる。
次にデバッグ情報発生器620は、仮想テーブルアドレス1
206、1214、1218、1222が格納されているオブジェクト1
204、1212、1226/1228/1260の位置(仮想テーブルア
ドレスの位置であり、以下では記憶場所とも記載)128
0、1282、1286、1284を決定する。
【0084】ステップ810で、デバッグ情報発生器620は
修正デバッグ情報416に記憶場所1280、1282、1286、128
4を格納する(これら記憶場所は仮想テーブルを指すポ
インタが格納されているオブジェクト内のオフセットで
ある)。
【0085】ステップ814で、デバッグ情報発生器620
は、オブジェクト1204、1212、1226/1228/1260から仮
想テーブルアドレス1206、1214、1218、1222を読取る。
デバッグ情報発生器620はまたオブジェクトオフセット
を決定する。(図12を参照して)上に説明したとお
り、オブジェクトオフセットはオブジェクトの始まりに
対するポインタオフセットを表わす。
【0086】ステップ818で、デバッグ情報発生器620
は、仮想テーブルアドレス1206、1214、1218、1222およ
びオブジェクトオフセットを修正デバッグ情報416に格
納する。
【0087】ステップ822および828に示されているよう
に、ステップ806、810、814、および818は、仮想関数を
備えているクラスの例示であるオブジェクトすべてにつ
いて繰返される。
【0088】図9は、本発明の第1の方法によるデバッ
ガ420の高レベル動作の機能流れ図を示す。
【0089】ステップ906で、デバッガ420は、修正デバ
ッグ情報416を使用してデバッグ参照テーブル1236を作
る。
【0090】ステップ910で、デバッガ420はユーザ要求
を受取る。ユーザは、デバッガ420にソースコード402を
表示すること、コンパイラ406により生成されたソース
コード402のアセンブリコード翻訳を表示すること、ソ
ースコード402による実行の流れを制御し変更するこ
と、変数形式を表示すること、および変数値を観察し設
定することを要求することができる。
【0091】ステップ914で、デバッガ420はユーザ要求
を処理する。ステップ914を行うにあたり、デバッガ420
は、オブジェクトのデータ形式を決定したり、オブジェ
クトの内容を正確に且つ完全に表示したり、またはユー
ザ714がオブジェクトの内容を修正することができるよ
うにしなければならないときには、デバッグ参照テーブ
ル1236を参照する。
【0092】デバッガ420が、オブジェクトのデータ形
式を正確に決定する仕方を図10に示す。図10の流れ
図を図12の[ptr4]1234を参照して下に説明する。特
に、デバッガ420が[ptr4]1234により指示されている
オブジェクト1226/1228/1260のデータ形式を表示する
よう、ユーザが要求していると仮定する。
【0093】ステップ1006で、デバッガ420は、[ptr
4]1234により参照されたオブジェクト1226/1228/126
0の仮想テーブルアドレスを読取る。
【0094】ステップ1010で、デバッガ420は(仮想テ
ーブルアドレスフィールド1242の中の)その仮想テーブ
ルアドレスがステップ1006で読取ったものに等しいエン
トリについてデバッグ参照テーブル1236を探す。現在の
例では、デバッガ420はエントリ1276の位置をつきとめ
る。したがって、デバッガ420は、エントリ1276のクラ
ス形式識別フィールド1238を読取って、[ptr4]1234が
指しているオブジェクト1226/1228/1260のデータ形式
を決定する。現在の例では、デバッガ420は、データ形
式がクラスCであることを正しく決定する。
【0095】ステップ1014で、デバッガ420はデータ形
式情報を使用してユーザ要求の処理を終了する。現在の
例では、デバッガ420はデータ形式情報を単に表示する
だけでよい。
【0096】ポインタまたは参照変数により参照される
オブジェクトのデータ形式を決定する、図10の流れ図
は、新しく取り入れられた照会演算子に対しても適用す
ることができる。たとえば、コンパイラ406は参照テー
ブル1236をオブジェクトコード414に吐きだすことがで
きる。次に、新しく取り入れられた照会演算子は、(図
10の流れ図に従って)デバッグ参照テーブル1236を参
照して、実行時中、オブジェクトのデータ形式を決定す
ることができる。
【0097】デバッガ420がオブジェクトの内容を正確
且つ完全に決定する仕方を図11に示す。図11の流れ
図を図12の[ptr4]1234を参照して下に説明する。特
に、デバッガ420が[ptr4]1234により指示されている
オブジェクト1226/1228/1260の内容を表示すること
を、ユーザが要求していると仮定する。
【0098】ステップ1106で、デバッガ420は[ptr4]1
234により参照されているオブジェクト1226/1228/126
0の仮想テーブルアドレスを読取る。
【0099】ステップ1110で、デバッガ420は、(仮想
テーブルアドレスフィールド1242の)その仮想テーブル
アドレスがステップ1106で読取ったものに等しいエント
リについてデバッグ参照テーブル1236を探す。現在の例
では、デバッガ420はエントリ1276の位置をつきとめ
る。次にデバッガ420は、エントリ1276のオブジェクト
オフセットフィールド1240を読取る。現在の例では、デ
バッガ420は、オブジェクトオフセットdを読取る。図
12に示すように、オフセットdは、オブジェクト1226
/1228/1260の始まりからの[ptr4]1234のオブジェク
トオフセットを表わす。
【0100】ステップ1114で、デバッガ420は、オブジ
ェクト1226/1228/1260の開始アドレスを計算する。好
適実施例では、デバッガ420は、オブジェクトオフセッ
トdを[ptr4]1234から差引くことにより開始アドレス
を計算する。
【0101】ステップ1118で、デバッガ420は開始アド
レスを使用してオブジェクト1226/1228/1260の内容を
ユーザに表示する。
【0102】代わりに、ユーザ714がオブジェクト1226
/1228/1260の内容を修正するよう要求している場合
は、ステップ1118がステップ1118’(図11には明白に
は示していない)によって置換えられる他は、図11の
すべてのステップは、オブジェクト内容を表示するため
のユーザ要求に対するものと同じになる。ステップ111
8’では、デバッガ420は開始アドレスを使用してオブジ
ェクト1226/1228/1260の内容を修正する。
【0103】3.0 第2の方法−連鎖状仮想テーブルの
使用 この章では、本発明328の第2の方法によるデバッグ情
報発生器620および主デバッガ710の動作について説明す
る。上に記したように、第2の方法は第1の方法の改良
である。
【0104】上に記したとおり、第1の方法によりデバ
ッガ420は、オブジェクトのデータ形式を正確に決定
し、オブジェクトの内容を正確且つ完全に表示し、ユー
ザ714にオブジェクトの内容を修正させることができ
る。また、第1の方法により新しく取り入れられた照会
演算子がオブジェクトのデータ形式を、実行時中、正確
に決定することができる。
【0105】しかし、一般的規則として、実行時中のテ
ーブル参照は効率の理由から回避すべきである。それ
故、本発明328の目的を達成する一方で、第1の方法
は、新しく取り入れられた照会演算子が実行時中オブジ
ェクトのデータ形式を決定できるようにすることに関し
ては、比較的非能率である。
【0106】本発明328の第2の方法は、複数の仮想テ
ーブル1208、1216、1220、1224ではなく、連鎖状仮想テ
ーブル1318を使用することにより第1の方法の効率の問
題を解決している。特に、固有で、別々の連鎖状の仮想
テーブル1318が各クラスに対して生成される。或るクラ
スについては、連鎖状仮想テーブル1318を唯一つの仮想
テーブルから作り上げることができるが、他のクラスに
ついては、連鎖状仮想テーブル1318は複数の仮想テーブ
ルを備えることができる。
【0107】この章では本発明328の第2の方法を、最
初に連鎖状仮想テーブル1318のフォーマットを説明する
ことにより説明する。
【0108】表4の命令文がソースコード402に入って
いると仮定する。図13は本発明328の第2の方法によ
る対応する連鎖状仮想テーブル1318およびデバッグ参照
テーブル1236を示す。
【0109】
【表4】
【0110】[ptr2]1336は、クラスBのポインタとし
て宣言されており、クラスDのオブジェクト1390を指す
ように割当てられている。オブジェクト1390は、仮想テ
ーブル1360、1362、1364をそれぞれ指す仮想テーブルア
ドレス1312、1314、1316を備えている。
【0111】一般に、コンパイラ406は、1オブジェク
トに対して複数の仮想テーブルを生成する。これを図1
2に示すが、コンパイラ406はオブジェクト1226/1228
/1260に対して複数の仮想テーブル1220、1224を生成し
ている。この明細書では、「複数の」という語は、仮想
テーブルが記憶装置内で隣接していないことを意味す
る。
【0112】一般に、複数の仮想テーブル1220、1224は
基本的に、メンバー関数のコード部分へのポインタを備
えるフィールド112、116と、メンバー関数のコード部分
の呼出しに関連する情報を備えているフィールド110、1
14との、二つのフィールドから構成されている。これを
図1に示す。
【0113】本発明328の第2の方法によれば、コンパ
イラ406は、クラスDのオブジェクト1390に対して連鎖
状仮想テーブル1318を生成する。これを図13に示して
あるが、コンパイラ406は、オブジェクト1390に対して
連鎖状仮想テーブル1318を生成している。連鎖状仮想テ
ーブル1318は、仮想テーブル1360、1362、1364を備えて
いる。この明細書では、「連鎖状」という語は仮想テー
ブルが記憶装置内で隣接していることを意味する。
【0114】また本発明328の第2の方法によれば、コ
ンパイラ406が生成した仮想テーブル1360、1362、1364
には三つのフィールド1306、1308、1310がある。フィー
ルド1306は、メンバー関数コード部分を指すポインタが
入っているフィールド112、116に対応する。フィールド
1310は、メンバー関数コード部分を呼出すことに関連す
る情報が入っているフィールド110、114に対応する。
【0115】別のフィールド1308にはポインタテーブル
オフセット値が入っている。特定の仮想テーブルに関連
するポインタテーブルオフセット値は、仮想テーブルの
始まりから、仮想テーブルがその一部を成す連鎖状仮想
テーブルの始まりまでの変位を表わす。たとえば、仮想
テーブル1364に対するポインタテーブルオフセット値
は、仮想テーブルアドレス1316が指す仮想テーブル1364
の始まりが、仮想テーブルアドレス1302により指示され
ている連鎖状仮想テーブル1318の始まりから[I2]変位
しているので、[I2]である。テーブルオフセットフィ
ールド1308の中のポインタテーブルオフセットは、デバ
ッグ参照テーブル1236のオブジェクトオフセットフィー
ルド1240の中のポインタオブジェクトオフセット値とは
別のものであることに注意。
【0116】本発明328の第2の方法によるコンパイラ4
06および主デバッガ710の動作を下に説明する。
【0117】上に記したとおり、コンパイラ406は、本
発明328の第2の方法によるオブジェクトについて、複
数の仮想テーブル1220、1224ではなく、連鎖状仮想テー
ブル1318を生成する。連鎖状仮想テーブル1318に入って
おり、コンパイラ406により生成された仮想テーブル136
0、1362、1364は、フィールド1306および1310の他にテ
ーブルオフセットフィールド1308を備えている。
【0118】また、デバッグ情報発生器620は、修正デ
バッグ情報416を生成する。デバッグ情報発生器620が修
正デバッグ情報416を生成する仕方は、本発明328の第1
および第2の双方の方法について同じである。それ故、
本発明328の第2の方法によるデバッグ情報発生器620の
動作は、図8を参照して上に十分に説明されている。
【0119】新しく取り入れられた照会演算子が実行時
中オブジェクトのデータ形式を正確に決定する仕方を図
13および図14を参照して下に説明する。図14の流
れ図を図13の[ptr2]1336を参照して下に説明する。
特に、C++演算子が、その機能の一部として、[ptr2]
1336により指示されているオブジェクト1390のデータ形
式を決定しなければならないと仮定する。
【0120】新しく取り入れられた[typeof()]演算子
は、このようなC++形式照会演算子の一例である。[ty
peof()]演算子はオブジェクトを指すポインタ(または
参照変数)を受取り、オブジェクトのデータ形式のデー
タ形式指示を返す。[typeof()]演算子はオブジェクト
に関連するすべてのポインタについて同じデータ形式指
示を返す。たとえば、図13で、[typeof()]演算子は
[ptr1]1332、[ptr2]1336、[ptr3]1338、および
[ptr4]1334に対する仮想テーブルアドレス1302を返
す。この特定の例では、データ形式指示は連鎖状仮想テ
ーブル1318の開始である仮想テーブルアドレス1302であ
る。
【0121】今度は図14を参照すると、ステップ1406
で、[typeof()]のようなC++演算子または関数は、
[ptr2]1336によって参照されるオブジェクト1390の仮
想テーブルアドレス1314を読取る。
【0122】ステップ1410で、[typeof()]のようなC
++演算子または関数は、仮想テーブルアドレス1314を使
用して仮想テーブル1362にアクセスし、テーブルオフセ
ットフィールド1308を読取る。現在の例では、テーブル
オフセット値[I1]が読取られる。
【0123】ステップ1414で、[typeof()]のようなC
++演算子または関数は、連鎖状仮想テーブル1318の開始
アドレスを計算する。連鎖状仮想テーブル1318の開始ア
ドレスは、仮想テーブルアドレス1302に等しい。本発明
328の好適実施例では、開始アドレスは、テーブルオフ
セット値[I1]を仮想テーブルアドレス1314から差引く
ことにより計算される。
【0124】ステップ1418で、C++演算子または関数
は、ステップ1414で計算された開始アドレスを以後の処
理のため保持する。たとえば、[typeof()]演算子は、
連鎖状仮想テーブル1318の開始アドレスを簡単に返すこ
とができる。
【0125】デバッガ420の動作は、本発明328の第1お
よび第2の双方の方法について同じである。それ故、本
発明328の第2の方法によるデバッガ420の動作は、図
9、図10、および図11を参照して上に十分に説明さ
れている。
【0126】本発明328の第1および第2の方法は仮想
メンバー関数を備えているクラスにだけ適用できること
に注意のこと。しかし、当業者には、コンパイル時間ス
イッチを実施してすべての構造内の独自のテーブルを指
すポインタを生成することができる(ただし、「extern
“C”」で明白に宣言されている構造を除く)ことが明
らかである。このようなコンパイル時間スイッチによれ
ば本発明328がすべてのクラスに確実に適用されること
になる。
【0127】上の説明に基き、当業者には、連鎖状仮想
テーブル1318が他の革新的な(新しく取り入れられた)
演算子および関数を実施するのに有用であることが明ら
かなはずである。たとえば、連鎖状仮想テーブル1318の
自明の拡張によって、ポインタおよび参照変数により参
照されるオブジェクトに対する[sizeof()]演算子を実
現することができる。[sizeof()]演算子はオブジェク
トを指すポインタ(または参照変数)を受取り、ポイン
タまたは参照変数の宣言により指定されているクラスの
大きさとは対照的に、オブジェクトの実際の大きさを返
す。
【0128】
【発明の効果】以上のように本発明によれば、コンピュ
ータプログラムで表わされたオブジェクトの実行時デー
タ形式の識別を支援するソフトウェアコンパイルシステ
ムが提供される。特に、本発明によれば、多形を支援す
るコンピュータプログラム言語で表わされたオブジェク
トの実行時データ形式の識別を支援するコンピュータソ
フトウェアコンパイルシステムが提供される。
【図面の簡単な説明】
【図1】基底クラスの仮想テーブルを示している。
【図2】基底クラス及び導出クラスの仮想テーブルを示
している。
【図3】本発明が動作するコンピュータハードウェア及
びソフトウェア環境の構造図を示している。
【図4】本発明の第1の実施例の構造図/機能流れ図で
ある。図4において、長方形はソフトウェアモジュール
/処理を示し、長円形はソフトウェアモジュール/処理
の入力及び出力を示している。
【図5】本発明の第2の実施例の構造図/機能流れ図で
ある。図5において、長方形はソフトウェアモジュール
/処理を示し、長円形はソフトウェアモジュール/処理
の入力及び出力を示している。
【図6】コンパイラの構造図/機能流れ図である。図6
において、長方形はソフトウェアモジュール/処理を示
し、長円形はソフトウェアモジュール/処理の入力及び
出力を示している。
【図7】デバッガの構造図/機能流れ図である。図7に
おいて、長方形はソフトウェアモジュール/処理を示
し、長円形はソフトウェアモジュール/処理の入力及び
出力を示している。
【図8】修正されたデバッグ情報を生成するための機能
流れ図である。
【図9】デバッガの高レベルの機能流れ図である。
【図10】実行時にオブジェクトのデータ形式を正確に
決定するための機能流れ図である。
【図11】実行時にオブジェクトの内容を正確かつ完全
に決定するための機能流れ図である。
【図12】多重仮想テーブル及び対応するデバッグ参照
テーブルを示している。
【図13】連結された仮想テーブル及び対応するデバッ
グ参照テーブルを示している。
【図14】連結された仮想テーブルの開始アドレスを決
定するための機能流れ図である。
【符号の説明】
302 コンピュータプラットフォーム 304 オペレーティングシステム 306 マイクロ命令コード 308 ハードウェアユニット 310 RAM 312 CPU 314 入出力インタフェース 318 端末 322 データ記憶装置 326 プリンタ 328 アプリケーションプログラム 402 ソースコード 406 コンパイラ 414 オブジェクトコード 416 デバッグ情報 420 デバッガ 430 リンカ 432 オブジェクトコードファイル 438 実行可能ファイル 504 トランスレータ
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ミケイ・メタ アメリカ合衆国カリフォルニア州サン・ ノゼ,ディープ・クリーク・コート・ 1856 (72)発明者 マーク・ダブリュ・マクドウェル アメリカ合衆国コロラド州フォート・コ リンズ,ソルスティス・レイン・1261 (72)発明者 マノイ・ダドゥー アメリカ合衆国カリフォルニア州サン・ ノゼ,グレンロイ・ドライヴ・1650 (72)発明者 ブルーノ・メリ アメリカ合衆国コロラド州フォート・コ リンズ,キャプストーン・フォート・ 4030 (56)参考文献 特開 平1−147738(JP,A) 特開 平1−266636(JP,A) (58)調査した分野(Int.Cl.7,DB名) G06F 11/28 - 11/36 G06F 9/45

Claims (12)

    (57)【特許請求の範囲】
  1. 【請求項1】ソースコード(402)と共に使用するに適し
    た、コンピュータベースのソフトウアコンパイルシス
    テムであって、該ソースコード(402)は、(i) 仮想テー
    ブル(104,216,218)を使用して、仮想メンバー関数アド
    レス(118,120)を格納し、及び、(ii)オブジェクトのデ
    ータ形式、オブジェクトの内容及び仮想テーブルアドレ
    ス(220,222,1206,1214,1218,1222,1312,1314,1316)を有
    するオブジェクト(202,1204,1212,1226/1228/1260,また
    は1390)を含むオブジェクトコード(102または414)を生
    成する前記ソフトウアコンパイルシステムによって実
    施されるコンピュータプログラミング言語で書かれてお
    り、 前記ソフトウアコンパイルシステムは、 前記ソースコード(402)から、前記オブジェクトコード
    (102または414)とデバッグ情報(416)を生成するための
    第1の手段(406)と、 前記デバッグ情報(416)を使用することによって、前記
    ソースコード(402)内のエラーの場所を突きとめて修正
    するための、ユーザの指令のもとに動作するよう構成さ
    れた第2の手段(420)からなり、 デバッグ情報(416)は、前記仮想テーブルアドレス(220,
    222,1206,1214,1218,1222,1244,1246,1248,1250,1312,1
    314,1316,1302,1394,1396)、及び、仮想テーブルアドレ
    ス位置(126,128,208,212,1280,1282,1284,1286)からな
    り、 前記第2の手段は、(a)実行時においても、前記オブジ
    ェクトのデータ形式を正確に決定し、及び、(b)前記オ
    ブジェクトの内容を正確かつ完全に決定するための前記
    デバッグ情報(416)を解釈するよう構成されることから
    なる、ソフトウェアコンパイルシステム。
  2. 【請求項2】前記第1の手段(406)が、 (1)前記ソースコード(402)を受け取り、抽象構文ツ
    リー(606)を生成するためのスキャナ/構文解析器(602)
    と、 (2)前記抽象構文ツリー(606)を受け取り、装飾抽象
    構文ツリー(614)を生成するための意味解析器(610)と、 (3)前記装飾抽象構文ツリー(614)を受け取り、前記
    オブジェクトコード(102または414)を生成するためのコ
    ード発生器と、 (4)前記装飾抽象構文ツリー(614)を受け取り、前記
    デバッグ情報(416)を生成するためのデバッグ情報生成
    手段(620)からなる、請求項1のソフトウェアコンパ
    イルシステム。
  3. 【請求項3】前記第2の手段(420)が、デバッグ参照テ
    ーブル(1236)を生成するための手段を備え、前記デバッ
    グ参照テーブルは、前記仮想テーブル(104,216,218)に
    対するエントリを有し、前記エントリは、オブジェクト
    データ形式識別フィールド(1238)、オブジェクトオフセ
    ットフィールド(1240)、及び、仮想テーブルアドレスフ
    ィールド(1242)を有することからなる、請求項1または
    2のソフトウェアコンパイルシステム。
  4. 【請求項4】前記オブジェクトのデータ形式を正確に決
    定するための前記第2の手段(420)が、 (1)ポインタ及び参照変数を使用することによって、
    前記仮想テーブルアドレス(220,222,1206,1214,1218,12
    22,1312,1314,1316,1244,1246,1248,1250,1302,1394,13
    96)を読み取るための手段であって、前記ポインタ及び
    参照変数により前記オブジェクト(202,1204,1212,1226/
    1228/1260,または1390)が参照されることからなる、手
    段と、 (2)前記デバッグ参照テーブル(1236)にアクセスし、
    前記仮想テーブルアドレス(1244,1246,1248,1250)に従
    って、前記データ形式識別フィールド(1238)内のデータ
    形式識別情報を読み取るための手段であって、前記デー
    タ形式識別情報により前記オブジェクトのデータ形式が
    識別されることからなる、手段と、 (3)前記データ形式識別情報を使用して、ユーザ要求
    を処理するための手段とからなる、請求項3のソフトウ
    ェアコンパイルシステム。
  5. 【請求項5】ソースコード(402)と共に使用するに適し
    た、コンピュータベースのソフトウアコンパイルシス
    テムであって、該ソースコード(402)は、(i)仮想メンバ
    ー関数アドレス(118,120)を格納するために仮想テーブ
    ル(104,216,218)を使用し、及び、(ii)オブジェクトの
    データ形式、オブジェクトの内容及び仮想テーブルアド
    レス(220,222,1206,1214,1218,1222,1244,1246,1248,12
    50,1312,1314,1316,1302,1394,1396)を有するオブジェ
    クト(202,1204,1212,1226/1228/1260,または1390)を含
    むオブジェクトコード(102または414)を生成する前記ソ
    フトウアコンパイルシステムによって実施されるコン
    ピュータプログラミング言語で書かれており、前記ソフ
    トウアコンパイルシステムは、 (1)前記ソースコード(402)を受け取り、抽象構文ツ
    リー(606)を生成するための第1の手段(602)と、 (2)前記抽象構文ツリー(606)を受け取り、装飾抽象
    構文ツリー(614)を生成するための第2の手段(610)と、 (3)前記装飾抽象構文ツリー(614)を受け取り、前記
    装飾抽象構文ツリー(614)からオブジェクトコード(102
    または414)を生成するための第3の手段(624)と、 (4)前記装飾抽象構文ツリー(614)を受け取り、前記
    装飾抽象構文ツリー(614)から前記デバッグ情報(416)を
    生成するためのデバッグ情報生成手段(620)とからな
    り、 前記デバッグ情報(416)は、前記仮想テーブルアドレス
    (220,222,1206,1214,1218,1222,1244,1246,1248,1250,1
    312,1314,1316,1302,1394,1396)と仮想テーブルアドレ
    ス位置(126,128,208,212,1280,1282,1284,1286)を含
    み、前記ソフトウアコンパイルシステムは、前記仮想
    テーブルアドレス(220,222,1206,1214,1218,1222,1244,
    1246,1248,1250,1312,1314,1316,1302,1394,1396)と前
    記仮想テーブルアドレス位置(126,128,208,212,1280,12
    82,1284,1286)を前記デバッグ情報(416)に保存すること
    により、実行時中におけるオブジェクトのデータ形式の
    識別をサポートするよう構成されることからなる、ソフ
    トウェアコンパイルシステム。
  6. 【請求項6】前記デバッグ情報生成手段(620)が、 (1)前記仮想テーブルアドレス位置(126,128,208,21
    2,1280,1282,1284,1286)を決定するための手段と、 (2)前記仮想テーブルアドレス(220,222,1206,1214,1
    218,1222,1244,1246,1248,1250,1312,1314,1316)及びオ
    ブジェクトオフセットを決定するための手段と、 (3)前記デバッグ情報(416)に、前記仮想テーブルア
    ドレス位置(126,128,208,212,1280,1282,1284,1286)、
    前記仮想テーブルアドレス(220,222,1206,1214,1218,12
    22,1244,1246,1248,1250,1312,1314,1316,1302,1394,13
    96)、及び、前記オブジェクトオフセットを格納するた
    めの手段とからなる、請求項2または5のソフトウェア
    コンパイルシステム。
  7. 【請求項7】(1)参照テーブル(1236)を生成するため
    の手段であって、前記参照テーブル(1236)は、前記仮想
    テーブル(104、216,218)に対するエントリを有し、前記
    エントリは、オブジェクトデータ形式識別フィールド(1
    238)、オブジェクトオフセットフィールド(1240)、及
    び、仮想テーブルアドレスフィールド(1242)を有するこ
    とからなる、手段と、 (2)前記オブジェクトコード(102または414)に前記参
    照テーブル(1236)を格納するための手段をさらに備え、 前記参照テーブル(1236)は、形式照会演算子によってア
    クセスされるように構成され、これにより、前記形式照
    会演算子が、実行時中に、前記オブジェクトのデータ形
    式を決定することが可能であることからなる、請求項5
    ソフトウェアコンパイルシステム。
  8. 【請求項8】(1)テーブルオフセットフィールド(130
    8)を含む連鎖状仮想テーブル(1318)を生成するための手
    段と、 (2)前記オブジェクトコード(102または414)に前記連
    鎖状仮想テーブル(1318)を格納するための手段をさらに
    備える、請求項5または7のソフトウェアコンパイル
    ステム。
  9. 【請求項9】実行時中に、前記オブジェクトのデータ形
    式を決定するためのtypeof()演算子をサポートするソフ
    トウェアコンパイルシステムであって、 (1)ポインタ及び参照変数を使用することによって、
    前記仮想テーブルアドレス(220,222,1206,1214,1218,12
    22,1312,1314,1316,1244,1246,1248,1250,1302,1394,13
    96)を読み取るための手段であって、前記ポインタ及び
    参照変数により前記オブジェクト(202,1204,1212,1226/
    1228/1260,または1390)が参照されることからなる、手
    段と、 (2)前記連鎖状仮想テーブル(1318)にアクセスし、前
    記仮想テーブルアドレス(1302,1394,1396)に従って、前
    記テーブルオフセットフィールド(1308)内のポインタテ
    ーブルオフセット値を読み取るための手段と、 (3)前記ポインタテーブルオフセット値を使用して、
    連鎖状仮想テーブルの開始アドレス(1302,1312)を計算
    するための手段であって、前記連鎖状仮想テーブルの開
    始アドレス(1302,1312)により、前記データ形式が特定
    されることからなる、手段と、 (4)前記連鎖状仮想テーブルの開始アドレス(1302,13
    12)を返すための手段とからなる、請求項8のソフトウ
    ェアコンパイルシステム。
  10. 【請求項10】デバッグ情報(416)を使用することによ
    って、ソースコード(402)内のエラーの場所を突きとめ
    て修正するための、ユーザの指令のもとに動作するよう
    構成されたコンピュータベースのデバッガ(420)であっ
    て、前記ソースコード(402)は、(i)仮想テーブル(104,2
    16,218)を使用して仮想メンバー関数アドレス(118,120)
    を格納し、及び、(ii)オブジェクトのデータ形式、オブ
    ジェクトの内容、及び仮想テーブルアドレス(220,222,
    1206,1214,1218,1222,1312,1314,1316)を有するオブジ
    ェクト(202,1204,1212,1226/1228/1260,または1390)を
    含むオブジェクトコード(102または414)を生成するソフ
    トウアコンパイルシステムによって実施されるコンピ
    ュータプログラミング言語で記載されており、 前記デバッグ情報(416)は、前記仮想テーブルアドレス
    (220,222,1206,1214,1218,1222,1244,1246,1248,1250,1
    312,1314,1316,1302,1394,1396)と仮想テーブルアドレ
    ス位置(126,128,208,212,1280,1282,1284,1286)を含
    み、 (1)デバッグ参照テーブル(1236)を生成するための第
    1の手段であって、前記デバッグ参照テーブル(1236)
    は、前記仮想テーブル(1208,1216,1220,1224,1360,136
    2,1364)に対するエントリを含み、前記エントリは、オ
    ブジェクトデータ形式識別フィールド(1238)、オブジェ
    クトオフセットフィールド(1240)、及び、仮想テーブル
    アドレスフィールド(1242)を備えることからなる、手段
    と、 (2)実行時においても前記オブジェクトのデータ形式
    を正確に決定するための第2の手段と、 (3)前記オブジェクトの内容を正確かつ完全に決定す
    るための第3の手段とからなる、デバッガ。
  11. 【請求項11】前記第2の手段が、 (1)ポインタと参照変数を使用することによって、前
    記仮想テーブルアドレス(220,222,1206,1214,1218,122
    2,1312,1314,1316,1244,1246,1248,1250,1302,1394,139
    6)を読み取るための手段であって、前記ポインタ及び参
    照変数により前記オブジェクト(202,1204,1212,1226/12
    28/1260,または1390)が参照されることからなる、手段
    と、 (2)前記デバッグ参照テーブル(1236)にアクセスし、
    前記仮想テーブルアドレス(220,222,1206,1214,1218,12
    22,1244,1246,1248,1250,1312,1314,1316,1302,1394,13
    96)に従って、前記データ形式識別フィールド(1238)内
    のデータ形式識別情報を読み取るための手段であって、
    前記データ形式識別情報により前記オブジェクトのデー
    タ形式が識別されることからなる、手段と、 (3)前記データ形式識別情報を使用して、ユーザ要求
    を処理するための手段とからなる、請求項10のデバッ
    ガ。
  12. 【請求項12】前記第3の手段が、 (1)ポインタと参照変数を使用することによって、前
    記仮想テーブルアドレス(220,222,1206,1214,1218,122
    2,1312,1314,1316,1244,1246,1248,1250,1302,1394,139
    6)を読み取るための手段であって、前記ポインタ及び参
    照変数が、前記オブジェクト(202,1204,1212,1226/1228
    /1260,または1390)を参照することからなる、手段と、 (2)前記デバッグ参照テーブル(1236)にアクセスし、
    前記仮想テーブルアドレス(220,222,1206,1214,1218,12
    22,1312,1314,1316,1244,1246,1248,1250,1302,1394,13
    96)に従って前記オブジェクトオフセットフィールド(12
    40)内のポインタオブジェクトオフセット値を読み取る
    ための手段と、 (3)前記ポインタオブジェクトオフセット値を使用し
    て、オブジェクトの開始アドレス(130,132,224,226,120
    2,1210,1230,1232,1332,1334)を計算するための手段
    と、 (4)前記オブジェクトの開始アドレス(130,132,224,2
    26,1202,1210,1230,1232,1332,1334)を使用して、前記
    オブジェクトの内容を表示し、修正するための手段とか
    らなる、請求項10または11のデバッガ。
JP24115391A 1990-09-21 1991-09-20 コンピュータベースのソフトウェアコンパイルシステム及びデバッガ Expired - Fee Related JP3405996B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US586778 1990-09-21
US07/586,778 US5361351A (en) 1990-09-21 1990-09-21 System and method for supporting run-time data type identification of objects within a computer program

Publications (2)

Publication Number Publication Date
JPH04247536A JPH04247536A (ja) 1992-09-03
JP3405996B2 true JP3405996B2 (ja) 2003-05-12

Family

ID=24347078

Family Applications (1)

Application Number Title Priority Date Filing Date
JP24115391A Expired - Fee Related JP3405996B2 (ja) 1990-09-21 1991-09-20 コンピュータベースのソフトウェアコンパイルシステム及びデバッガ

Country Status (3)

Country Link
US (1) US5361351A (ja)
EP (1) EP0476635A3 (ja)
JP (1) JP3405996B2 (ja)

Families Citing this family (81)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5297284A (en) * 1991-04-09 1994-03-22 Microsoft Corporation Method and system for implementing virtual functions and virtual base classes and setting a this pointer for an object-oriented programming language
US5822590A (en) * 1991-10-31 1998-10-13 Texas Instruments Incorporated dbX: a persistent programming language model
US5432936A (en) * 1992-04-09 1995-07-11 Microsoft Corporation Method for implementing pointers to members in a compiler for an object-oriented programming language
US5535318A (en) * 1992-04-30 1996-07-09 Ricoh Company, Ltd. Debugging system for a hierarchically structured page description language
JPH06124211A (ja) * 1992-10-14 1994-05-06 Fujitsu Ltd プログラム解析装置
US5465362A (en) * 1993-12-30 1995-11-07 Taligent, Inc. Object-oriented view-system for displaying information in a windowing environment
US5590329A (en) * 1994-02-04 1996-12-31 Lucent Technologies Inc. Method and apparatus for detecting memory access errors
US6139198A (en) * 1994-10-04 2000-10-31 International Business Machines Corporation System and method for enabling tracing of program execution in an object-oriented system
FI946209A0 (fi) * 1994-12-30 1994-12-30 Nokia Telecommunications Oy Foerfarande foer jaemfoerande av attributvaerden hos kontrollerbara objektuttryck i ett naetelement
US5740440A (en) * 1995-01-06 1998-04-14 Objective Software Technology Dynamic object visualization and browsing system
US5727212A (en) * 1995-04-12 1998-03-10 International Business Machines Corporation Object oriented device driver system for procedural device drivers
US5699509A (en) * 1995-06-07 1997-12-16 Abbott Laboratories Method and system for using inverted data to detect corrupt data
US5675730A (en) * 1995-07-07 1997-10-07 Sun Microsystems, Inc. Method and apparatus for extensible type-specific data presentation by a debugger
US5761510A (en) * 1995-11-07 1998-06-02 Microsoft Corporation Method for error identification in a program interface
US6158045A (en) * 1995-11-13 2000-12-05 Object Technology Licensing Corporation Portable debugging services utilizing a client debugger object and a server debugger object with flexible addressing support
US5956479A (en) * 1995-11-13 1999-09-21 Object Technology Licensing Corporation Demand based generation of symbolic information
US6003037A (en) * 1995-11-14 1999-12-14 Progress Software Corporation Smart objects for development of object oriented software
US6526565B1 (en) * 1995-12-21 2003-02-25 International Business Machines Corporation Packaging algorithm for providing object oriented applications having reduced footprints
US5701490A (en) * 1996-01-16 1997-12-23 Sun Microsystems, Inc. Method and apparatus for compiler symbol table organization with no lookup in semantic analysis
US6072950A (en) * 1996-06-18 2000-06-06 Microsoft Corporation Pointer analysis by type inference combined with a non-pointer analysis
US5754860A (en) * 1996-07-23 1998-05-19 Digital Equipment Corporation Method and apparatus for software testing using a differential testing technique to test compilers
JP3777666B2 (ja) * 1996-08-28 2006-05-24 株式会社日立製作所 データベース処理方法およびシステム
US5822589A (en) * 1996-12-06 1998-10-13 Hewlett-Packard Company Method for locating errors in a computer program
US6496870B1 (en) 1997-01-31 2002-12-17 Sun Microsystems, Inc. System, method and article of manufacture for collaboration with an application
US5884078A (en) * 1997-01-31 1999-03-16 Sun Microsystems, Inc. System, method and article of manufacture for creating an object oriented component having multiple bidirectional ports for use in association with a java application or applet
US6014518A (en) * 1997-06-26 2000-01-11 Microsoft Corporation Terminating polymorphic type inference program analysis
US6247173B1 (en) 1997-09-24 2001-06-12 Hewlett-Packard Company Computer compiler optimizer for reducing computer resource consumption during dependence analysis after loop unrolling
US6938245B1 (en) * 1997-10-29 2005-08-30 Veritas Operating Corporation Interactive debugging system with debug data base system
US6106571A (en) * 1998-01-29 2000-08-22 Applied Microsystems Corporation Relocatable instrumentation tags for testing and debugging a computer program
US6848108B1 (en) 1998-06-30 2005-01-25 Microsoft Corporation Method and apparatus for creating, sending, and using self-descriptive objects as messages over a message queuing network
US6108659A (en) * 1998-12-22 2000-08-22 Computer Associates Think, Inc. Method and apparatus for executing stored code objects in a database
US6490695B1 (en) * 1999-01-22 2002-12-03 Sun Microsystems, Inc. Platform independent memory image analysis architecture for debugging a computer program
US7058517B1 (en) 1999-06-25 2006-06-06 Genaissance Pharmaceuticals, Inc. Methods for obtaining and using haplotype data
EP1208421A4 (en) * 1999-06-25 2004-10-20 Genaissance Pharmaceuticals PROCESS FOR MAINTAINING AND USING HAPLOTYPE DATA
US7152228B2 (en) * 1999-07-08 2006-12-19 Science Applications International Corporation Automatically generated objects within extensible object frameworks and links to enterprise resources
US6973417B1 (en) 1999-11-05 2005-12-06 Metrowerks Corporation Method and system for simulating execution of a target program in a simulated target system
US6931326B1 (en) 2000-06-26 2005-08-16 Genaissance Pharmaceuticals, Inc. Methods for obtaining and using haplotype data
EP1174791B1 (en) * 2000-07-10 2017-09-27 Microsoft Technology Licensing, LLC Unified data type system and method
GB2366399B (en) * 2000-08-26 2005-02-16 Ibm Recognition of command related items in object code
US6760905B1 (en) * 2000-09-21 2004-07-06 Curl Corporation Lazy compilation of template-generated classes in dynamic compilation execution environments
US6799718B2 (en) * 2001-07-10 2004-10-05 Borland Software Corp. Development assistance for mixed-language sources
US20040267458A1 (en) * 2001-12-21 2004-12-30 Judson Richard S. Methods for obtaining and using haplotype data
US7607066B2 (en) * 2002-06-26 2009-10-20 Microsoft Corporation Auto suggestion of coding error correction
DE502004012348D1 (de) 2004-05-05 2011-05-12 Siemens Ag Verfahren zum Überprüfen von Steuerungsprogrammen
US20060048094A1 (en) * 2004-08-26 2006-03-02 Microsoft Corporation Systems and methods for decoupling inputs and outputs in a workflow process
US20060048095A1 (en) * 2004-08-31 2006-03-02 Microsoft Corporation Local type alias inference system and method
US7685574B2 (en) * 2004-09-29 2010-03-23 Microsoft Corporation Constrained execution regions
US20060095890A1 (en) * 2004-11-01 2006-05-04 Reeves Robert L Embedded detection objects
WO2007084780A2 (en) * 2006-01-20 2007-07-26 Aptana, Inc. Type inference system and method
US20080126878A1 (en) * 2006-11-28 2008-05-29 International Business Machines Corporation Highlighting anomalies when displaying trace results
US8930909B1 (en) * 2007-07-13 2015-01-06 The Mathworks, Inc. Debugging using presentation layer representations of objects
US8914774B1 (en) 2007-11-15 2014-12-16 Appcelerator, Inc. System and method for tagging code to determine where the code runs
US8954989B1 (en) 2007-11-19 2015-02-10 Appcelerator, Inc. Flexible, event-driven JavaScript server architecture
US8260845B1 (en) 2007-11-21 2012-09-04 Appcelerator, Inc. System and method for auto-generating JavaScript proxies and meta-proxies
US8566807B1 (en) 2007-11-23 2013-10-22 Appcelerator, Inc. System and method for accessibility of document object model and JavaScript by other platforms
US8719451B1 (en) 2007-11-23 2014-05-06 Appcelerator, Inc. System and method for on-the-fly, post-processing document object model manipulation
US8756579B1 (en) 2007-12-03 2014-06-17 Appcelerator, Inc. Client-side and server-side unified validation
US8806431B1 (en) 2007-12-03 2014-08-12 Appecelerator, Inc. Aspect oriented programming
US8819539B1 (en) 2007-12-03 2014-08-26 Appcelerator, Inc. On-the-fly rewriting of uniform resource locators in a web-page
US8527860B1 (en) 2007-12-04 2013-09-03 Appcelerator, Inc. System and method for exposing the dynamic web server-side
US8938491B1 (en) 2007-12-04 2015-01-20 Appcelerator, Inc. System and method for secure binding of client calls and server functions
US8285813B1 (en) 2007-12-05 2012-10-09 Appcelerator, Inc. System and method for emulating different user agents on a server
US8335982B1 (en) 2007-12-05 2012-12-18 Appcelerator, Inc. System and method for binding a document object model through JavaScript callbacks
US8639743B1 (en) 2007-12-05 2014-01-28 Appcelerator, Inc. System and method for on-the-fly rewriting of JavaScript
US7530060B1 (en) * 2008-01-08 2009-05-05 International Business Machines Corporation Methods and computer program product for optimizing binaries with coding style formalization
US8291079B1 (en) 2008-06-04 2012-10-16 Appcelerator, Inc. System and method for developing, deploying, managing and monitoring a web application in a single environment
US8880678B1 (en) 2008-06-05 2014-11-04 Appcelerator, Inc. System and method for managing and monitoring a web application using multiple cloud providers
US20100042585A1 (en) * 2008-08-14 2010-02-18 Dustin Kurt Adler Command Interpretation
US7979450B2 (en) * 2008-09-15 2011-07-12 Xsevo Systems, Inc. Instance management of code in a database
US8171045B2 (en) * 2008-07-31 2012-05-01 Xsevo Systems, Inc. Record based code structure
US8291386B2 (en) * 2008-08-21 2012-10-16 International Business Machines Corporation System and process for debugging object-oriented programming code
US7596620B1 (en) 2008-11-04 2009-09-29 Aptana, Inc. System and method for developing, deploying, managing and monitoring a web application in a single environment
US8683439B2 (en) * 2008-08-21 2014-03-25 International Business Machines Corporation System and process for debugging object-oriented programming code leveraging preprocessors
US8752020B2 (en) * 2008-08-21 2014-06-10 International Business Machines Corporation System and process for debugging object-oriented programming code leveraging runtime metadata
US8307350B2 (en) 2009-01-14 2012-11-06 Microsoft Corporation Multi level virtual function tables
US9111036B2 (en) * 2010-04-30 2015-08-18 Red Hat, Inc. Preloading unwind data for non-intrusive backtracing
US8713529B2 (en) * 2010-07-30 2014-04-29 Red Hat, Inc. Replacing memory pointers with implicit pointers to be used in compiler-generated debug output
WO2016156433A1 (en) 2015-03-31 2016-10-06 British Telecommunications Public Limited Company Network operation
GB2541034A (en) 2015-07-31 2017-02-08 British Telecomm Network operation
JP7073813B2 (ja) * 2018-03-16 2022-05-24 富士通株式会社 制御プログラム、制御方法および情報処理装置
CN111104097B (zh) * 2019-12-13 2023-06-30 上海众源网络有限公司 一种数据写入、读取方法及装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4373697A (en) * 1980-12-29 1983-02-15 Caterpillar Tractor Co. Pulse width modulated constant current servo driver
JPH0630066B2 (ja) * 1983-10-24 1994-04-20 株式会社日立製作所 テーブル型言語翻訳方法
US4667290A (en) * 1984-09-10 1987-05-19 501 Philon, Inc. Compilers using a universal intermediate language
US4845975A (en) * 1986-11-28 1989-07-11 Caterpillar Inc. Method for monitoring a work vehicle suspension
US4931928A (en) * 1988-11-09 1990-06-05 Greenfeld Norton R Apparatus for analyzing source code
US5093914A (en) * 1989-12-15 1992-03-03 At&T Bell Laboratories Method of controlling the execution of object-oriented programs

Also Published As

Publication number Publication date
US5361351A (en) 1994-11-01
JPH04247536A (ja) 1992-09-03
EP0476635A3 (en) 1993-04-07
EP0476635A2 (en) 1992-03-25

Similar Documents

Publication Publication Date Title
JP3405996B2 (ja) コンピュータベースのソフトウェアコンパイルシステム及びデバッガ
US5048018A (en) Debugging parallel programs by serialization
US5680622A (en) System and methods for quickly detecting shareability of symbol and type information in header files
US6378126B2 (en) Compilation of embedded language statements in a source code program
US5230049A (en) Program source code translator
US5586328A (en) Module dependency based incremental compiler and method
US5956479A (en) Demand based generation of symbolic information
US6041180A (en) System and method for optimizing template object files
US6014518A (en) Terminating polymorphic type inference program analysis
US6029207A (en) Apparatus and method for dynamic linking of computer software components
US6434742B1 (en) Symbol for automatically renaming symbols in files during the compiling of the files
JPH06230976A (ja) 参照をリゾルブする方法および装置
EP0537257A1 (en) Integrated hierarchical representation of computer programs for a software development system
JP2000035893A (ja) デ―タ処理システムの配列の静的初期化方法、デ―タ処理方法、並びにデ―タ処理システム及びその制御手順をコンピュ―タに実行させるプログラムを記憶したコンピュ―タ読み取り可能な記憶媒体
WO2005024631A2 (en) Creating and checking runtime data types
US7849470B2 (en) System and method for extending a programming language to include multiple dissimilar object systems
KR20080038306A (ko) 널가능과 후 바인딩
US5581769A (en) Multipurpose program object linkage protocol for upward compatibility among different compilers
Johnson et al. Experiences in using cetus for source-to-source transformations
US5150474A (en) Method for transferring arguments between object programs by switching address modes according to mode identifying flag
Sorgatz Dynamic Modules: User’s Manual and Programming Guide for MuPAD 1.4
JP3266097B2 (ja) 非リエントラントプログラムの自動リエントラント化方法及びシステム
JP3461185B2 (ja) ロードモジュールへのソースコード行番号登録方法および装置
Barrett et al. Predictable macros for Hindley-Milner
Dowd et al. Run time type information in Mercury

Legal Events

Date Code Title Description
R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees