# HG changeset patch # User anatofuz # Date 1612486389 -32400 # Node ID 3fb7c17d8e9106949b41abd9315800549650a3ca # Parent 9974be9e2d1c038fb61d140b1bdeeca04bfea20b update diff -r 9974be9e2d1c -r 3fb7c17d8e91 paper/chapter/04-interface.tex --- a/paper/chapter/04-interface.tex Fri Feb 05 09:22:30 2021 +0900 +++ b/paper/chapter/04-interface.tex Fri Feb 05 09:53:09 2021 +0900 @@ -126,6 +126,19 @@ \section{Interfaceの実装のCbCファイルへの構文の導入} +今までのGearsOSではマクロに似た\texttt{\#interface}構文で使用するInterfce名を指定した。 +しかしInterfaceを実装する場合も、 InterfaceのAPIを利用する際も同じシンタックスであった。 +この2つは意味が異なっている為、 シンタックスを分離したい。 +Implementの型定義ファイルを導入したので、Interfaceの実装をする場合に別のシンタックスを導入する。 + + +導入された構文をソースコード\ref{src:implHeader}に示す。 +この例ではStack Interfaceの実装としてSingleLinkedStackを定義する宣言である。 + +Implementの宣言の構文では、 まず\texttt{\#impl}の後ろに実装したいIntefaceの名前を入れる。 +続く\texttt{for}キーワードの後ろに、 Implementの型名を記述する。 +宣言はgenerate\_stub.plが読み取り、 変換した後のCbCファイルからは該当する行が削除される。 +\lstinputlisting[label=src:implHeader, caption=Intefaceの実装をする際の宣言]{src/implHeader.h} \section{GearsCbCのInterfaceの実装時の問題} @@ -227,7 +240,8 @@ コンストラクタのメンバ変数はデフォルトでは変数は0、ポインタの場合はNULLで初期化するように生成する。 このスクリプトで生成されたコンストラクタを使う場合、 CbCファイルから該当する部分を削除すると、\texttt{generate\_stub.pl}内でも自動的に生成される。 自動生成機能を作成すると1CbCファイルあたりの記述量が減る利点がある。 - +generate\_stub.pl内で作製する場合は、 すでにメタ情報を含むコードに書き換えたものを作製する。 +その為厳密には同じコードを生成する訳ではない。 明示的にコンストラクタが書かれていた場合は、 Perlスクリプト内での自動生成は実行しないように実装した。 @@ -285,6 +299,13 @@ \section{InterfaceのAPIの未実装の検知} -パースした結果、ヘッダファイルにAPIの定義がなかった場合は11行目の\texttt{unless}に処理が落ち、 エラー終了する。 +InterfaceAPI呼び出し時に引数の数以外に、そもそも実装していないAPIを呼び出してしまうことがある。 +この場合はCbCがPerlスクリプトによって変換された後でエラーが出る。 +内容はCbCコンパイラのコンパイル時にInterfaceの構造体に、APIに対応するフィールドがないエラーである。 +コンパイル時に発覚できるので問題ないが、 これも変換する前に発見したほうがデバッグが容易である。 + +API呼び出し時の処理は、ソースコード\ref{src:parsedArgs}の処理そのものであるため、この処理の中に未実装のAPIを検知する様にした。 +呼び出し元のInterfaceの情報パースした結果、ヘッダファイルにAPIの定義がなかった場合は11行目の\texttt{unless}に処理が落ち、 エラー終了する。 +これによってInterface呼び出しの問題が、 Perlスクリプトによって変換する前に検知可能になった。 \section{par goto のInterface経由の呼び出しの対応} \ No newline at end of file diff -r 9974be9e2d1c -r 3fb7c17d8e91 paper/final.pdf Binary file paper/final.pdf has changed diff -r 9974be9e2d1c -r 3fb7c17d8e91 paper/master_paper.pdf Binary file paper/master_paper.pdf has changed diff -r 9974be9e2d1c -r 3fb7c17d8e91 paper/src/implHeader.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/implHeader.h Fri Feb 05 09:53:09 2021 +0900 @@ -0,0 +1,1 @@ +#impl "Stack.h" for "SingleLinkedStack.h"