Mercurial > hg > Papers > 2019 > anatofuz-thesis
changeset 38:c4dbd7b81302
update
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 14 Feb 2019 15:53:51 +0900 |
parents | d11c91e8a1fc |
children | c68174548ae0 |
files | paper/chapter2.tex paper/codes/src/oplabels.h paper/main.pdf |
diffstat | 3 files changed, 22 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter2.tex Thu Feb 14 15:17:26 2019 +0900 +++ b/paper/chapter2.tex Thu Feb 14 15:53:51 2019 +0900 @@ -75,3 +75,10 @@ これは\_CbC\_return及び、 \_CbC\_environmentという変数を使用する。 この変数は \_CbC\_return が元の環境に戻る際に利用する CodeGear を指し、 \_CbC\_environment は復帰時に戻す元の環境である。 復帰する場合、 呼び出した位置には帰らず、 呼び出した関数の終了する位置に帰る。 +実際に環境付き継続を利用した場合のサンプルコードをソースコード\ref{cbc_return_src}に示す。 + +\lstinputlisting[frame=lrbt, label=cbc_return_src, caption=環境付き継続の例]{./codes/src/return.cbc} + +この例では、 通常 c\_funcの返り値が-1である為、 変数testには-1が設定されるかの様に見える。 +しかし関数 c\_func内でCodeGearである cgに軽量継続しており、 cgでは環境付きgotoを利用して、 1を返り値としてCの関数に戻る。 +この場合、 呼び出し元 c\_funcの返り値である -1 の代わりに、 環境付きgotoで渡される1が優先され、 変数testには1が代入される。
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/codes/src/oplabels.h Thu Feb 14 15:53:51 2019 +0900 @@ -0,0 +1,15 @@ +static const void * const LABELS[] = { + &&OP_no_op, + &&OP_const_i8, + &&OP_const_i16, + &&OP_const_i32, + &&OP_const_i64, + &&OP_const_n32, + &&OP_const_n64, + &&OP_const_s, + &&OP_set, + &&OP_extend_u8, + &&OP_extend_u16, + &&OP_extend_u32, + &&OP_extend_i8, + &&OP_extend_i16,