This fixes a bug in the previous version where if the code does not use top level await but returns a generator or coroutine, the code would try to await it. This sometimes causes strange errors or other unexpected behaviors.

Instead, I switched to a new method of returning by raising an exception. This makes it so the coroutines produced by top level await are returned via a separate channel from return values from the code so we won't confuse them anymore.

I added a new class Executor. On creation, the Executor is given the source code and config options and produces an AST. The caller can then manipulate the AST as they see fit before calling `compile` and then `run` or `run_async`. This passes to the user the most powerful possible interface, and should make it so that Executor is helpful even in complicated use cases.

I put the main parse/compile logic into a separate generator to avoid storing any of the config options on the Executor class. This helps separate out control logic from config options and limit the scope of variables as far as possible.
ENH Improvements to eval_code. This fixes a bug in the previous version where if the code does not use top level await but returns a generator or coroutine, the code would try to await it. This sometimes causes strange errors or other unexpected behaviors.

Instead, I switched to a new method of returning by raising an exception. This makes it so the coroutines produced by top level await are returned via a separate channel from return values from the code so we won't confuse them anymore.

I added a new class Executor. On creation, the Executor is given the source code and config options and produces an AST. The caller can then manipulate the AST as they see fit before calling `compile` and then `run` or `run_async`. This passes to the user the most powerful possible interface, and should make it so that Executor is helpful even in complicated use cases.

I put the main parse/compile logic into a separate generator to avoid storing any of the config options on the Executor class. This helps separate out control logic from config options and limit the scope of variables as far as possible.
PNG


