Artifact
6454bd5ca8f25248798ddbf805b35461f51841da:
Ticket change
[6454bd5ca8]
- Ticket
[bfe0f34e6ca558c5|bfe0f34e6c] <i>catch and yieldto</i> status still Closed with 5 other changes
by
sebres
2017-06-06 16:41:47.
D 2017-06-06T16:41:47.619
J closedate 2457911.19569003
J closer sebres
J icomment >\sSomebody\swith\sthe\sNRE\s"in\shis\scache"\smight\sgive\ssome\sinsight\shere.\r\n\r\n>\sFor\sthis\sreason,\san\serror\sin\sa\scoroutine\s"pops\sup"\sback\sto\sthe\sclosest\s[coroutine]\sor\sresumption\r\n\r\nThe\scoroutine\sis\sscope-less\sexecution\swith\sanchoring\son\sthe\sexecution\slevel\s(without\spossibility\sto\supvar/uplevel\setc).\r\n\r\nSometimes\sit\sis\sjust\sgood\sto\simagine\s"how\scoroutines\swork",\sto\stake\sa\slook\son\sexample\slike\sthis:\r\n<code><pre>\r\n%\sproc\sout\s{args}\s{::puts\s{*}[lrange\s$args\s0\send-1]\s[string\srepeat\s"\s\s"\s[expr\s{[info\slevel]-1}]][lindex\s$args\send]}\r\n%\r\n%\sout\s0:[info\slevel];\sapply\s{{}\s{\s\r\n\s\s\s\sout\s1:[info\slevel];\sapply\s{{}\s{\r\n\s\s\s\s\s\sout\s2:[info\slevel]\s\r\n\s\s\s\s}}\r\n\s\s}}\r\n0:0\r\n\s\s1:1\r\n\s\s\s\s2:2\r\n%\sout\s0:[info\slevel];\scoroutine\sc1\sapply\s{{}\s{\r\n\s\s\s\sout\s1:[info\slevel];\scoroutine\sc2\sapply\s{{}\s{\s\r\n\s\s\s\s\s\sout\s2:[info\slevel]\s\r\n\s\s\s\s}}\r\n\s\s}}\r\n0:0\r\n\s\s1:1\r\n\s\s2:1\r\n</pre></code>\r\n\r\nAnother\sexample\sis\sgood\sto\sexplain\s"yieldto":\r\n<code><pre>\r\n%\sproc\sout\s{args}\s{\r\n\s\s\s\sset\slev\s[set\srlev\s[expr\s{[info\slevel]-1}]]\r\n\s\s\s\sif\s{[regexp\s{^::\\D*(\\d+)}\s[info\scoroutine]\s_\slev]}\s{incr\slev\s$rlev}\r\n\s\s\s\s::puts\s{*}[lrange\s$args\s0\send-1]\s[string\srepeat\s"\s\s"\s$lev][lindex\s$args\send]\r\n\s\s}\r\n%\r\n%\sproc\stest\s{c1body\sc2body}\s{\r\n\s\s\s\sout\s"++\stest\senter";\r\n\s\s\s\sif\s{[catch\s{\r\n\s\s\s\s\s\scoroutine\sc1\s::apply\s[list\s[list\s[list\sc1body\s$c1body]\s[list\sc2body\s$c2body]]\s{\r\n\s\s\s\s\s\s\s\sout\s"++\sc1\senter"\r\n\s\s\s\s\s\s\s\scoroutine\sc2\s::apply\s[list\s[list\s[list\sc2body\s$c2body]]\s{\r\n\s\s\s\s\s\s\s\s\s\sout\s"++\sc2\senter"\r\n\s\s\s\s\s\s\s\s\s\syield\r\n\s\s\s\s\s\s\s\s\s\sout\s"**\sc2"\r\n\s\s\s\s\s\s\s\s\s\sif\s1\s$c2body\r\n\s\s\s\s\s\s\s\s\s\sout\s"--\sc2\sleave"\r\n\s\s\s\s\s\s\s\s}]\r\n\s\s\s\s\s\s\s\sout\s"**\sc1"\r\n\s\s\s\s\s\s\s\sif\s{[catch\s$c1body\sr]}\s{\r\n\s\s\s\s\s\s\s\s\s\sout\s"**\sc1\s!!\sERROR:\s$r"\r\n\s\s\s\s\s\s\s\s}\r\n\s\s\s\s\s\s\s\sout\s"--\sc1\sleave"\r\n\s\s\s\s\s\s}]\r\n\s\s\s\s}\serrMsg]}\s{\r\n\s\s\s\s\s\sout\s"**\stest\s!!\sERROR:\s$errMsg";\r\n\s\s\s\s}\r\n\s\s\s\sout\s"**\stest"\r\n\s\s\s\sif\s{[namespace\swhich\s-command\sc1]\sne\s""}\s{\r\n\s\s\s\s\s\sout\s"**\stest\s..\scontinue\s::c1"\r\n\s\s\s\s\s\sc1;\s#\sfinish\sc1\sif\sexpected\r\n\s\s\s\s}\r\n\s\s\s\sout\s"--\stest\sleave";\r\n\s\s}\r\n%\r\n%\stest\s{yieldto\sc2}\s{out\s"**\sc2\s..\sBOOM";\serror\s"BOOM"}\r\n\s\s++\stest\senter\r\n\s\s\s\s++\sc1\senter\r\n\s\s\s\s\s\s++\sc2\senter\r\n\s\s\s\s**\sc1\r\n\s\s\s\s\s\s**\sc2\r\n\s\s\s\s\s\s**\sc2\s..\sBOOM\r\n\s\s**\stest\s!!\sERROR:\sBOOM\r\n\s\s**\stest\r\n\s\s**\stest\s..\scontinue\s::c1\r\n\s\s\s\s--\sc1\sleave\r\n\s\s--\stest\sleave\r\n%\stest\s{yieldto\sc2}\s{out\s"**\sc2\s..\sOK";\sreturn\sOK}\r\n\s\s++\stest\senter\r\n\s\s\s\s++\sc1\senter\r\n\s\s\s\s\s\s++\sc2\senter\r\n\s\s\s\s**\sc1\r\n\s\s\s\s\s\s**\sc2\r\n\s\s\s\s\s\s**\sc2\s..\sOK\r\n\s\s**\stest\r\n\s\s**\stest\s..\scontinue\s::c1\r\n\s\s\s\s--\sc1\sleave\r\n\s\s--\stest\sleave\r\n%\stest\s{yieldto\sc2}\s{out\s"**\sc2\s..\sback\sto\sc1";\syieldto\sc1}\r\n\s\s++\stest\senter\r\n\s\s\s\s++\sc1\senter\r\n\s\s\s\s\s\s++\sc2\senter\r\n\s\s\s\s**\sc1\r\n\s\s\s\s\s\s**\sc2\r\n\s\s\s\s\s\s**\sc2\s..\sback\sto\sc1\r\n\s\s\s\s--\sc1\sleave\r\n\s\s**\stest\r\n\s\s--\stest\sleave\r\n%\r\n%\stest\s{c2}\s{out\s"**\sc2\s..\sBOOM";\serror\s"BOOM"}\r\n\s\s++\stest\senter\r\n\s\s\s\s++\sc1\senter\r\n\s\s\s\s\s\s++\sc2\senter\r\n\s\s\s\s**\sc1\r\n\s\s\s\s\s\s**\sc2\r\n\s\s\s\s\s\s**\sc2\s..\sBOOM\r\n\s\s\s\s**\sc1\s!!\sERROR:\sBOOM\r\n\s\s\s\s--\sc1\sleave\r\n\s\s**\stest\r\n\s\s--\stest\sleave\r\n%\stest\s{c2}\s{out\s"**\sc2\s..\sOK";\sreturn\sOK}\r\n\s\s++\stest\senter\r\n\s\s\s\s++\sc1\senter\r\n\s\s\s\s\s\s++\sc2\senter\r\n\s\s\s\s**\sc1\r\n\s\s\s\s\s\s**\sc2\r\n\s\s\s\s\s\s**\sc2\s..\sOK\r\n\s\s\s\s--\sc1\sleave\r\n\s\s**\stest\r\n\s\s--\stest\sleave\r\n%\stest\s{c2}\s{out\s"**\sc2\s..\sback\sto\sc1";\syieldto\sc1}\r\n\s\s++\stest\senter\r\n\s\s\s\s++\sc1\senter\r\n\s\s\s\s\s\s++\sc2\senter\r\n\s\s\s\s**\sc1\r\n\s\s\s\s\s\s**\sc2\r\n\s\s\s\s\s\s**\sc2\s..\sback\sto\sc1\r\n\s\s\s\s**\sc1\s!!\sERROR:\scoroutine\s"c1"\sis\salready\srunning\r\n\s\s\s\s--\sc1\sleave\r\n\s\s**\stest\r\n\s\s--\stest\sleave\r\n%\r\n</pre></code>\r\n\r\nNote\sthat\sthe\scorrect\sway\sto\suse\s"yieldto"\sexplained\sabove\sin\s3th\sexample:\r\n<code><pre>\r\n\s\stest\s{yieldto\sc2}\s{out\s"**\sc2\s..\sback\sto\sc1";\syieldto\sc1}\r\n</pre></code>\r\n\r\nMy\sconclusion\salso:\sthe\ssubject\sis\sindeed\snot\sa\sbug\s(as\syou\salready\scorrect\ssaid).<br/>\r\nBut\sIMHO\sthe\slogic\sof\s"yieldto"\scan\sbe\sextended\sa\sbit.\r\nI'll\stry\sto\sspecify\smy\sidea\sresp.\sto\sdescribe\sor\sexplain\swhat\sI\swant\sto\sdo\slater\s(too\smany\sthings\sare\scurrently\sopen).
J login sebres
J mimetype text/x-fossil-wiki
K bfe0f34e6ca558c525d3d649f93970e2267b5ff1
U sebres
Z 599b6ef455a4393149458d2ced25c7f6