changeset 106:0512c7f88417

add src
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Sat, 06 Feb 2021 13:23:39 +0900
parents 20bb97e54d33
children 84359208ad70
files paper/chapter/04-interface.tex paper/master_paper.pdf paper/src/IncludeNode.cbc paper/src/implStackDef.cbc paper/src/pushStack.cbc
diffstat 5 files changed, 35 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/paper/chapter/04-interface.tex	Sat Feb 06 12:39:12 2021 +0900
+++ b/paper/chapter/04-interface.tex	Sat Feb 06 13:23:39 2021 +0900
@@ -221,10 +221,32 @@
 Implementの宣言の構文では、 まず\texttt{\#impl}の後ろに実装したいIntefaceの名前を入れる。
 続く\texttt{as}キーワードの後ろに、 Implementの型名を記述する。
 宣言はgenerate\_stub.plが読み取り、 変換した後のCbCファイルからは該当する行が削除される。
-\lstinputlisting[label=src:implHeader, caption=Intefaceの実装をする際の宣言]{src/implHeader.h}
+\lstinputlisting[label=src:implHeader, caption=DataGearの使用の宣言]{src/implHeader.h}
+
 
 
 \section{内部データ構造に利用するDataGearの使用構文の導入}
+InterfaceおよびImplmentで使うDataGearは、通常引数の形でCodeGearに入力される。
+これ以外で、CodeGearの内部でデータ構造の表現の為に利用されるDataGearが存在する。
+例えばSingleLinkedStackの実装では、Stackにいれる値の表現としてElementDataGearを使う。
+Elementは入力で受け取ったunion Data型を使って、CodeGer内部で作製している。
+\lstinputlisting[label=src:pushStackCbC, caption=CodeGear内部で作られるElement DataGear]{src/pushStack.cbc}
+
+意味的にはInterfaceとしてではなく、DataGearそのものを使いたいケースであるため\texttt{\#interface}構文以外の新しいDataGearの使用を宣言する構文を導入したい。
+
+DataGearを明示的に使うことを宣言する構文として\texttt{\#data}を導入した。
+これは使用したいDataGearの定義ファイルを\texttt{\#data}の後ろに記述する。
+SingleLinkedStackの場合の例をソースコード\ref{src:implStackdef}に示す。
+この例ではNodeとElementを使用している。
+\lstinputlisting[label=src:implStackdef, caption=DataGearの使用の宣言]{src/implStackDef.cbc}
+
+この宣言は、使用しているDataGearを調査しcontext.hを作製するgenerate\_context.plが発見できなければならない。
+しかしgenerate\_context.plは、メタ情報を含む形にgenerate\_stub.plはトランスパイルした後に実行される。
+GearsOSで拡張したマクロの用なInterface関連の宣言はここで消されてしまう。
+DataGearの使用の宣言は、コメントの形で変換後のファイルに書き出すようにし、generate\_context.plでも参照可能にした。
+SingleLinkedStackの例題に対応する変換後のコードを、ソースコード\ref{src:implStackdefAfter}に示す。
+\lstinputlisting[label=src:implStackdefAfter, caption=DataGearの使用の宣言のPerlによる変換後]{src/IncludeNode.cbc}
+
 
 \section{Interface APIに対応したCodeGearの名前の自動変換} \label{sec:autoCodeGearName}
 InterfaceのAPIに対応したCodeGearを実装する際、今までは暗黙にInterface名とImplの型名をつなげた名前で定義していた。
Binary file paper/master_paper.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/IncludeNode.cbc	Sat Feb 06 13:23:39 2021 +0900
@@ -0,0 +1,2 @@
+// include "Node.h"
+// include "Element.h"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/implStackDef.cbc	Sat Feb 06 13:23:39 2021 +0900
@@ -0,0 +1,3 @@
+#impl "Stack.h" as "SingleLinkedStack.h"
+#data "Node.h"
+#data "Element.h"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/pushStack.cbc	Sat Feb 06 13:23:39 2021 +0900
@@ -0,0 +1,7 @@
+__code pushSingleLinkedStack(struct SingleLinkedStack* stack, union Data* data, __code next(...)) {
+    Element* element = new Element();
+    element->next = stack->top;
+    element->data = data;
+    stack->top = element;
+    goto next(...);
+}