changeset 58:0e42707ddeb2

add
author mir3636
date Sun, 22 Apr 2018 18:52:38 +0900
parents 6c55961dcf0b
children aa9be79a7569
files Paper/sigos.pdf Paper/sigos.tex Paper/src/varargnext.cbc
diffstat 3 files changed, 11 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
Binary file Paper/sigos.pdf has changed
--- a/Paper/sigos.tex	Sun Apr 22 18:38:16 2018 +0900
+++ b/Paper/sigos.tex	Sun Apr 22 18:52:38 2018 +0900
@@ -163,17 +163,11 @@
 ノーマルレベルでは Context を直接見ることはできない。
 
 Code Gear の継続は関数型プログラミングからみると継続先の Context を含む Closure となっている。
-これを記述するために継続に不定長引数を追加する構文をスクプリトの変換機能として用意した図。\ref{fig:varargnext}
+これを記述するために継続に不定長引数を追加する構文をスクプリトの変換機能として用意した図。\ref{varargnext}
 メタ計算側ではこれらの Context を常に持ち歩いているので goto 文で引数を用いることはなく、
 行き先は Code Gear の番号のみで指定される。
-\begin{figure}[ht]
- \begin{center}
-%  \includegraphics[width=70mm]{./pic/MetaGear.pdf}
- \end{center}
- \caption{不定長引数を持つ継続}
- \label{fig:varargnext}
-\end{figure}
 
+\lstinputlisting[label=varargnext, caption=不定長引数を持つ継続]{./src/varargnext.cbc}
 
 これにより Interface 間の呼び出しを C++ のメソッド呼び出しのように記述することができる。
 Interface の実装は、Context 内に格納されているので、オブジェクトごとに実装を変える多様性を実現できている。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Paper/src/varargnext.cbc	Sun Apr 22 18:52:38 2018 +0900
@@ -0,0 +1,9 @@
+__code popSingleLinkedStack(struct SingleLinkedStack* stack, __code next(union Data* data, ...)) {
+    if (stack->top) {
+        data = stack->top->data;
+        stack->top = stack->top->next;
+    } else {
+        data = NULL;
+    }
+    goto next(data, ...);
+}