IHDRߊsRGB	pHYs+ IDATxytTםIزo,ӢVQZElz#KZ+G=GRhU@*\Z5`CBLf"dfLy>9gb}q]|::t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`@R'(.R[.8L+??_5o<x≝zs꥗^jw{ 4{߯o/Oީϴ~z***_N5d
6L#Fuj8p`?ĉi+))IÆ
S~~ƍٳgk̙JKKFz^{v=Z_uQ^^#Fܹs5|.?vڻwiėu]+|?}G`0ء9{찏VZv7nB!'p'Mܔ.sѮ]::ѿ/vwc#F!qܳ>}:m#]X!^j׮]/SO=U[ltzzKgq.\?0ӑ$jڵ0anV566{J=A֭ĉu7.SJhj˖-2e."}AvءGZfM+<#2e}xO|rM:U%%%NL4669{5ydmݺ5SA!455ꫯֵ^$K/Ooj=ywu룏>TzRwyz'=$n<lպ{=ٻwfϞxO%fۧ9sE466jѢEz7=$nҥKaÆxO#l޼Y_}){9-)S4o<}W
֢ty)999뺮gϞΩB!]q*((mP466jQ!##CǏWNN|}QڹsgTںu~׿5Jw\UPPk޲e?ꫯ---MguV\;
TvRMMM
7ܠ]zxׯ_>QDm2StywڴiQ±|c>F


b_*ۻm-n-&Mr_~e75VrSSS#/33-++x]+8>nZZZל]O޶v)tKwǏ֭[#>fft{ɓ'kӦMZfRRR]reTUTT)|P=PQwyg1~_7|{=M6MII;h%K9vleeͬdeek|S[VVUVhf_~3go߮Z뭷hfHDqGW^ye+[kjj/v5sLUVVvv'jċ/_+Vpرcyfvia=r]7FYF+38#D]1RRRzjp
aǽk	9bRg֢Eyꩧ\nnn4gwz~aͺK
sG999G}u|^$%%Sw^1Uz4`vܹ3aIwygإn]3<!^lժUJOOowƍڣt)D|[j
]gg?Ѽy󢺺{ɓ+~aNϱp	ظqcf'NM7vwm0`?"XFFf͚ڣOOO׆
4v؈~z]q]gGڵKf͊n[M4I&M{n/,,Lb'kc4aʔ)6lX~];n/СC/GDk׮-uTqqOGh"\Gs"?Y\uĉaO5g/s'-C{HQno/uܸqڰaCC-VXS눪*͜9S{8vΜ9z/|>_عp63xv;W{___r;~ꩧw?EAsqYgad#]HHο)"*ku+aANoWEs]W^z^~nC0~3kǞp	zXC?z,Xwy[ҳ>qȑ#i&eeeu+Rv[q\nye˖sq999ڴi-tvGuZYYf̘V^qiV[%륗^
umYF,8P3fO>,Yq\rrzꩈK@_Gцw{~ᇚ3g:YG̙3;~ܡCn5em߾=ؖ%by晨n{:
k>wq1XB]tQz/W_ًӵqF?ݻÎ}xb]6>L\pATK|.
g444O?4*SHxr^}հ;Czؿ/o~}iƌQ/bŊ:ދaN3///ӑ%bW\y%bsIW^СCZhQ7a3gN%b׭[w;wvkYpljjj5\]v7wn{Ύ,h"mڴI`P_|1K@^棏>ҙgG}4츱cǆ},`IWmFiQGn몺ZwK/u֩!-_\>+R%%%;#>K_~9rdqLiiiB#Qw)D3O{o]%%%z衇8,
$?^=
t܍ӓO>)qzy|mOrr~itnB
iY<:D7,:cƌM݈LmذAsN̞eSN9C_ǒ&Lжmty[;vlTYzAӵb
رCw6heIW9<y.ڵK7|)iܸqZpa1oc4{m-J_~yTK+??_voeD?R`fqK&"/߳G{QFFF(^VVta7ITޅkp/߯_`Rnnnؕ&z@ۻv _sW>Ce:Lr'r;vE'=QOtE<jԨͤwxUTTv_}AYSN
/W(l"O.??F;w;f1MkhhUW]v߯ì.(7|S{of^0ԥ^v?agճZ^s]]]cZlY#K~aAYӦMx!-ܢe˖=oӾM6MNqϗѬz֗_~3gj۶ma'?1󚻢N]w]#8'N'Y!tt~t0p@-]4옦&y:ӵyVQQx@'tۿr-1YϩҚ5kt'_Wرk:u}ɍg1!.\Wm]w|IU2335aegg}@@*((PSSST_s5h]zg}V~iJJJTPPѐ%KhĈ=<}5kV\;
\;wTMMMT_sgj]zxZn="0mРAZz,XqF*++#	&hٲe]~BvÌzޤIt뭷u555ڸqc\T=#]~1S;üy;4:%##C/BZ(;;[ׯWjjj+84iR8#-[.,T=q}Xs=u>O4o޼xO	xGtwUƌz+.o/ƍӶmtg{*BJJy-Y$SAHـntRmذ!az}>.}e]~;a$s=W۶mܹs=$.#^1qraPTuTN>}>#]V+WԞ={}5sL-_G3f讻I'
zn6Bc"}@}kV;(ozpWP+o푠?dŋxbm߾]?x
HyHJJСC1ch֬Y={w:5=Zf҅^xO-!9\
>\Ç׹瞫smrܞ	>0Ѫu.M:;]::+f8+::+'kMnt#>;nE@5tZ],n}'(n
JsX/ָ
]na/2.9P:}ur:t @0`A:t @0`A:t 8&un'>6.?(W${H\鎾5/\y /Cm|R`~7\t̕}_SZ7Pjk\9O0dOٹע2bW
cmt+wO4Gr7i
jl)N3$KrT(m[y:|/IӠܨo;)I::$GDuwOPШ@{:8Rj1jW>5#o5fBQ =!
[+'ϧ4z8lGc׸Im]UvOM_:P>9tAW%ESe::wfO9CZȧ9mΉgf;BlJ\UW=ܞytqhpp=}AGjk\m+NIs3wώGyCed9i/eZ<t_Z>	~gqCqL㨮N*-oJOy?2eks<-ç̬8{OJTyu)5.<`aQ܃x:lrU]R/9v=vmg陎2[㛕SfNZiqH<SVO?IQ۷t`rxc8G#PTR&wZrZ3ؑHu\xSFOI޸GY͇CA$tsW۞?Ⳡ;4*xtX:ª=j)isoYʊCEHlRyPu3cotUVҡZWE_US\Q_Guwa\˅)r|l$g4oQRV4/!U^hKCm(
o熏+;ϑorG

KCoޣNMsh G}J(*+BjOPʚSFG9.-eUZKA^TSmB:ؼ̀G 7t冤ծz](oXUe!TQw=PȻ½5ƹC}mnG+-`u Vy8)Go"舨eu[8&-ç#|ʐKCrJSfve|^<j
z}{m!9֯tcWDtUiI^rjk~C
/Ե5{~)+ǧt8%*˽8;!CAW}:k|VI$GY>
ׅA56f-Ђ#,qTWj
5Z#R4W**wmMH^iZq{Ǒ'|F=)z8ǒ~i>f9:"
4(su*,r|J]r޻;SHJ8y*[#7ۥ|	㒔#JK'';Jn^Ƶ;j?f4p`kzsZ3USȷ~iտԯ#9x{xiX:RS-2nv]WU!&#U{ZΟ;FW[^nԮO'LRZw~XvUSyt:tZTU
x㒎:Pzu];z~<Oo5yv%޹tsc[Tq$n[C\RS5+UUTQ޺+\@
Yr{rzwOPU6edz:z<:jux}]۽wSs]Wͫ:cm;JW%Ek96ү~X5$JB[M>;t^]ώ*$WS𳠂/h^&s>
IooҀr$>eszmcMۛWzoPSv}TI{8!56Qg~}!%%ycG#*(- ]6+]Q[F-cZWu*f8ңDm{~苸(:tp\n5/rU_YΠέ{:pHIDAT:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A?t	lniTXtXML:com.adobe.xmp<?xpacket begin='﻿' id='W5M0MpCehiHzreSzNTczkc9d'?>
<x:xmpmeta xmlns:x='adobe:ns:meta/'>
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>

 <rdf:Description rdf:about=''
  xmlns:Attrib='http://ns.attribution.com/ads/1.0/'>
  <Attrib:Ads>
   <rdf:Seq>
    <rdf:li rdf:parseType='Resource'>
     <Attrib:Created>2020-10-26</Attrib:Created>
     <Attrib:ExtId>4d44af96-13ec-418f-bc6f-b0b81670e6ae</Attrib:ExtId>
     <Attrib:FbId>525265914179580</Attrib:FbId>
     <Attrib:TouchType>2</Attrib:TouchType>
    </rdf:li>
   </rdf:Seq>
  </Attrib:Ads>
 </rdf:Description>

 <rdf:Description rdf:about=''
  xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
  <pdf:Author>Александра Жейнова</pdf:Author>
 </rdf:Description>

 <rdf:Description rdf:about=''
  xmlns:xmp='http://ns.adobe.com/xap/1.0/'>
  <xmp:CreatorTool>Canva</xmp:CreatorTool>
 </rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end='r'?>cIENDB`
PNG


IHDRߊsRGB	pHYs+ IDATxytTםIزo,ӢVQZElz#KZ+G=GRhU@*\Z5`CBLf"dfLy>9gb}q]|::t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`@R'(.R[.8L+??_5o<x≝zs꥗^jw{ 4{߯o/Oީϴ~z***_N5d
6L#Fuj8p`?ĉi+))IÆ
S~~ƍٳgk̙JKKFz^{v=Z_uQ^^#Fܹs5|.?vڻwiėu]+|?}G`0ء9{찏VZv7nB!'p'Mܔ.sѮ]::ѿ/vwc#F!qܳ>}:m#]X!^j׮]/SO=U[ltzzKgq.\?0ӑ$jڵ0anV566{J=A֭ĉu7.SJhj˖-2e."}AvءGZfM+<#2e}xO|rM:U%%%NL4669{5ydmݺ5SA!455ꫯֵ^$K/Ooj=ywu룏>TzRwyz'=$n<lպ{=ٻwfϞxO%fۧ9sE466jѢEz7=$nҥKaÆxO#l޼Y_}){9-)S4o<}W
֢ty)999뺮gϞΩB!]q*((mP466jQ!##CǏWNN|}QڹsgTںu~׿5Jw\UPPk޲e?ꫯ---MguV\;
TvRMMM
7ܠ]zxׯ_>QDm2StywڴiQ±|c>F


b_*ۻm-n-&Mr_~e75VrSSS#/33-++x]+8>nZZZל]O޶v)tKwǏ֭[#>fft{ɓ'kӦMZfRRR]reTUTT)|P=PQwyg1~_7|{=M6MII;h%K9vleeͬdeek|S[VVUVhf_~3go߮Z뭷hfHDqGW^ye+[kjj/v5sLUVVvv'jċ/_+Vpرcyfvia=r]7FYF+38#D]1RRRzjp
aǽk	9bRg֢Eyꩧ\nnn4gwz~aͺK
sG999G}u|^$%%Sw^1Uz4`vܹ3aIwygإn]3<!^lժUJOOowƍڣt)D|[j
]gg?Ѽy󢺺{ɓ+~aNϱp	ظqcf'NM7vwm0`?"XFFf͚ڣOOO׆
4v؈~z]q]gGڵKf͊n[M4I&M{n/,,Lb'kc4aʔ)6lX~];n/СC/GDk׮-uTqqOGh"\Gs"?Y\uĉaO5g/s'-C{HQno/uܸqڰaCC-VXS눪*͜9S{8vΜ9z/|>_عp63xv;W{___r;~ꩧw?EAsqYgad#]HHο)"*ku+aANoWEs]W^z^~nC0~3kǞp	zXC?z,Xwy[ҳ>qȑ#i&eeeu+Rv[q\nye˖sq999ڴi-tvGuZYYf̘V^qiV[%륗^
umYF,8P3fO>,Yq\rrzꩈK@_Gцw{~ᇚ3g:YG̙3;~ܡCn5em߾=ؖ%by晨n{:
k>wq1XB]tQz/W_ًӵqF?ݻÎ}xb]6>L\pATK|.
g444O?4*SHxr^}հ;Czؿ/o~}iƌQ/bŊ:ދaN3///ӑ%bW\y%bsIW^СCZhQ7a3gN%b׭[w;wvkYpljjj5\]v7wn{Ύ,h"mڴI`P_|1K@^棏>ҙgG}4츱cǆ},`IWmFiQGn몺ZwK/u֩!-_\>+R%%%;#>K_~9rdqLiiiB#Qw)D3O{o]%%%z衇8,
$?^=
t܍ӓO>)qzy|mOrr~itnB
iY<:D7,:cƌM݈LmذAsN̞eSN9C_ǒ&Lжmty[;vlTYzAӵb
رCw6heIW9<y.ڵK7|)iܸqZpa1oc4{m-J_~yTK+??_voeD?R`fqK&"/߳G{QFFF(^VVta7ITޅkp/߯_`Rnnnؕ&z@ۻv _sW>Ce:Lr'r;vE'=QOtE<jԨͤwxUTTv_}AYSN
/W(l"O.??F;w;f1MkhhUW]v߯ì.(7|S{of^0ԥ^v?agճZ^s]]]cZlY#K~aAYӦMx!-ܢe˖=oӾM6MNqϗѬz֗_~3gj۶ma'?1󚻢N]w]#8'N'Y!tt~t0p@-]4옦&y:ӵyVQQx@'tۿr-1YϩҚ5kt'_Wرk:u}ɍg1!.\Wm]w|IU2335aegg}@@*((PSSST_s5h]zg}V~iJJJTPPѐ%KhĈ=<}5kV\;
\;wTMMMT_sgj]zxZn="0mРAZz,XqF*++#	&hٲe]~BvÌzޤIt뭷u555ڸqc\T=#]~1S;üy;4:%##C/BZ(;;[ׯWjjj+84iR8#-[.,T=q}Xs=u>O4o޼xO	xGtwUƌz+.o/ƍӶmtg{*BJJy-Y$SAHـntRmذ!az}>.}e]~;a$s=W۶mܹs=$.#^1qraPTuTN>}>#]V+WԞ={}5sL-_G3f讻I'
zn6Bc"}@}kV;(ozpWP+o푠?dŋxbm߾]?x
HyHJJСC1ch֬Y={w:5=Zf҅^xO-!9\
>\Ç׹瞫smrܞ	>0Ѫu.M:;]::+f8+::+'kMnt#>;nE@5tZ],n}'(n
JsX/ָ
]na/2.9P:}ur:t @0`A:t @0`A:t 8&un'>6.?(W${H\鎾5/\y /Cm|R`~7\t̕}_SZ7Pjk\9O0dOٹע2bW
cmt+wO4Gr7i
jl)N3$KrT(m[y:|/IӠܨo;)I::$GDuwOPШ@{:8Rj1jW>5#o5fBQ =!
[+'ϧ4z8lGc׸Im]UvOM_:P>9tAW%ESe::wfO9CZȧ9mΉgf;BlJ\UW=ܞytqhpp=}AGjk\m+NIs3wώGyCed9i/eZ<t_Z>	~gqCqL㨮N*-oJOy?2eks<-ç̬8{OJTyu)5.<`aQ܃x:lrU]R/9v=vmg陎2[㛕SfNZiqH<SVO?IQ۷t`rxc8G#PTR&wZrZ3ؑHu\xSFOI޸GY͇CA$tsW۞?Ⳡ;4*xtX:ª=j)isoYʊCEHlRyPu3cotUVҡZWE_US\Q_Guwa\˅)r|l$g4oQRV4/!U^hKCm(
o熏+;ϑorG

KCoޣNMsh G}J(*+BjOPʚSFG9.-eUZKA^TSmB:ؼ̀G 7t冤ծz](oXUe!TQw=PȻ½5ƹC}mnG+-`u Vy8)Go"舨eu[8&-ç#|ʐKCrJSfve|^<j
z}{m!9֯tcWDtUiI^rjk~C
/Ե5{~)+ǧt8%*˽8;!CAW}:k|VI$GY>
ׅA56f-Ђ#,qTWj
5Z#R4W**wmMH^iZq{Ǒ'|F=)z8ǒ~i>f9:"
4(su*,r|J]r޻;SHJ8y*[#7ۥ|	㒔#JK'';Jn^Ƶ;j?f4p`kzsZ3USȷ~iտԯ#9x{xiX:RS-2nv]WU!&#U{ZΟ;FW[^nԮO'LRZw~XvUSyt:tZTU
x㒎:Pzu];z~<Oo5yv%޹tsc[Tq$n[C\RS5+UUTQ޺+\@
Yr{rzwOPU6edz:z<:jux}]۽wSs]Wͫ:cm;JW%Ek96ү~X5$JB[M>;t^]ώ*$WS𳠂/h^&s>
IooҀr$>eszmcMۛWzoPSv}TI{8!56Qg~}!%%ycG#*(- ]6+]Q[F-cZWu*f8ңDm{~苸(:tp\n5/rU_YΠέ{:pHIDAT:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A?t	lniTXtXML:com.adobe.xmp<?xpacket begin='﻿' id='W5M0MpCehiHzreSzNTczkc9d'?>
<x:xmpmeta xmlns:x='adobe:ns:meta/'>
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>

 <rdf:Description rdf:about=''
  xmlns:Attrib='http://ns.attribution.com/ads/1.0/'>
  <Attrib:Ads>
   <rdf:Seq>
    <rdf:li rdf:parseType='Resource'>
     <Attrib:Created>2020-10-26</Attrib:Created>
     <Attrib:ExtId>4d44af96-13ec-418f-bc6f-b0b81670e6ae</Attrib:ExtId>
     <Attrib:FbId>525265914179580</Attrib:FbId>
     <Attrib:TouchType>2</Attrib:TouchType>
    </rdf:li>
   </rdf:Seq>
  </Attrib:Ads>
 </rdf:Description>

 <rdf:Description rdf:about=''
  xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
  <pdf:Author>Александра Жейнова</pdf:Author>
 </rdf:Description>

 <rdf:Description rdf:about=''
  xmlns:xmp='http://ns.adobe.com/xap/1.0/'>
  <xmp:CreatorTool>Canva</xmp:CreatorTool>
 </rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end='r'?>cIENDB`