# HG changeset patch # User anatofuz # Date 1613540241 -32400 # Node ID d2be76d48b00929ae0dd6b094c81c7d10c150eaa # Parent 0178949dcc7db30404cf1a144fe7e09f04b34b83 update diff -r 0178949dcc7d -r d2be76d48b00 paper/chapter/05-perl.tex --- a/paper/chapter/05-perl.tex Tue Feb 16 16:00:32 2021 +0900 +++ b/paper/chapter/05-perl.tex Wed Feb 17 14:37:21 2021 +0900 @@ -287,7 +287,7 @@ pop2で取り出したデータは、 上記で確認した通りContext中のStack Interfaceのデータ格納場所に書き込まれる。 しかしソースコード\ref{src:pop2stub-origin}の例では\texttt{Gearef(context, StackTest)}でContext中の\texttt{StackTest} Interfaceのdataの置き場所から値を取得している。 これはInterfaceのImplのCodeGearは、Interfaceから値を取得するというGearsOSのルールの為である。 -現状ではpop2でせっかく取り出した値をStubCodeGearで取得できない。 +現状ではpop2で取り出した値をStubCodeGearで取得できない。 ここで必要となってくるのは、 実装しているInterface以外の呼び出し元のInterfaceからの値の取得である。 今回の例ではStackTest InterfaceではなくStack Interfaceからdata、 data1を取得したい。 @@ -310,7 +310,7 @@ Contextから値を取り出すのはメタ計算であるStub CodeGearで行われる。 別Interfaceから値を取り出そうとする場合、 すでにPerlトランスパイラが生成しているStubを書き換える方法も取れる。 しかしStubCodeGearそのものを、 別Interfaceから値を取り出すように書き換えてはいけない。 -これは別Interfaceの継続として渡されるケースと、 次のgoto先として遷移するケースがあるためである。 +これは別Interfaceの継続として渡されるケースと、 次のgoto先として遷移するケースが存在するためである。 前者のみの場合は書き換えで問題ないが、 後者のケースで書き換えを行ってしまうとStubで値を取り出す先が異なってしまう。 どのような呼び出し方をしても対応できるようにするには、 Stubを別に別ける必要がある。 diff -r 0178949dcc7d -r d2be76d48b00 paper/final.pdf Binary file paper/final.pdf has changed