changeset 19:34de798b11c3

Add stub description
author atton <atton@cr.ie.u-ryukyu.ac.jp>
date Fri, 20 Jan 2017 14:53:16 +0900
parents 415fa6d79d00
children 4307454b56bb
files paper/cbc.tex paper/src/stub.cbc
diffstat 2 files changed, 26 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/paper/cbc.tex	Fri Jan 20 14:39:45 2017 +0900
+++ b/paper/cbc.tex	Fri Jan 20 14:53:16 2017 +0900
@@ -158,11 +158,18 @@
         Meta CodeGear は Context を引数に取る CodeGear として定義されている。
         そのため、Meta CodeGear が DataGear の値を使う為には Context から DataGear を取り出す必要がある。
         取り出す必要がある DataGear は enum を用いて定義し(リスト\ref{src:context} 11-14行)、 CodeGear を実行する際に data フィールドから取り出す。
-        なお、この Context から DataGear を取り出す Meta CodeSegment を stub と呼ぶ。
 \end{itemize}
 
+なお、この Context から DataGear を取り出す Meta CodeSegment を stub と呼ぶ。
+stub の例をリスト\ref{src:stub}に示す。
+stub は Context が持つ DataGear のポインタ data に対して enum を用いてアクセスしている。
+現在、この stub は全ての CodeGear に対してユーザが1つずつ定義する必要がある。
+この作業は非常に煩雑であり、CodeGear の定義から生成するスクリプトを用いて定義の簡易化を行なっているが、コンパイラ側でのサポートは入っていない。
+この stub を型情報から自動生成するために Continuation based C における型システムを定義する必要がある。
+
+\lstinputlisting[label=src:stub, caption=GearsOS における stub Meta CodeSegment] {src/stub.cbc}
+
 % }}}
 
-
 \section{メタ計算ライブラリ akasha を用いた赤黒木の実装の検証}
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/stub.cbc	Fri Jan 20 14:53:16 2017 +0900
@@ -0,0 +1,17 @@
+__code put(struct Context* context,
+           struct Tree* tree,
+           struct Node* root,
+           struct Allocate* allocate)
+{
+    /* ... */
+}
+
+__code put_stub(struct Context* context)
+{
+    goto put(context,
+             &context->data[Tree]->tree,
+             context->data[Tree]->tree.root,
+             &context->data[Allocate]->allocate);
+}
+
+