# HG changeset patch # User anatofuz # Date 1550127231 -32400 # Node ID c4dbd7b813020aedd2d4cdb2c2c4a657cfc8af9b # Parent d11c91e8a1fc390f39b7f1bd478f1feb4f681e0e update diff -r d11c91e8a1fc -r c4dbd7b81302 paper/chapter2.tex --- 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が代入される。 diff -r d11c91e8a1fc -r c4dbd7b81302 paper/codes/src/oplabels.h --- /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, diff -r d11c91e8a1fc -r c4dbd7b81302 paper/main.pdf Binary file paper/main.pdf has changed