Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Pygments / examplefiles / output / example.xtm
Size: Mime:
€]q(cpygments.token
_TokenType
qXCommentqXSingleq†q…qq}q(Xsubtypesqcbuiltins
set
q	]q
…qRqXparentq
hh…q…qq}q(hh	]q(hhXPreprocq†q…qq}q(hh	]q…qRqh
hubhhXMultiq†q…qq}q(hh	]q …q!Rq"h
hubhhXHashbangq#†q$…q%q&}q'(hh	]q(…q)Rq*h
hubhhhX
SingleLineq+†q,…q-q.}q/(hh	]q0…q1Rq2h
hubhhXDocq3†q4…q5q6}q7(hh	]q8…q9Rq:h
hubhhX	Directiveq;†q<…q=q>}q?(hh	]q@…qARqBh
hubhhX	MultilineqC†qD…qEqF}qG(hh	]qH…qIRqJh
hubhhX
SinglelineqK†qL…qMqN}qO(hh	]qP…qQRqRh
hubhhXPreprocFileqS†qT…qUqV}qW(hh	]qX…qYRqZh
hubhhXSpecialq[†q\…q]q^}q_(hh	]q`…qaRqbh
hube…qcRqdh
h)…qeqf}qg(hh	]qh(hXEscapeqi…qj…qkql}qm(hh	]qn…qoRqph
hfubhXOperatorqq…qr…qsqt}qu(hh	]qv(hhqXDBSqw†qx…qyqz}q{(hh	]q|…q}Rq~h
htubhhqXWordq†q€…qq‚}qƒ(hh	]q„…q…Rq†h
htube…q‡Rqˆh
hfhh‚hwhzubhXNameq‰…qŠ…q‹qŒ}q(hh	]qŽ(hh‰XTagq†q…q‘q’}q“(hh	]q”…q•Rq–h
hŒubhh‰XEntityq—†q˜…q™qš}q›(hh	]qœhh‰h—hw‡q…qžqŸ}q (hh	]q¡…q¢Rq£h
hšuba…q¤Rq¥h
hŒhwhŸubhh‰X	Exceptionq¦†q§…q¨q©}qª(hh	]q«…q¬Rq­h
hŒubhh‰X	Decoratorq®†q¯…q°q±}q²(hh	]q³…q´Rqµh
hŒubhh‰XClassq¶†q·…q¸q¹}qº(hh	]q»(hh‰h¶hw‡q¼…q½q¾}q¿(hh	]qqÁRqÂh
h¹ubhh‰h¶XStartqÇqąqŁqÆ}qÇ(hh	]qȅqÉRqÊh
h¹ube…qËRqÌh
hŒhÃhÆhwh¾ubhh‰XVariableq͆q΅qρqÐ}qÑ(hh	]qÒ(hh‰hÍX	AnonymousqӇqԅqՁqÖ}q×(hh	]q؅qÙRqÚh
hÐubhh‰hÍh¶‡qۅq܁qÝ}qÞ(hh	]q߅qàRqáh
hÐubhh‰hÍXMagicqâ‡qã…qäqå}qæ(hh	]qç…qèRqéh
hÐubhh‰hÍXGlobalqê‡që…qìqí}qî(hh	]qï…qðRqñh
hÐubhh‰hÍXInstanceqò‡qó…qôqõ}qö(hh	]q÷…qøRqùh
hÐube…qúRqûh
hŒh¶hÝhêhíhòhõhâhåhÓhÖubhh‰X	Attributeqü†qý…qþqÿ}r(hh	]rhh‰hüh͇r…rr}r(hh	]r…rRrh
hÿuba…r	Rr
h
hŒhÍjubhh‰X	Namespacer†r…r
r}r(hh	]r…rRrh
hŒubhh‰XPropertyr†r…rr}r(hh	]r…rRrh
hŒubhh‰XSymbolr†r…rr}r(hh	]r …r!Rr"h
hŒubhh‰XClassesr#†r$…r%r&}r'(hh	]r(…r)Rr*h
hŒubhh‰XPseudor+†r,…r-r.}r/(hh	]r0…r1Rr2h
hŒubhh‰XLabelr3†r4…r5r6}r7(hh	]r8…r9Rr:h
hŒubhh‰hq†r;…r<r=}r>(hh	]r?…r@RrAh
hŒubhh‰XBuiltinrB†rC…rDrE}rF(hh	]rG(hh‰jBj+‡rH…rIrJ}rK(hh	]rL…rMRrNh
jEubhh‰jBXTyperO‡rP…rQrR}rS(hh	]rT…rURrVh
jEube…rWRrXh
hŒj+jJjOjRubhh‰XFieldrY†rZ…r[r\}r](hh	]r^…r_Rr`h
hŒubhh‰XOtherra†rb…rcrd}re(hh	]rfhh‰jaXMemberrg‡rh…rirj}rk(hh	]rl…rmRrnh
jduba…roRrph
hŒjgjjubhh‰XFunctionrq†rr…rsrt}ru(hh	]rvhh‰jqhâ‡rw…rxry}rz(hh	]r{…r|Rr}h
jtuba…r~Rrh
hŒhâjyubhh‰jO†r€…rr‚}rƒ(hh	]r„…r…Rr†h
hŒubhh‰XConstantr‡†rˆ…r‰rŠ}r‹(hh	]rŒ…rRrŽh
hŒube…rRrh
hfhühÿjBjEh¶h¹j‡jŠh®h±h—hšh¦h©jqjtjjj3j6jjjajdhh’hÍhÐjYj\jjj+j.hqj=j#j&jOj‚ubhXLiteralr‘…r’…r“r”}r•(hh	]r–(hj‘ja†r—…r˜r™}rš(hh	]r›…rœRrh
j”ubhj‘XCharrž†rŸ…r r¡}r¢(hh	]r£…r¤Rr¥h
j”ubhj‘XDater¦†r§…r¨r©}rª(hh	]r«…r¬Rr­h
j”ubhj‘XScalarr®†r¯…r°r±}r²(hh	]r³hj‘j®XPlainr´‡rµ…r¶r·}r¸(hh	]r¹…rºRr»h
j±uba…r¼Rr½h
j”j´j·ubhj‘XStringr¾†r¿…rÀrÁ}rÂ(hh	]rÃ(hj‘j¾XInterpolrćrÅ…rƁrÇ}rÈ(hh	]rÉ…rÊRrËh
jÁubhj‘j¾X	DelimeterṙrÍ…r΁rÏ}rÐ(hh	]rÑ…rÒRrÓh
jÁubhj‘j¾jž‡rÔ…rՁrÖ}r×(hh	]rØ…rÙRrÚh
jÁubhj‘j¾j‡rÛ…r܁rÝ}rÞ(hh	]rß…ràRráh
jÁubhj‘j¾h‡râ…rãrä}rå(hh	]ræ…rçRrèh
jÁubhj‘j¾ja‡ré…rêrë}rì(hh	]rí…rîRrïh
jÁubhj‘j¾XBacktickrð‡rñ…ròró}rô(hh	]rõ…röRr÷h
jÁubhj‘j¾hi‡rø…rùrú}rû(hh	]rü…rýRrþh
jÁubhj‘j¾XRegexrÿ‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾XMomentr‡r…r	r
}r(hh	]r…r
Rrh
jÁubhj‘j¾XBooleanr‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾X	Characterr‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾X	Delimiterr‡r …r!r"}r#(hh	]r$…r%Rr&h
jÁubhj‘j¾h3‡r'…r(r)}r*(hh	]r+…r,Rr-h
jÁubhj‘j¾h‰‡r.…r/r0}r1(hh	]r2…r3Rr4h
jÁubhj‘j¾XAffixr5‡r6…r7r8}r9(hh	]r:…r;Rr<h
jÁubhj‘j¾XHeredocr=‡r>…r?r@}rA(hh	]rB…rCRrDh
jÁubhj‘j¾XDoublerE‡rF…rGrH}rI(hh	]rJ…rKRrLh
jÁubhj‘j¾XInterprM‡rN…rOrP}rQ(hh	]rR…rSRrTh
jÁubhj‘j¾XAtomrU‡rV…rWrX}rY(hh	]rZ…r[Rr\h
jÁube…r]Rr^h
j”j5j8jðjójžjÖjj"h3j)jEjHhijúj=j@jÄjÇjajëjÿjhjäjjÝjjjj
jMjPjjjÌjÏjUjXh‰j0ubhj‘XNumberr_†r`…rarb}rc(hh	]rd(hj‘j_XFloatre‡rf…rgrh}ri(hh	]rj…rkRrlh
jbubhj‘j_XDecrm‡rn…rorp}rq(hh	]rr…rsRrth
jbubhj‘j_XRadixru‡rv…rwrx}ry(hh	]rz…r{Rr|h
jbubhj‘j_XOctr}‡r~…rr€}r(hh	]r‚…rƒRr„h
jbubhj‘j_XBinr…‡r†…r‡rˆ}r‰(hh	]rŠ…r‹RrŒh
jbubhj‘j_hü‡r…rށr}r(hh	]r‘…r’Rr“h
jbubhj‘j_XHexr”‡r•…r–r—}r˜(hh	]r™…ršRr›h
jbubhj‘j_XIntegerrœ‡r…ržrŸ}r (hh	]r¡h(j‘j_jœXLongr¢tr£…r¤r¥}r¦(hh	]r§…r¨Rr©h
jŸuba…rªRr«h
jbj¢j¥ubhj‘j_XDecimalr¬‡r­…r®r¯}r°(hh	]r±…r²Rr³h
jbube…r´Rrµh
j”j…jˆjejhj”j—jœjŸj}j€jujxhüjj¬j¯jmjpube…r¶Rr·h
hfj¾jÁj_jbj¦j©j®j±jaj™jžj¡ubhXGenericr¸…r¹…rºr»}r¼(hh	]r½(hj¸XErrorr¾†r¿…rÀrÁ}rÂ(hh	]rÃ…rÄRrÅh
j»ubhj¸X
SubheadingrƆrÇ…rȁrÉ}rÊ(hh	]rË…rÌRrÍh
j»ubhj¸X	TracebackrΆrÏ…rЁrÑ}rÒ(hh	]rÓ…rÔRrÕh
j»ubhj¸XOutputrÖ†r×…r؁rÙ}rÚ(hh	]rÛ…rÜRrÝh
j»ubhj¸XPromptrÞ†rß…ràrá}râ(hh	]rã…räRråh
j»ubhj¸XDeletedræ†rç…rèré}rê(hh	]rë…rìRríh
j»ubhj¸XInsertedrî†rï…rðrñ}rò(hh	]ró…rôRrõh
j»ubhj¸XHeadingrö†r÷…rørù}rú(hh	]rû…rüRrýh
j»ubhj¸XStrongrþ†rÿ…rr}r(hh	]r…rRrh
j»ubhj¸XEmphr†r…rr	}r
(hh	]r…rRr
h
j»ube…rRrh
hfjæjéjj	j¾jÁjöjùjîjñjÖjÙjÞjájþjjÆjÉjÎjÑubhj¾…r…rr}r(hh	]r…rRrh
hfubhXKeywordr…r…rr}r(hh	]r(hjh†r…rr}r (hh	]r!…r"Rr#h
jubhjj†r$…r%r&}r'(hh	]r(…r)Rr*h
jubhjjO†r+…r,r-}r.(hh	]r/…r0Rr1h
jubhjXPreProcr2†r3…r4r5}r6(hh	]r7…r8Rr9h
jubhjXControlr:†r;…r<r=}r>(hh	]r?…r@RrAh
jubhjj‡†rB…rCrD}rE(hh	]rF…rGRrHh
jubhjj†rI…rJrK}rL(hh	]rM…rNRrOh
jubhjj+†rP…rQrR}rS(hh	]rT…rURrVh
jubhjXDeclarationrW†rX…rYrZ}r[(hh	]r\…r]Rr^h
jubhjXReservedr_†r`…rarb}rc(hh	]rd…reRrfh
jube…rgRrhh
hfj‡jDjWjZjjKj+jRj_jbjOj-j:j=jj&j2j5hjubhja…ri…rjrk}rl(hh	]rm…rnRroh
hfubhXTextrp…rq…rrrs}rt(hh	]ru(hjpXRootrv†rw…rxry}rz(hh	]r{…r|Rr}h
jsubhjpj†r~…rr€}r(hh	]r‚…rƒRr„h
jsubhjpXRagr…†r†…r‡rˆ}r‰(hh	]rŠ…r‹RrŒh
jsubhjpX
Whitespacer†rŽ…rr}r‘(hh	]r’…r“Rr”h
jsubhjpXBeerr•†r–…r—r˜}r™(hh	]rš…r›Rrœh
jsubhjpXPunctuationr†rž…rŸr }r¡(hh	]r¢…r£Rr¤h
jsube…r¥Rr¦h
hfjjjj€jj jvjyj•j˜j…jˆubhhj…r§…r¨r©}rª(hh	]r«hjX	Indicatorr¬†r­…r®r¯}r°(hh	]r±…r²Rr³h
j©uba…r´Rrµh
hfj¬j¯ube…r¶Rr·jpjshihlj¾jjajkjjh‰hŒj‘j”jj©hqhthhj¸j»XTokenr¸hfj¾jÁj_jbubh#h&hChFhhhShVhhh[h^h;h>h+h.h3h6hhhKhNububX+;;; example.xtm -- Extempore code examples r¹†rºjsX

r»†r¼hX%;; Author: Ben Swift, Andrew Sorensenr½†r¾jsX
r¿†rÀhX;; Keywords: extemporerÁ†rÂjsX

rÆrÄhX;;; Commentary:rņrÆjsX



rdžrÈhX	;;; Code:rɆrÊjsX

rˆrÌhX;; bit twiddlingr͆rÎjsX

rφrÐj©X(rцrÒhÐXxtmtestrÓ†rÔjsX rÕ†rÖhtX'r׆rØj©jцrÙjX	bind-funcrÚ†rÛjsjÕ†rÜjtXtest_bit_twiddle_1r݆rÞjsX

            r߆ràj©jцrájXlambdarâ†rãjsjÕ†räj©jцråj©X)ræ†rçjsX
              rè†réj©jцrêhÐXbitwise-andrë†rìjsjÕ†ríjŸX65535rî†rïjsjÕ†rðjŸX255rñ†ròjsjÕ†rójŸX15rô†rõjsjÕ†röjŸX1r÷†røj©jæ†rùj©jæ†rúj©jæ†rûjsX

         rü†rýj©jцrþhÐXtest_bit_twiddle_1rÿ†rj©jæ†rjsjÕ†rjŸj÷†rj©jæ†rjsX

r†rj©jцrhÐXxtmtestr†r	jsjÕ†r
htj׆rj©jцrjX	bind-funcr
†rjsjÕ†rjtXtest_bit_twiddle_2r†rjsX

            r†rj©jцrjXlambdar†rjsjÕ†rj©jцrj©jæ†rjsX
              r†rj©jцrhÐXbitwise-notr†rjsjÕ†rjŸX-1r †r!j©jæ†r"j©jæ†r#j©jæ†r$jsX

         r%†r&j©jцr'hÐXtest_bit_twiddle_2r(†r)j©jæ†r*jsjÕ†r+jŸX0r,†r-j©jæ†r.jsX

r/†r0j©jцr1hÐXxtmtestr2†r3jsjÕ†r4htj׆r5j©jцr6jX	bind-funcr7†r8jsjÕ†r9jtXtest_bit_twiddle_3r:†r;jsX

            r<†r=j©jцr>jXlambdar?†r@jsjÕ†rAj©jцrBj©jæ†rCjsX
              rD†rEj©jцrFhÐXbitwise-notrG†rHjsjÕ†rIjŸj,†rJj©jæ†rKj©jæ†rLj©jæ†rMjsX

         rN†rOj©jцrPhÐXtest_bit_twiddle_3rQ†rRj©jæ†rSjsjÕ†rTjŸX-1rU†rVj©jæ†rWjsX

rX†rYj©jцrZhÐXxtmtestr[†r\jsjÕ†r]htj׆r^j©jцr_jX	bind-funcr`†rajsjÕ†rbjtXtest_bit_twiddle_4rc†rdjsX

            re†rfj©jцrgjXlambdarh†rijsjÕ†rjj©jцrkj©jæ†rljsX
              rm†rnj©jцrohÐXbitwise-shift-rightrp†rqjsjÕ†rrjŸX65535rs†rtjsjÕ†rujŸX8rv†rwj©jæ†rxjsX
              ry†rzj©jцr{hÐXbitwise-shift-rightr|†r}jsjÕ†r~jŸX65535r†r€jsjÕ†rjŸX4r‚†rƒjsjÕ†r„jŸj‚†r…j©jæ†r†j©jæ†r‡j©jæ†rˆjsX

         r‰†rŠj©jцr‹hÐXtest_bit_twiddle_4rŒ†rj©jæ†rŽjsjÕ†rjŸX255r†r‘j©jæ†r’jsX

r“†r”j©jцr•hÐXxtmtestr–†r—jsjÕ†r˜htj׆r™j©jцršjX	bind-funcr›†rœjsjÕ†rjtXtest_bit_twiddle_5rž†rŸjsX

            r †r¡j©jцr¢jXlambdar£†r¤jsjÕ†r¥j©jцr¦j©jæ†r§jsX
              r¨†r©j©jцrªhÐXbitwise-shift-leftr«†r¬jsjÕ†r­j©jцr®hÐXbitwise-shift-rightr¯†r°jsjÕ†r±jŸX65535r²†r³jsjÕ†r´jŸjv†rµj©jæ†r¶jsjÕ†r·jŸj‚†r¸jsjÕ†r¹jŸj‚†rºj©jæ†r»j©jæ†r¼j©jæ†r½jsX

         r¾†r¿j©jцrÀhÐXtest_bit_twiddle_5rÁ†rÂj©jæ†rÃjsjÕ†rÄjŸX65280rņrÆj©jæ†rÇjsX

rȆrÉj©jцrÊhÐXxtmtestrˆrÌjsjÕ†rÍhtj׆rÎj©jцrÏjX	bind-funcrІrÑjsjÕ†rÒjtXtest_bit_twiddle_6rÓ†rÔjsX

            rÕ†rÖj©jцr×jXlambdar؆rÙjsjÕ†rÚj©jцrÛj©jæ†rÜjsX
              r݆rÞj©jцrßhÐXbitwise-andrà†rájsjÕ†râj©jцrãhÐX
bitwise-orrä†råjsjÕ†ræj©jцrçhÐXbitwise-eorrè†réjsjÕ†rêjŸX21844rë†rìjsjÕ†ríjŸX65534rî†rïj©jæ†rðjsjÕ†rñj©jцròhÐXbitwise-eorró†rôjsjÕ†rõjŸX43690rö†r÷jsjÕ†røjŸX65534rù†rúj©jæ†rûj©jæ†rüjsjÕ†rýjŸj÷†rþj©jæ†rÿj©jæ†rj©jæ†rjsX

         r†rj©jцrhÐXtest_bit_twiddle_6r†rj©jæ†rjsjÕ†rjŸj,†r	j©jæ†r
jsX

r†rhX.;; integer literals default to 64 bit integersr
†rjsj¿†rj©jцrhÐXxtmtestr†rjsjÕ†rhtj׆rj©jцrjX	bind-funcr†rjsjÕ†rjtXint-literal-testr†rjsX

            r†rj©jцrjXlambdar†rjsjÕ†r j©jцr!hÐXar"†r#j©jæ†r$jsX
              r%†r&j©jцr'jtX*r(†r)jsjÕ†r*hÐj"†r+jsjÕ†r,jŸX5r-†r.j©jæ†r/j©jæ†r0j©jæ†r1jsX

         r2†r3j©jцr4hÐXint-literal-testr5†r6jsjÕ†r7jŸX6r8†r9j©jæ†r:jsjÕ†r;jŸX30r<†r=j©jæ†r>jsX

r?†r@hX$;; float literals default to doublesrA†rBjsj¿†rCj©jцrDhÐXxtmtestrE†rFjsjÕ†rGhtj׆rHj©jцrIjX	bind-funcrJ†rKjsjÕ†rLjtXfloat-literal-testrM†rNjsX

            rO†rPj©jцrQjXlambdarR†rSjsjÕ†rTj©jцrUhÐj"†rVj©jæ†rWjsX
              rX†rYj©jцrZjtj(†r[jsjÕ†r\hÐj"†r]jsjÕ†r^jhX5.0r_†r`j©jæ†raj©jæ†rbj©jæ†rcjsX

         rd†rej©jцrfhÐXfloat-literal-testrg†rhjsjÕ†rijhX6.0rj†rkj©jæ†rljsjÕ†rmjhX30.0rn†roj©jæ†rpjsX

rq†rrhX0;; you are free to recompile an existing closurers†rtjsj¿†ruj©jцrvhÐXxtmtestrw†rxjsjÕ†ryhtj׆rzj©jцr{jX	bind-funcr|†r}jsjÕ†r~jtXint-literal-testr†r€jsX

            r†r‚j©jцrƒjXlambdar„†r…jsjÕ†r†j©jцr‡hÐj"†rˆj©jæ†r‰jsX
              rІr‹j©jцrŒjtX/r†rŽjsjÕ†rhÐj"†rjsjÕ†r‘jŸj-†r’j©jæ†r“j©jæ†r”j©jæ†r•jsX

         r–†r—j©jцr˜hÐXint-literal-testr™†ršjsjÕ†r›jŸX30rœ†rj©jæ†ržj©jæ†rŸjsX

r †r¡j©jцr¢hÐXxtmtestr£†r¤jsjÕ†r¥htj׆r¦j©jцr§jX	bind-funcr¨†r©jsjÕ†rªjtX
closure-test1r«†r¬jsX

            r­†r®j©jцr¯jXletr°†r±jsjÕ†r²j©jцr³j©jцr´hÐXpowerrµ†r¶jsjÕ†r·jŸj,†r¸j©jæ†r¹j©jæ†rºjsX
              r»†r¼j©jцr½jXlambdar¾†r¿jsjÕ†rÀj©jцrÁhÐXxr†rÃj©jæ†rÄjsX
                rņrÆj©jцrÇjXset!rȆrÉjsjÕ†rÊhÐXpowerrˆrÌjsjÕ†rÍj©jцrÎjtX+rφrÐjsjÕ†rÑhÐXpowerrÒ†rÓjsjÕ†rÔjŸj÷†rÕj©jæ†rÖj©jæ†r×jsjÕ†rØhX*;; set! for closure mutation as per schemerÙ†rÚjsX
                rÛ†rÜj©jцrÝjtj(†rÞjsjÕ†rßhÐj†ràjsjÕ†ráhÐXpowerrâ†rãj©jæ†räj©jæ†råj©jæ†ræj©jæ†rçjsX

         rè†réj©jцrêhÐX
closure-test1rë†rìjsjÕ†ríjŸX2rî†rïj©jæ†rðj©jæ†rñjsX

rò†rój©jцrôhÐXxtmtestrõ†röjsjÕ†r÷htj׆røj©jцrùjX	bind-funcrú†rûjsjÕ†rüjtXclosure-returns-closure-testrý†rþjsX

            rÿ†rj©jцrjXlambdar†rjsjÕ†rj©jцrj©jæ†rjsX
              r†rj©jцr	jXlambdar
†rjsjÕ†rj©jцr
hÐj†rj©jæ†rjsX
                r†rj©jцrjtj(†rjsjÕ†rhÐj†rjsjÕ†rjŸX3r†rj©jæ†rj©jæ†rj©jæ†rj©jæ†rjsX

         r†rj©jцrhÐXclosure-returns-closure-testr †r!j©jæ†r"j©jæ†r#jsX

r$†r%j©jцr&hÐXxtmtestr'†r(jsjÕ†r)htj׆r*j©jцr+jX	bind-funcr,†r-jsjÕ†r.jtXincrementer-test1r/†r0jsX

            r1†r2j©jцr3jXlambdar4†r5jsjÕ†r6j©jцr7hÐXir8†r9j-X:i64r:†r;j©jæ†r<jsX
              r=†r>j©jцr?jXlambdar@†rAjsjÕ†rBj©jцrChÐXincrrD†rEj©jæ†rFjsX
                rG†rHj©jцrIjXset!rJ†rKjsjÕ†rLhÐj8†rMjsjÕ†rNj©jцrOjtjφrPjsjÕ†rQhÐj8†rRjsjÕ†rShÐXincrrT†rUj©jæ†rVj©jæ†rWjsX
                rX†rYhÐj8†rZj©jæ†r[j©jæ†r\j©jæ†r]jsX

         r^†r_j©jцr`hÐXincrementer-test1ra†rbjsjÕ†rcjŸj,†rdj©jæ†rej©jæ†rfjsX

rg†rhj©jцrijXdefinerj†rkjsjÕ†rlhÐXmyfrm†rnjsjÕ†roj©jцrphÐXincrementer-test1rq†rrjsjÕ†rsjŸj,†rtj©jæ†ruj©jæ†rvjsX

rw†rxhX ;; so we need to type f properlyry†rzjsj¿†r{j©jцr|hÐXxtmtestr}†r~jsjÕ†rhtj׆r€j©jцrjX	bind-funcr‚†rƒjsjÕ†r„jtXincrementer-test2r…†r†jsX

            r‡†rˆj©jцr‰jXlambdarІr‹jsjÕ†rŒj©jцrhÐXfrކrj-X:[i64,i64]*r†r‘jsjÕ†r’hÐj†r“j©jæ†r”jsX
              r•†r–j©jцr—hÐjކr˜jsjÕ†r™hÐj†ršj©jæ†r›j©jæ†rœj©jæ†rjsX

         rž†rŸj©jцr hÐXincrementer-test2r¡†r¢jsjÕ†r£hÐXmyfr¤†r¥jsjÕ†r¦jŸj÷†r§j©jæ†r¨jsjÕ†r©jŸj÷†rªj©jæ†r«jsX

r¬†r­hX&;; and we can call my-in-maker-wrapperr®†r¯jsj¿†r°hX;; to appy myfr±†r²jsj¿†r³j©jцr´hÐXxtmtest-resultrµ†r¶jsjÕ†r·j©jцr¸hÐXincrementer-test2r¹†rºjsjÕ†r»hÐXmyfr¼†r½jsjÕ†r¾jŸj÷†r¿j©jæ†rÀjsjÕ†rÁjŸjî†rÂj©jæ†rÃjsj¿†rÄj©jцrÅhÐXxtmtest-resultrƆrÇjsjÕ†rÈj©jцrÉhÐXincrementer-test2rʆrËjsjÕ†rÌhÐXmyfr͆rÎjsjÕ†rÏjŸj÷†rÐj©jæ†rÑjsjÕ†rÒjŸj†rÓj©jæ†rÔjsj¿†rÕj©jцrÖhÐXxtmtest-resultr׆rØjsjÕ†rÙj©jцrÚhÐXincrementer-test2rÛ†rÜjsjÕ†rÝhÐXmyfrÞ†rßjsjÕ†ràjŸj÷†ráj©jæ†râjsjÕ†rãjŸj‚†räj©jæ†råjsX

ræ†rçhX0;; of course the wrapper is only required if yourè†réjsj¿†rêhX*;; need interaction with the scheme world.rë†rìjsj¿†ríhX0;; otherwise you just call my-inc-maker directlyrî†rïjsX

rð†rñhX%;; this avoids the wrapper completelyrò†rójsj¿†rôj©jцrõhÐXxtmteströ†r÷jsjÕ†røhtj׆rùj©jцrújX	bind-funcrû†rüjsjÕ†rýjtXincrementer-test3rþ†rÿjsX

            r†rj©jцrjXletr†rjsjÕ†rj©jцrj©jцrhÐjކrjsjÕ†r	j©jцr
hÐXincrementer-test1r†rjsjÕ†r
jŸj,†rj©jæ†rj©jæ†rj©jæ†rjsX
              r†rj©jцrjXlambdar†rjsjÕ†rj©jцrj©jæ†rjsX
                r†rj©jцrhÐjކrjsjÕ†rjŸj÷†rj©jæ†r j©jæ†r!j©jæ†r"j©jæ†r#jsX

         r$†r%j©jцr&hÐXincrementer-test3r'†r(j©jæ†r)jsjÕ†r*jŸj÷†r+j©jæ†r,jsX

r-†r.j©jцr/hÐXxtmtest-resultr0†r1jsjÕ†r2j©jцr3hÐXincrementer-test3r4†r5j©jæ†r6jsjÕ†r7jŸjî†r8j©jæ†r9jsj¿†r:j©jцr;hÐXxtmtest-resultr<†r=jsjÕ†r>j©jцr?hÐXincrementer-test3r@†rAj©jæ†rBjsjÕ†rCjŸj†rDj©jæ†rEjsX

rF†rGhX%;; hopefully you're getting the idea.rH†rIjsj¿†rJhX*;; note that once we've compiled somethingrK†rLjsj¿†rMhX$;; we can then use it any of our newrN†rOjsj¿†rPhX;; function definitions.rQ†rRjsX

rS†rThX;; do a little 16bit testrU†rVjsj¿†rWj©jцrXhÐXxtmtestrY†rZjsjÕ†r[htj׆r\j©jцr]jX	bind-funcr^†r_jsjÕ†r`jtXbitsize-sixteenra†rbjsX

            rc†rdj©jцrejXlambdarf†rgjsjÕ†rhj©jцrihÐj"†rjj-X:i16rk†rlj©jæ†rmjsX
              rn†roj©jцrphÐXdtoi16rq†rrjsjÕ†rsj©jцrtjtj(†rujsjÕ†rvj©jцrwhÐXi16todrx†ryjsjÕ†rzhÐj"†r{j©jæ†r|jsjÕ†r}jhX5.0r~†rj©jæ†r€j©jæ†rj©jæ†r‚j©jæ†rƒjsX

         r„†r…j©jцr†hÐXbitsize-sixteenr‡†rˆjsjÕ†r‰jŸj-†rŠj©jæ†r‹jsjÕ†rŒjŸX25r†rŽj©jæ†rjsX

r†r‘hX;; while loop testr’†r“jsX

r”†r•j©jцr–hÐXxtmtestr—†r˜jsjÕ†r™htj׆ršj©jцr›jX	bind-funcrœ†rjsjÕ†ržjtXtest_while_loop_1rŸ†r jsX

            r¡†r¢j©jцr£jXlambdar¤†r¥jsjÕ†r¦j©jцr§j©jæ†r¨jsX
              r©†rªj©jцr«jXletr¬†r­jsjÕ†r®j©jцr¯j©jцr°hÐXcountr±†r²jsjÕ†r³jŸj,†r´j©jæ†rµj©jæ†r¶jsX
                r·†r¸j©jцr¹hÐXwhilerº†r»jsjÕ†r¼j©jцr½jtX<r¾†r¿jsjÕ†rÀhÐXcountrÁ†rÂjsjÕ†rÃjŸj-†rÄj©jæ†rÅjsX
                  rƆrÇj©jцrÈjtXprintfrɆrÊjsjÕ†rËjÁX"count = %lld\n"r̆rÍjsjÕ†rÎhÐXcountrφrÐj©jæ†rÑjsX
                  rÒ†rÓj©jцrÔjXset!rÕ†rÖjsjÕ†r×hÐXcountr؆rÙjsjÕ†rÚj©jцrÛjtjφrÜjsjÕ†rÝhÐXcountrÞ†rßjsjÕ†ràjŸj÷†ráj©jæ†râj©jæ†rãj©jæ†räjsX
                rå†ræhÐXcountrç†rèj©jæ†réj©jæ†rêj©jæ†rëjsX

         rì†ríj©jцrîhÐXtest_while_loop_1rï†rðj©jæ†rñjsjÕ†ròjŸj-†rój©jæ†rôjsX

rõ†röhX7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r÷†røjsj¿†rùhX;;rú†rûjsj¿†rühX;; Closures can be recursiverý†rþjsj¿†rÿhX;;r†rjsX

r†rj©jцrhÐXxtmtestr†rjsjÕ†rhtj׆rj©jцr	jX	bind-funcr
†rjsjÕ†rjtXrecursive-closure-testr
†rjsX

            r†rj©jцrjXlambdar†rjsjÕ†rj©jцrhÐj"†rj©jæ†rjsX
              r†rj©jцrjXifr†rjsjÕ†rj©jцrjtj¾†rjsjÕ†r hÐj"†r!jsjÕ†r"jŸj÷†r#j©jæ†r$jsX
                  r%†r&j©jцr'jtXprintfr(†r)jsjÕ†r*jÁX"done\n"r+†r,j©jæ†r-jsX
                  r.†r/j©jцr0jXbeginr1†r2jsjÕ†r3j©jцr4jtXprintfr5†r6jsjÕ†r7jÁX"a: %lld\n"r8†r9jsjÕ†r:hÐj"†r;j©jæ†r<jsX
                         r=†r>j©jцr?hÐXrecursive-closure-testr@†rAjsjÕ†rBj©jцrCjtX-rD†rEjsjÕ†rFhÐj"†rGjsjÕ†rHjŸj÷†rIj©jæ†rJj©jæ†rKj©jæ†rLj©jæ†rMj©jæ†rNj©jæ†rOjsX

         rP†rQj©jцrRhÐXrecursive-closure-testrS†rTjsjÕ†rUjŸj†rVj©jæ†rWj©jæ†rXjsX

rY†rZhX;; check TAIL OPTIMIZATIONr[†r\jsj¿†r]hX';; if there is no tail call optimiationr^†r_jsj¿†r`hX%;; in place then this should blow thera†rbjsj¿†rchX;; stack and crash the testrd†rejsX

rf†rghX4;; CANNOT RUN THIS TEST ON WINDOWS (i.e. no salloc)!rh†rijsj¿†rjj©jцrkjXifrl†rmjsjÕ†rnj©jцrojtXnotrp†rqjsjÕ†rrj©jцrsjtXequal?rt†rujsjÕ†rvj©jцrwhÐXsys:platformrx†ryj©jæ†rzjsjÕ†r{jÁX	"Windows"r|†r}j©jæ†r~j©jæ†rjsX
    r€†rj©jцr‚hÐXxtmtestrƒ†r„jsjÕ†r…htj׆r†j©jцr‡jX	bind-funcrˆ†r‰jsjÕ†rŠjtX
tail_opt_testr‹†rŒjsX
                r†rŽj©jцrjXlambdar†r‘jsjÕ†r’j©jцr“hÐXnr”†r•j-X:i64r–†r—j©jæ†r˜jsX
                  r™†ršj©jцr›jXletrœ†rjsjÕ†ržj©jцrŸj©jцr hÐj"†r¡j-X:float*r¢†r£jsjÕ†r¤j©jцr¥jtXsallocr¦†r§jsjÕ†r¨jŸX8000r©†rªj©jæ†r«j©jæ†r¬j©jæ†r­jsX
                    r®†r¯j©jцr°jXifr±†r²jsjÕ†r³j©jцr´jtX=rµ†r¶jsjÕ†r·hÐj”†r¸jsjÕ†r¹jŸj,†rºj©jæ†r»jsX
                        r¼†r½j©jцr¾jtXprintfr¿†rÀjsjÕ†rÁjÁX"tail opt test passed!\n"r†rÃj©jæ†rÄjsX
                        rņrÆj©jцrÇhÐX
tail_opt_testrȆrÉjsjÕ†rÊj©jцrËjtjD†rÌjsjÕ†rÍhÐj”†rÎjsjÕ†rÏjŸj÷†rÐj©jæ†rÑj©jæ†rÒj©jæ†rÓj©jæ†rÔj©jæ†rÕj©jæ†rÖjsX

             r׆rØj©jцrÙhÐX
tail_opt_testrÚ†rÛjsjÕ†rÜjŸX200r݆rÞj©jæ†rßj©jæ†ràj©jæ†rájsX
    
râ†rãj©jцräjtXprintlnrå†ræjsjÕ†rçjÝX'Arè†réjsjÕ†rêjÝX	'segfaultrë†rìjsjÕ†ríjÝX'hererî†rïjsjÕ†rðjÝX
'incidatesrñ†ròjsjÕ†rójÝX'thatrô†rõjsjÕ†röjÝX'tail-call-optimizationsr÷†røjsjÕ†rùjÝX'arerú†rûjsjÕ†rüjÝX'notrý†rþjsjÕ†rÿjÝX	'working!r	†r	j©jæ†r	jsX

r	†r	hX6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r	†r	jsj¿†r	hX;;r	†r		jsj¿†r
	e(hX;; some anon lambda testsr	†r	jsj¿†r
	hX;;r	†r	jsX

r	†r	j©jцr	hÐXxtmtestr	†r	jsjÕ†r	htj׆r	j©jцr	jX	bind-funcr	†r	jsjÕ†r	jtXinfer_lambdas_testr	†r	jsX

            r	†r	j©jцr	jXlambdar 	†r!	jsjÕ†r"	j©jцr#	j©jæ†r$	jsX
              r%	†r&	j©jцr'	jXletr(	†r)	jsjÕ†r*	j©jцr+	j©jцr,	hÐj"†r-	jsjÕ†r.	jŸj-†r/	j©jæ†r0	jsX
                    r1	†r2	j©jцr3	hÐXbr4	†r5	jsjÕ†r6	j©jцr7	jXlambdar8	†r9	jsjÕ†r:	j©jцr;	hÐj†r<	j©jæ†r=	jsjÕ†r>	j©jцr?	jtj(†r@	jsjÕ†rA	hÐj†rB	jsjÕ†rC	hÐj†rD	j©jæ†rE	j©jæ†rF	j©jæ†rG	jsX
                    rH	†rI	j©jцrJ	hÐXcrK	†rL	jsjÕ†rM	j©jцrN	jXlambdarO	†rP	jsjÕ†rQ	j©jцrR	hÐXyrS	†rT	j©jæ†rU	jsjÕ†rV	j©jцrW	jtj(†rX	jsjÕ†rY	hÐjS	†rZ	jsjÕ†r[	hÐjS	†r\	j©jæ†r]	j©jæ†r^	j©jæ†r_	j©jæ†r`	jsX          
                ra	†rb	j©jцrc	hÐjK	†rd	jsjÕ†re	j©jцrf	hÐj4	†rg	jsjÕ†rh	hÐj"†ri	j©jæ†rj	j©jæ†rk	j©jæ†rl	j©jæ†rm	j©jæ†rn	jsX

         ro	†rp	j©jцrq	hÐXinfer_lambdas_testrr	†rs	j©jæ†rt	j©jæ†ru	jsX


rv	†rw	hX8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;rx	†ry	jsj¿†rz	hX;; a simple tuple exampler{	†r|	jsj¿†r}	hX;;r~	†r	jsj¿†r€	hX3;; tuple types are represented as <type,type,type>*r	†r‚	jsj¿†rƒ	hX;;r„	†r…	jsX

r†	†r‡	hX!;; make and return a simple tuplerˆ	†r‰	jsj¿†rŠ	j©jцr‹	hÐXxtmtestrŒ	†r	jsjÕ†rŽ	htj׆r	j©jцr	jX	bind-funcr‘	†r’	jsjÕ†r“	jtXtuple-test1r”	†r•	jsX

            r–	†r—	j©jцr˜	jXlambdar™	†rš	jsjÕ†r›	j©jцrœ	j©jæ†r	jsX
              rž	†rŸ	j©jцr 	jXletr¡	†r¢	jsjÕ†r£	j©jцr¤	j©jцr¥	hÐXtr¦	†r§	j-X:<i64,double,i32>*r¨	†r©	jsjÕ†rª	j©jцr«	jtXallocr¬	†r­	j©jæ†r®	j©jæ†r¯	j©jæ†r°	jsX
                r±	†r²	hÐj¦	†r³	j©jæ†r´	j©jæ†rµ	j©jæ†r¶	jsX

         r·	†r¸	j©jцr¹	hÐXtuple-test1rº	†r»	j©jæ†r¼	j©jæ†r½	jsX

r¾	†r¿	hX%;; logview shows [<i64,double,i32>*]*rÀ	†rÁ	jsj¿†rÂ	hX);; i.e. a closure that takes no argumentsrÃ	†rÄ	jsj¿†rÅ	hX*;; and returns the tuple <i64,double,i32>*rÆ	†rÇ	jsX


rÈ	†rÉ	hX;; here's another tuple examplerÊ	†rË	jsj¿†rÌ	hX0;; note that my-test-7's return type is inferredrÍ	†rÎ	jsj¿†rÏ	hX;; by the tuple-reference indexrÐ	†rÑ	jsj¿†rÒ	hX!;; (i.e. i64 being tuple index 0)rÓ	†rÔ	jsj¿†rÕ	j©jцrÖ	hÐXxtmtestr×	†rØ	jsjÕ†rÙ	htj׆rÚ	j©jцrÛ	jX	bind-funcrÜ	†rÝ	jsjÕ†rÞ	jtXtuple-test2rß	†rà	jsX

            rá	†râ	j©jцrã	jXlambdarä	†rå	jsjÕ†ræ	j©jцrç	j©jæ†rè	jsX
              ré	†rê	j©jцrë	jXletrì	†rí	jsjÕ†rî	j©jцrï	j©jцrð	hÐj"†rñ	j-X:<i64,double>*rò	†ró	jsjÕ†rô	j©jцrõ	jtXallocrö	†r÷	j©jæ†rø	j©jæ†rù	jsjÕ†rú	hX&; returns pointer to type <i64,double>rû	†rü	jsX
                    rý	†rþ	j©jцrÿ	hÐj4	†r
jsjÕ†r
jŸX37r
†r
j©jæ†r
jsX
                    r
†r
j©jцr
hÐjK	†r
jsjÕ†r	
jhX6.4r

†r
j©jæ†r
j©jæ†r
jsX
                r
†r
j©jцr
jtX
tuple-set!r
†r
jsjÕ†r
hÐj"†r
jsjÕ†r
jŸj,†r
jsjÕ†r
hÐj4	†r
j©jæ†r
jsjÕ†r
hX;; set i64 to 64r
†r
jsX
                r
†r
j©jцr
jtXtset!r 
†r!
jsjÕ†r"
hÐj"†r#
jsjÕ†r$
jŸj÷†r%
jsjÕ†r&
hÐjK	†r'
j©jæ†r(
jsjÕ†r)
hX7;; set double to 6.4 - tset! is an alias for tuple-set!r*
†r+
jsX
                r,
†r-
j©jцr.
jtXprintfr/
†r0
jsjÕ†r1
jÁX"tuple:1 %lld::%f\n"r2
†r3
jsjÕ†r4
j©jцr5
jtX	tuple-refr6
†r7
jsjÕ†r8
hÐj"†r9
jsjÕ†r:
jŸj,†r;
j©jæ†r<
jsjÕ†r=
j©jцr>
jtXtrefr?
†r@
jsjÕ†rA
hÐj"†rB
jsjÕ†rC
jŸj÷†rD
j©jæ†rE
j©jæ†rF
jsX
                rG
†rH
hX7;; we can fill a tuple in a single call by using tfill!rI
†rJ
jsX
                rK
†rL
j©jцrM
jtXtfill!rN
†rO
jsjÕ†rP
hÐj"†rQ
jsjÕ†rR
jŸX77rS
†rT
jsjÕ†rU
jhX77.7rV
†rW
j©jæ†rX
jsX
                rY
†rZ
j©jцr[
jtXprintfr\
†r]
jsjÕ†r^
jÁX"tuple:2 %lld::%f\n"r_
†r`
jsjÕ†ra
j©jцrb
jtX	tuple-refrc
†rd
jsjÕ†re
hÐj"†rf
jsjÕ†rg
jŸj,†rh
j©jæ†ri
jsjÕ†rj
j©jцrk
jtX	tuple-refrl
†rm
jsjÕ†rn
hÐj"†ro
jsjÕ†rp
jŸj÷†rq
j©jæ†rr
j©jæ†rs
jsX
                rt
†ru
j©jцrv
jtX	tuple-refrw
†rx
jsjÕ†ry
hÐj"†rz
jsjÕ†r{
jŸj,†r|
j©jæ†r}
j©jæ†r~
j©jæ†r
j©jæ†r€
jsX

         r
†r‚
j©jцrƒ
hÐXtuple-test2r„
†r…
j©jæ†r†
jsjÕ†r‡
jŸX77rˆ
†r‰
j©jæ†rŠ
jsX

r‹
†rŒ
hX$;; return first element which is i64r
†rŽ
jsj¿†r
hX ;; should be 64 as we return ther
†r‘
jsj¿†r’
hX;; first element of the tupler“
†r”
jsj¿†r•
hX;; (println (my-test-7)) ; 77r–
†r—
jsX


r˜
†r™
hX";; tbind binds variables to valuesrš
†r›
jsj¿†rœ
hX;; based on tuple structurer
†rž
jsj¿†rŸ
hX%;; _ (underscore) means don't attemptr 
†r¡
jsj¿†r¢
hX$;; to match against this position inr£
†r¤
jsj¿†r¥
hX;; the tuple (i.e. skip)r¦
†r§
jsj¿†r¨
j©jцr©
hÐXxtmtestrª
†r«
jsjÕ†r¬
htj׆r­
j©jцr®
jX	bind-funcr¯
†r°
jsjÕ†r±
jtXtuple-bind-testr²
†r³
jsX

            r´
†rµ
j©jцr¶
jXlambdar·
†r¸
jsjÕ†r¹
j©jцrº
j©jæ†r»
jsX
              r¼
†r½
j©jцr¾
jXletr¿
†rÀ
jsjÕ†rÁ
j©jцrÂ
j©jцrÃ
hÐXt1rÄ
†rÅ
j-X!:<i32,float,<i32,float>*,double>*rÆ
†rÇ
jsjÕ†rÈ
j©jцrÉ
jtXallocrÊ
†rË
j©jæ†rÌ
j©jæ†rÍ
jsX
                    rÎ
†rÏ
j©jцrÐ
hÐXt2rÑ
†rÒ
j-X
:<i32,float>*rÓ
†rÔ
jsjÕ†rÕ
j©jцrÖ
jtXallocr×
†rØ
j©jæ†rÙ
j©jæ†rÚ
jsX
                    rÛ
†rÜ
j©jцrÝ
hÐj"†rÞ
jsjÕ†rß
jŸj,†rà
j©jæ†rá
jsjÕ†râ
j©jцrã
hÐj4	†rä
j-X:floatrå
†ræ
jsjÕ†rç
jhX0.0rè
†ré
j©jæ†rê
jsjÕ†rë
j©jцrì
hÐjK	†rí
jsjÕ†rî
jhX0.0rï
†rð
j©jæ†rñ
j©jæ†rò
jsX
                ró
†rô
j©jцrõ
jtXtfill!rö
†r÷
jsjÕ†rø
hÐXt2rù
†rú
jsjÕ†rû
jŸj†rü
jsjÕ†rý
jhX3.3rþ
†rÿ
j©jæ†rjsX
                r†rj©jцrjtXtfill!r†rjsjÕ†rhÐXt1r†rjsjÕ†r	jŸj÷†r
jsjÕ†rjhX2.0r†r
jsjÕ†rhÐXt2r†rjsjÕ†rjhX4.0r†rj©jæ†rjsX
                r†rj©jцrjtXtbindr†rjsjÕ†rhÐXt1r†rjsjÕ†rhÐj"†rjsjÕ†rhÐj4	†r jsjÕ†r!hÐX_r"†r#jsjÕ†r$hÐjK	†r%j©jæ†r&jsX
                r'†r(hÐjK	†r)j©jæ†r*j©jæ†r+j©jæ†r,jsX

         r-†r.j©jцr/hÐXtuple-bind-testr0†r1j©jæ†r2jsjÕ†r3jhX4.0r4†r5j©jæ†r6jsX


r7†r8hX1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r9†r:jsj¿†r;hX!;; some array code with *casting*r<†r=jsj¿†r>hX;; this function returns voidr?†r@jsj¿†rAj©jцrBhÐXxtmtestrC†rDjsjÕ†rEhtj׆rFj©jцrGjX	bind-funcrH†rIjsjÕ†rJjtXarray-test1rK†rLjsX

            rM†rNj©jцrOjXlambdarP†rQjsjÕ†rRj©jцrSj©jæ†rTjsX
              rU†rVj©jцrWjXletrX†rYjsjÕ†rZj©jцr[j©jцr\hÐXv1r]†r^j-X:|5,float|*r_†r`jsjÕ†raj©jцrbjtXallocrc†rdj©jæ†rej©jæ†rfjsX
                    rg†rhj©jцrihÐXv2rj†rkj-X:|5,float|*rl†rmjsjÕ†rnj©jцrojtXallocrp†rqj©jæ†rrj©jæ†rsjsX
                    rt†ruj©jцrvhÐj8†rwjsjÕ†rxjŸj,†ryj©jæ†rzjsX
                    r{†r|j©jцr}hÐXkr~†rjsjÕ†r€jŸj,†rj©jæ†r‚j©jæ†rƒjsX
                r„†r…j©jцr†jXdotimesr‡†rˆjsjÕ†r‰j©jцrŠhÐj8†r‹jsjÕ†rŒjŸj-†rj©jæ†rŽjsX
                  r†rhX/;; random returns double so "truncate" to floatr‘†r’jsX
                  r“†r”hX;; which is what v expectsr•†r–jsX
                  r—†r˜j©jцr™jtX
array-set!rš†r›jsjÕ†rœhÐXv1r†ržjsjÕ†rŸhÐj8†r jsjÕ†r¡j©jцr¢jtXdtofr£†r¤jsjÕ†r¥j©jцr¦jtXrandomr§†r¨j©jæ†r©j©jæ†rªj©jæ†r«j©jæ†r¬jsX
                r­†r®hX2;; we can use the afill! function to fill an arrayr¯†r°jsX
                r±†r²j©jцr³jtXafill!r´†rµjsjÕ†r¶hÐXv2r·†r¸jsjÕ†r¹jhX1.1rº†r»jsjÕ†r¼jhX2.2r½†r¾jsjÕ†r¿jhX3.3rÀ†rÁjsjÕ†rÂjhX4.4rÆrÄjsjÕ†rÅjhX5.5rƆrÇj©jæ†rÈjsX
                rɆrÊj©jцrËjXdotimesr̆rÍjsjÕ†rÎj©jцrÏhÐj~†rÐjsjÕ†rÑjŸj-†rÒj©jæ†rÓjsX
                  rÔ†rÕhX+;; unfortunately printf doesn't like floatsrÖ†r×jsX
                  r؆rÙhX;; so back to double for us :(rÚ†rÛjsX
                  r܆rÝj©jцrÞjtXprintfr߆ràjsjÕ†rájÁX"val: %lld::%f::%f\n"râ†rãjsjÕ†rähÐj~†råjsX
                          ræ†rçj©jцrèjtXftodré†rêjsjÕ†rëj©jцrìjtX	array-refrí†rîjsjÕ†rïhÐXv1rð†rñjsjÕ†ròhÐj~†rój©jæ†rôj©jæ†rõjsX
                          rö†r÷j©jцrøjtXftodrù†rújsjÕ†rûj©jцrüjtXarefrý†rþjsjÕ†rÿhÐXv2r†rjsjÕ†rhÐj~†rj©jæ†rj©jæ†rj©jæ†rj©jæ†rj©jæ†rj©jæ†r	j©jæ†r
jsX

         r†rj©jцr
hÐXarray-test1r†rj©jæ†rj©jæ†rjsX

r†rhX0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r†rjsj¿†rhX;; some crazy array code withr†rjsj¿†rhX;; closures and arraysr†rjsj¿†rhX';; try to figure out what this all doesr†rjsj¿†rhX;;r †r!jsj¿†r"hX#;; this example uses the array typer#†r$jsj¿†r%hX$;; the pretty print for this type isr&†r'jsj¿†r(hX";; |num,type| num elements of typer)†r*jsj¿†r+hX!;; |5,i64| is an array of 5 x i64r,†r-jsj¿†r.hX;;r/†r0jsj¿†r1hX!;; An array is not a pointer typer2†r3jsj¿†r4hX);; i.e. |5,i64| cannot be bitcast to i64*r5†r6jsj¿†r7hX;;r8†r9jsj¿†r:hX$;; However an array can be a pointerr;†r<jsj¿†r=hX';; i.e. |5,i64|* can be bitcast to i64*r>†r?jsj¿†r@hX ;; i.e. |5,i64|** to i64** etc..rA†rBjsj¿†rChX;;rD†rEjsj¿†rFhX+;; make-array returns a pointer to an arrayrG†rHjsj¿†rIhX0;; i.e. (make-array 5 i64) returns type |5,i64|*rJ†rKjsj¿†rLhX;;rM†rNjsj¿†rOhX*;; aref (array-ref) and aset! (array-set!)rP†rQjsj¿†rRhX0;; can operate with either pointers to arrays orrS†rTjsj¿†rUhX;; standard pointers.rV†rWjsj¿†rXhX;;rY†rZjsj¿†r[hX*;; in other words aref and aset! are happyr\†r]jsj¿†r^hX';; to work with either i64* or |5,i64|*r_†r`jsX

ra†rbj©jцrcjX	bind-funcrd†rejsjÕ†rfjtXarray-test2rg†rhjsX
   ri†rjj©jцrkjXlambdarl†rmjsjÕ†rnj©jцrohÐXvrp†rqj-X	:|5,i64|*rr†rsj©jæ†rtjsX
      ru†rvj©jцrwjXletrx†ryjsjÕ†rzj©jцr{j©jцr|hÐjކr}jsjÕ†r~j©jцrjXlambdar€†rjsjÕ†r‚j©jцrƒhÐj†r„j©jæ†r…jsX
		  r††r‡j©jцrˆjtj(†r‰jsjÕ†rŠj©jцr‹jtX	array-refrŒ†rjsjÕ†rŽhÐjp†rjsjÕ†rjŸjî†r‘j©jæ†r’jsjÕ†r“hÐj†r”j©jæ†r•j©jæ†r–j©jæ†r—j©jæ†r˜jsX
	r™†ršhÐjކr›j©jæ†rœj©jæ†rj©jæ†ržjsX

rŸ†r j©jцr¡jX	bind-funcr¢†r£jsjÕ†r¤jtXarray-test3r¥†r¦jsX
  r§†r¨j©jцr©jXlambdarª†r«jsjÕ†r¬j©jцr­hÐjp†r®j-X:|5,[i64,i64]*|*r¯†r°j©jæ†r±jsX
    r²†r³j©jцr´jXletrµ†r¶jsjÕ†r·j©jцr¸j©jцr¹hÐXffrº†r»jsjÕ†r¼j©jцr½jtXarefr¾†r¿jsjÕ†rÀhÐjp†rÁjsjÕ†rÂjŸj,†rÃj©jæ†rÄj©jæ†rÅj©jæ†rÆjsjÕ†rÇhX; aref alias for array-refrÈ†rÉjsX
      rÊ†rËj©jцrÌhÐXffrÍ†rÎjsjÕ†rÏjŸj-†rÐj©jæ†rÑj©jæ†rÒj©jæ†rÓj©jæ†rÔjsX

rÕ†rÖj©jцr×hÐXxtmtestrØ†rÙjsjÕ†rÚhtj׆rÛj©jцrÜjX	bind-funcrÝ†rÞjsjÕ†rßjtXarray-test4rà†rájsX

            râ†rãj©jцräjXlambdarå†ræjsjÕ†rçj©jцrèj©jæ†réjsX
              rê†rëj©jцrìjXletrí†rîjsjÕ†rïj©jцrðj©jцrñhÐjp†ròj-X:|5,[i64,i64]*|*ró†rôjsjÕ†rõj©jцröjtXallocr÷†røj©jæ†rùj©jæ†rújsjÕ†rûhX;; make an array of closures!rü†rýjsX
                    rþ†rÿj©jцr
hÐXvvr
†r
j-X	:|5,i64|*r
†r
jsjÕ†r
j©jцr
jtXallocr
†r
j©jæ†r	
j©jæ†r

j©jæ†r
jsX
                r
†r

j©jцr
jtX
array-set!r
†r
jsjÕ†r
hÐXvvr
†r
jsjÕ†r
jŸjî†r
jsjÕ†r
jŸj†r
j©jæ†r
jsX
                r
†r
j©jцr
jtXaset!r
†r
jsjÕ†r
hÐjp†r
jsjÕ†r 
jŸj,†r!
jsjÕ†r"
j©jцr#
jtXarrayr$
†r%
hÐX-test2r&
†r'
jsjÕ†r(
hÐXvvr)
†r*
j©jæ†r+
j©jæ†r,
jsjÕ†r-
hX;; aset! alias for array-set!r.
†r/
jsX
                r0
†r1
j©jцr2
jtXarrayr3
†r4
hÐX-test3r5
†r6
jsjÕ†r7
hÐjp†r8
j©jæ†r9
j©jæ†r:
j©jæ†r;
j©jæ†r<
jsX

         r=
†r>
hX1;; try to guess the answer before you call this!!r?
†r@
jsX

         rA
†rB
j©jцrC
hÐXarray-test4rD
†rE
j©jæ†rF
j©jæ†rG
jsX

rH
†rI
hX1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;rJ
†rK
jsj¿†rL
hX;; some conditionalsrM
†rN
jsX

rO
†rP
j©jцrQ
hÐXxtmtestrR
†rS
jsjÕ†rT
htj׆rU
j©jцrV
jX	bind-funcrW
†rX
jsjÕ†rY
jtX
cond-test1rZ
†r[
jsX

            r\
†r]
j©jцr^
jXlambdar_
†r`
jsjÕ†ra
j©jцrb
hÐj†rc
j-X:i64rd
†re
jsjÕ†rf
hÐjS	†rg
j©jæ†rh
jsX
              ri
†rj
j©jцrk
jXifrl
†rm
jsjÕ†rn
j©jцro
jtX>rp
†rq
jsjÕ†rr
hÐj†rs
jsjÕ†rt
hÐjS	†ru
j©jæ†rv
jsX
                  rw
†rx
hÐj†ry
jsX
                  rz
†r{
hÐjS	†r|
j©jæ†r}
j©jæ†r~
j©jæ†r
jsX

         r€
†r
j©jцr‚
jXcondrƒ
†r„
hÐX-test1r…
†r†
jsjÕ†r‡
jŸX12rˆ
†r‰
jsjÕ†rŠ
jŸX13r‹
†rŒ
j©jæ†r
j©jæ†rŽ
jsX

r
†r
hX;; returns boolean truer‘
†r’
jsj¿†r“
j©jцr”
hÐXxtmtestr•
†r–
jsjÕ†r—
htj׆r˜
j©jцr™
jX	bind-funcrš
†r›
jsjÕ†rœ
jtX
cond-test2r
†rž
jsX

            rŸ
†r 
j©jцr¡
jXlambdar¢
†r£
jsjÕ†r¤
j©jцr¥
hÐj†r¦
j-X:i64r§
†r¨
j©jæ†r©
jsX
              rª
†r«
j©jцr¬
jXcondr­
†r®
jsjÕ†r¯
j©jцr°
j©jцr±
jtjµ†r²
jsjÕ†r³
hÐj†r´
jsjÕ†rµ
jŸj÷†r¶
j©jæ†r·
jsjÕ†r¸
j©jцr¹
jtXprintfrº
†r»
jsjÕ†r¼
jÁX"A\n"r½
†r¾
j©jæ†r¿
j©jæ†rÀ
jsX
                    rÁ
†rÂ
j©jцrÃ
j©jцrÄ
jtjµ†rÅ
jsjÕ†rÆ
hÐj†rÇ
jsjÕ†rÈ
jŸjî†rÉ
j©jæ†rÊ
jsjÕ†rË
j©jцrÌ
jtXprintfrÍ
†rÎ
jsjÕ†rÏ
jÁX"B\n"rÐ
†rÑ
j©jæ†rÒ
j©jæ†rÓ
jsX
                    rÔ
†rÕ
j©jцrÖ
j©jцr×
jtjµ†rØ
jsjÕ†rÙ
hÐj†rÚ
jsjÕ†rÛ
jŸj†rÜ
j©jæ†rÝ
jsjÕ†rÞ
j©jцrß
jtXprintfrà
†rá
jsjÕ†râ
jÁX"C\n"rã
†rä
j©jæ†rå
j©jæ†ræ
jsX
                    rç
†rè
j©jцré
j©jцrê
jtjµ†rë
jsjÕ†rì
hÐj†rí
jsjÕ†rî
jŸj‚†rï
j©jæ†rð
jsjÕ†rñ
j©jцrò
jtXprintfró
†rô
jsjÕ†rõ
jÁX"D\n"rö
†r÷
j©jæ†rø
j©jæ†rù
jsX
                    rú
†rû
j©jцrü
jXelserý
†rþ
jsjÕ†rÿ
j©jцrjtXprintfr†rjsjÕ†rjÁX"E\n"r†rj©jæ†rj©jæ†rj©jæ†rjsX
              r	†r
jŠX#tr†rj©jæ†r
j©jæ†rjsX

         r†rj©jцrjXcondr†rhÐX-test2r†rjsjÕ†rjŸj÷†rj©jæ†rj©jæ†rjsX

r†rhX1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r†rjsj¿†rhX$;; making a linear envelop generatorr†r jsj¿†r!hX";; for signal processing and aliker"†r#jsX

r$†r%j©jцr&jX	bind-funcr'†r(jsjÕ†r)jtXenvelope-segmentsr*†r+jsX
  r,†r-j©jцr.jXlambdar/†r0jsjÕ†r1j©jцr2hÐXpointsr3†r4j-X:double*r5†r6jsjÕ†r7hÐX
num-of-pointsr8†r9j-X:i64r:†r;j©jæ†r<jsX
    r=†r>j©jцr?jXletr@†rAjsjÕ†rBj©jцrCj©jцrDhÐXlinesrE†rFj-X:[double,double]**rG†rHjsjÕ†rIj©jцrJjtX
zone-allocrK†rLjsjÕ†rMhÐX
num-of-pointsrN†rOj©jæ†rPj©jæ†rQjsX
	  rR†rSe(j©jцrThÐj~†rUjsjÕ†rVjŸj,†rWj©jæ†rXj©jæ†rYjsX
      rZ†r[j©jцr\jXdotimesr]†r^jsjÕ†r_j©jцr`hÐj~†rajsjÕ†rbhÐX
num-of-pointsrc†rdj©jæ†rejsX
	rf†rgj©jцrhj-Xlet*ri†rjjsjÕ†rkj©jцrlj©jцrmhÐXidxrn†rojsjÕ†rpj©jцrqjtj(†rrjsjÕ†rshÐj~†rtjsjÕ†rujŸjî†rvj©jæ†rwj©jæ†rxjsX	
	       ry†rzj©jцr{hÐXx1r|†r}jsjÕ†r~j©jцrjtXpointer-refr€†rjsjÕ†r‚hÐXpointsrƒ†r„jsjÕ†r…j©jцr†jtjφr‡jsjÕ†rˆhÐXidxr‰†rŠjsjÕ†r‹jŸj,†rŒj©jæ†rj©jæ†rŽj©jæ†rjsX	
	       r†r‘j©jцr’hÐXy1r“†r”jsjÕ†r•j©jцr–jtXpointer-refr—†r˜jsjÕ†r™hÐXpointsrš†r›jsjÕ†rœj©jцrjtjφržjsjÕ†rŸhÐXidxr †r¡jsjÕ†r¢jŸj÷†r£j©jæ†r¤j©jæ†r¥j©jæ†r¦jsX	
	       r§†r¨j©jцr©hÐXx2rª†r«jsjÕ†r¬j©jцr­jtXpointer-refr®†r¯jsjÕ†r°hÐXpointsr±†r²jsjÕ†r³j©jцr´jtjφrµjsjÕ†r¶hÐXidxr·†r¸jsjÕ†r¹jŸjî†rºj©jæ†r»j©jæ†r¼j©jæ†r½jsX	
	       r¾†r¿j©jцrÀhÐXy2rÁ†rÂjsjÕ†rÃj©jцrÄjtXpointer-refrņrÆjsjÕ†rÇhÐXpointsrȆrÉjsjÕ†rÊj©jцrËjtjφrÌjsjÕ†rÍhÐXidxrΆrÏjsjÕ†rÐjŸj†rÑj©jæ†rÒj©jæ†rÓj©jæ†rÔjsX	
	       rÕ†rÖj©jцr×hÐXmr؆rÙjsjÕ†rÚj©jцrÛjXifr܆rÝjsjÕ†rÞj©jцrßjtjµ†ràjsjÕ†rájhX0.0râ†rãjsjÕ†räj©jцråjtjD†ræjsjÕ†rçhÐXx2rè†réjsjÕ†rêhÐXx1rë†rìj©jæ†ríj©jæ†rîjsjÕ†rïjhX0.0rð†rñjsjÕ†ròj©jцrójtj†rôjsjÕ†rõj©jцröjtjD†r÷jsjÕ†røhÐXy2rù†rújsjÕ†rûhÐXy1rü†rýj©jæ†rþjsjÕ†rÿj©jцrjtjD†rjsjÕ†rhÐXx2r†rjsjÕ†rhÐXx1r†rj©jæ†rj©jæ†r	j©jæ†r
j©jæ†rjsX	
	       r†r
j©jцrhÐjK	†rjsjÕ†rj©jцrjtjD†rjsjÕ†rhÐXy2r†rjsjÕ†rj©jцrjtj(†rjsjÕ†rhÐj؆rjsjÕ†rhÐXx2r†rj©jæ†rj©jæ†rj©jæ†r jsX	
	       r!†r"j©jцr#hÐXlr$†r%jsjÕ†r&j©jцr'jXlambdar(†r)jsjÕ†r*j©jцr+hÐXtimer,†r-j©jæ†r.jsjÕ†r/j©jцr0jtjφr1jsjÕ†r2j©jцr3jtj(†r4jsjÕ†r5hÐj؆r6jsjÕ†r7hÐXtimer8†r9j©jæ†r:jsjÕ†r;hÐjK	†r<j©jæ†r=j©jæ†r>j©jæ†r?j©jæ†r@jsX
	  rA†rBj©jцrCjtXpointer-set!rD†rEjsjÕ†rFhÐXlinesrG†rHjsjÕ†rIhÐj~†rJjsjÕ†rKhÐj$†rLj©jæ†rMj©jæ†rNj©jæ†rOjsX
      rP†rQhÐXlinesrR†rSj©jæ†rTj©jæ†rUj©jæ†rVjsX

rW†rXj©jцrYjX	bind-funcrZ†r[jsjÕ†r\jtX
make-enveloper]†r^jsX
   r_†r`j©jцrajXlambdarb†rcjsjÕ†rdj©jцrehÐXpointsrf†rgj-X:double*rh†rijsjÕ†rjhÐX
num-of-pointsrk†rlj©jæ†rmjsX
      rn†roj©jцrpjXletrq†rrjsjÕ†rsj©jцrtj©jцruhÐXklinesrv†rwj-X:[double,double]**rx†ryjsjÕ†rzj©jцr{hÐXenvelope-segmentsr|†r}jsjÕ†r~hÐXpointsr†r€jsjÕ†rhÐX
num-of-pointsr‚†rƒj©jæ†r„j©jæ†r…jsX
	    r††r‡j©jцrˆhÐXline-lengthr‰†rŠjsjÕ†r‹hÐX
num-of-pointsrŒ†rj©jæ†rŽj©jæ†rjsX
	 r†r‘j©jцr’jXlambdar“†r”jsjÕ†r•j©jцr–hÐXtimer—†r˜j©jæ†r™jsX
	    rš†r›j©jцrœjXletr†ržjsjÕ†rŸj©jцr j©jцr¡hÐXresr¢†r£jsjÕ†r¤jhX-1.0r¥†r¦j©jæ†r§jsX
		  r¨†r©j©jцrªhÐj~†r«j-X:i64r¬†r­jsjÕ†r®jŸj,†r¯j©jæ†r°j©jæ†r±jsX	
	       r²†r³j©jцr´jXdotimesrµ†r¶jsjÕ†r·j©jцr¸hÐj~†r¹jsjÕ†rºhÐX
num-of-pointsr»†r¼j©jæ†r½jsX
		  r¾†r¿j©jцrÀjXletrÁ†rÂjsjÕ†rÃj©jцrÄj©jцrÅhÐXlinerƆrÇjsjÕ†rÈj©jцrÉjtXpointer-refrʆrËjsjÕ†rÌhÐXklinesr͆rÎjsjÕ†rÏhÐj~†rÐj©jæ†rÑj©jæ†rÒjsX
			rÓ†rÔj©jцrÕhÐX
time-pointrÖ†r×jsjÕ†rØj©jцrÙjtXpointer-refrÚ†rÛjsjÕ†rÜhÐXpointsr݆rÞjsjÕ†rßj©jцràjtj(†rájsjÕ†râhÐj~†rãjsjÕ†räjŸjî†råj©jæ†ræj©jæ†rçj©jæ†rèj©jæ†réjsX
		     rê†rëj©jцrìjXifrí†rîjsjÕ†rïj©jцrðjXorrñ†ròjsjÕ†rój©jцrôjtjµ†rõjsjÕ†röhÐXtimer÷†røjsjÕ†rùhÐX
time-pointrú†rûj©jæ†rüjsX	
			     rý†rþj©jцrÿjtj¾†rjsjÕ†rhÐX
time-pointr†rjsjÕ†rhÐXtimer†rj©jæ†rj©jæ†rjsX
			 r	†r
j©jцrjXset!r†r
jsjÕ†rhÐXresr†rjsjÕ†rj©jцrhÐXliner†rjsjÕ†rhÐXtimer†rj©jæ†rj©jæ†rj©jæ†rj©jæ†rj©jæ†rjsX	
	       r†rhÐXresr†r j©jæ†r!j©jæ†r"j©jæ†r#j©jæ†r$j©jæ†r%jsX

r&†r'hX;; make a convenience wrapperr(†r)jsj¿†r*j©jцr+hÐXxtmtestr,†r-jsjÕ†r.htj׆r/j©jцr0jX	bind-funcr1†r2jsjÕ†r3jtXenv-wrapr4†r5jsX

            r6†r7j©jцr8j-Xlet*r9†r:jsjÕ†r;j©jцr<j©jцr=hÐXpointsr>†r?jsjÕ†r@jŸj†rAj©jæ†rBjsX
                   rC†rDj©jцrEhÐXdatarF†rGj-X:double*rH†rIjsjÕ†rJj©jцrKjtX
zone-allocrL†rMjsjÕ†rNj©jцrOjtj(†rPjsjÕ†rQhÐXpointsrR†rSjsjÕ†rTjŸjî†rUj©jæ†rVj©jæ†rWj©jæ†rXj©jæ†rYjsX
              rZ†r[j©jцr\jtXpointer-set!r]†r^jsjÕ†r_hÐXdatar`†rajsjÕ†rbjŸj,†rcjsjÕ†rdjhX0.0re†rfj©jæ†rgjsjÕ†rhhX
;; point datari†rjjsX
              rk†rlj©jцrmjtXpset!rn†rojsjÕ†rphÐXdatarq†rrjsjÕ†rsjŸj÷†rtjsjÕ†rujhX0.0rv†rwj©jæ†rxjsX
              ry†rzj©jцr{jtXpset!r|†r}jsjÕ†r~hÐXdatar†r€jsjÕ†rjŸjî†r‚jsjÕ†rƒjhX2.0r„†r…j©jæ†r†jsX
              r‡†rˆj©jцr‰jtXpset!rІr‹jsjÕ†rŒhÐXdatar†rŽjsjÕ†rjŸj†rjsjÕ†r‘jhX1.0r’†r“j©jæ†r”jsX
              r•†r–j©jцr—jtXpset!r˜†r™jsjÕ†ršhÐXdatar›†rœjsjÕ†rjŸj‚†ržjsjÕ†rŸjhX4.0r †r¡j©jæ†r¢jsX
              r£†r¤j©jцr¥jtXpset!r¦†r§jsjÕ†r¨hÐXdatar©†rªjsjÕ†r«jŸj-†r¬jsjÕ†r­jhX0.0r®†r¯j©jæ†r°jsX
              r±†r²j©jцr³jXletr´†rµjsjÕ†r¶j©jцr·j©jцr¸hÐjކr¹jsjÕ†rºj©jцr»jtXmake-envr¼†r½hÐXeloper¾†r¿jsjÕ†rÀhÐXdatarÁ†rÂjsjÕ†rÃhÐXpointsrĆrÅj©jæ†rÆj©jæ†rÇj©jæ†rÈjsX
                rɆrÊj©jцrËjXlambdar̆rÍjsjÕ†rÎj©jцrÏhÐXtimerІrÑj-X:doublerÒ†rÓj©jæ†rÔjsX
                  rÕ†rÖj©jцr×hÐjކrØjsjÕ†rÙhÐXtimerÚ†rÛj©jæ†rÜj©jæ†rÝj©jæ†rÞj©jæ†rßj©jæ†ràjsX

         rá†râj©jцrãhÐXenv-wraprä†råjsjÕ†ræjhX0.0rç†rèj©jæ†réjsjÕ†rêjhX0.0rë†rìj©jæ†ríjsX

rî†rïj©jцrðhÐXxtmtest-resultrñ†ròjsjÕ†rój©jцrôhÐXenv-wraprõ†röjsjÕ†r÷jhX1.0rø†rùj©jæ†rújsjÕ†rûjhX0.5rü†rýj©jæ†rþjsj¿†rÿj©jцrhÐXxtmtest-resultr†rjsjÕ†rj©jцrhÐXenv-wrapr†rjsjÕ†rjhX2.0r†r	j©jæ†r
jsjÕ†rjhX1.0r†r
j©jæ†rjsj¿†rj©jцrhÐXxtmtest-resultr†rjsjÕ†rj©jцrhÐXenv-wrapr†rjsjÕ†rjhX2.5r†rj©jæ†rjsjÕ†rjhX0.75r†rj©jæ†rjsj¿†rj©jцr hÐXxtmtest-resultr!†r"jsjÕ†r#j©jцr$hÐXenv-wrapr%†r&jsjÕ†r'jhX4.0r(†r)j©jæ†r*jsjÕ†r+jhX0.0r,†r-j©jæ†r.jsX

r/†r0hX1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r1†r2jsj¿†r3hX;;r4†r5jsj¿†r6hX*;; direct access to a closures environmentr7†r8jsj¿†r9hX;;r:†r;jsj¿†r<hX/;; it is possible to directly access a closuresr=†r>jsj¿†r?hX.;; environment in order to read or modify datar@†rAjsj¿†rBhX;; at runtime.rC†rDjsj¿†rEhX;;rF†rGjsj¿†rHhX#;; You do this using a dot operatorrI†rJjsj¿†rKhX(;; To access an environment slot you userL†rMjsj¿†rNhX;; closure.slot:typerO†rPjsj¿†rQhX;; So for examplerR†rSjsj¿†rThX;; (f.a:i32)rU†rVjsj¿†rWhX,;; would return the 32bit integer symbol 'a'rX†rYjsj¿†rZhX;; from the closure 'f'r[†r\jsj¿†r]hX;;r^†r_jsj¿†r`hX&;; To set an environment slot you justra†rbjsj¿†rchX";; add a value of the correct typerd†rejsj¿†rfhX;; for examplerg†rhjsj¿†rihX;; (f.a:i32 565)rj†rkjsj¿†rlhX;; would set 'a' in 'f' to 565rm†rnjsj¿†rohX;;rp†rqjsj¿†rrhX,;; let's create a closure that capture's 'a'rs†rtjsX


ru†rvj©jцrwhÐXxtmtestrx†ryjsjÕ†rzhtj׆r{j©jцr|jX	bind-funcr}†r~jsjÕ†rjtXdot-access-test1r€†rjsX

            r‚†rƒj©jцr„jXletr…†r†jsjÕ†r‡j©jцrˆj©jцr‰hÐj"†rŠj-X:i32r‹†rŒjsjÕ†rjŸj8†rŽj©jæ†rj©jæ†rjsX
              r‘†r’j©jцr“jXlambdar”†r•jsjÕ†r–j©jцr—j©jæ†r˜jsX
                r™†ršj©jцr›jtXprintfrœ†rjsjÕ†ržjÁX"a:%d\n"rŸ†r jsjÕ†r¡hÐj"†r¢j©jæ†r£jsX
                r¤†r¥hÐj"†r¦j©jæ†r§j©jæ†r¨j©jæ†r©jsX

         rª†r«j©jцr¬jXdor­†r®hÐXt-access-test1r¯†r°j©jæ†r±j©jæ†r²jsX

r³†r´hX";; now let's create a new functionrµ†r¶jsj¿†r·hX;; that calls my-test14 twicer¸†r¹jsj¿†rºhX;; once normallyr»†r¼jsj¿†r½hX0;; then we directly set the closures 'a' bindingr¾†r¿jsj¿†rÀhX;; then call againrÁ†rÂjsj¿†rÃhX;;rĆrÅjsj¿†rÆj©jцrÇhÐXxtmtestrȆrÉjsjÕ†rÊhtj׆rËj©jцrÌjX	bind-funcr͆rÎjsjÕ†rÏjtXdot-access-test2rІrÑjsX

            rÒ†rÓj©jцrÔjXlambdarÕ†rÖjsjÕ†r×j©jцrØhÐj†rÙj-X:i32rÚ†rÛj©jæ†rÜjsX
              r݆rÞj©jцrßhÐXdot-access-test1rà†ráj©jæ†râjsX
              rã†räj©jцråhÐXdot-access-test1.aræ†rçj-X:i32rè†réjsjÕ†rêhÐj†rëj©jæ†rìjsX
              rí†rîj©jцrïhÐXdot-access-test1rð†rñj©jæ†ròj©jæ†rój©jæ†rôjsX

         rõ†röj©jцr÷jXdorø†rùhÐXt-access-test2rú†rûjsjÕ†rüjŸX9rý†rþj©jæ†rÿj©jæ†rjsX

r†rhX(;; of course this works just as well forr†rjsj¿†rhX;; non-global closuresr†rjsj¿†rj©jцr	hÐXxtmtestr
†rjsjÕ†rhtj׆r
j©jцrjX	bind-funcr†rjsjÕ†rjtXdot-access-test3r†rjsX

            r†rj©jцrjXlambdar†rjsjÕ†rj©jцrhÐj"†rj-X:i32r†rj©jæ†rjsX
              r†r j©jцr!jXletr"†r#jsjÕ†r$j©jцr%j©jцr&hÐjކr'jsjÕ†r(j©jцr)jXlambdar*†r+jsjÕ†r,j©jцr-j©jæ†r.jsX
                         r/†r0j©jцr1jtj(†r2jsjÕ†r3jŸj†r4jsjÕ†r5hÐj"†r6j©jæ†r7j©jæ†r8j©jæ†r9j©jæ†r:jsX
                r;†r<hÐjކr=j©jæ†r>j©jæ†r?j©jæ†r@jsX

         rA†rBj©jцrCjXdorD†rEhÐXt-access-test3rF†rGjsjÕ†rHjŸj÷†rIj©jæ†rJj©jæ†rKjsX

rL†rMj©jцrNhÐXxtmtestrO†rPjsjÕ†rQhtj׆rRj©jцrSjX	bind-funcrT†rUjsjÕ†rVjtXdot-access-test4rW†rXjsX

            rY†rZj©jцr[jXlambdar\†r]jsjÕ†r^j©jцr_j©jæ†r`jsX
              ra†rbj©jцrcjXletrd†rejsjÕ†rfj©jцrgj©jцrhhÐjކrijsjÕ†rjj©jцrkhÐXdot-access-test3rl†rmjsjÕ†rnjŸj-†roj©jæ†rpj©jæ†rqj©jæ†rrjsX
                rs†rtj©jцruhÐXf.arv†rwj-X:i32rx†ryjsjÕ†rzjŸX7r{†r|j©jæ†r}jsX
                r~†rj©jцr€hÐjކrj©jæ†r‚j©jæ†rƒj©jæ†r„j©jæ†r…jsX

         r††r‡j©jцrˆjXdor‰†rŠhÐXt-access-test4r‹†rŒj©jæ†rjsX

         rކrjŸX21r†r‘j©jæ†r’jsX

r“†r”hX);; and you can get and set closures also!r•†r–jsj¿†r—j©jцr˜hÐXxtmtestr™†ršjsjÕ†r›htj׆rœj©jцrjX	bind-funcrž†rŸjsjÕ†r jtXdot-access-test5r¡†r¢jsX

            r£†r¤j©jцr¥jXlambdar¦†r§jsjÕ†r¨j©jцr©j©jæ†rªjsX
              r«†r¬j©jцr­jXletr®†r¯jsjÕ†r°j©jцr±j©jцr²hÐjކr³jsjÕ†r´j©jцrµjXlambdar¶†r·jsjÕ†r¸j©jцr¹hÐj†rºj-X:i64r»†r¼j©jæ†r½jsjÕ†r¾hÐj†r¿j©jæ†rÀj©jæ†rÁj©jæ†rÂjsX
                rÆrÄj©jцrÅjXlambdarƆrÇjsjÕ†rÈj©jцrÉhÐXzrʆrËj©jæ†rÌjsX
                  r͆rÎj©jцrÏhÐjކrÐjsjÕ†rÑhÐjʆrÒj©jæ†rÓj©jæ†rÔj©jæ†rÕj©jæ†rÖj©jæ†r×jsX

         r؆rÙj©jцrÚjXdorÛ†rÜhÐXt-access-test5r݆rÞj©jæ†rßj©jæ†ràjsX

rá†râj©jцrãhÐXxtmtesträ†råjsjÕ†ræhtj׆rçj©jцrèjX	bind-funcré†rêjsjÕ†rëjtXdot-access-test6rì†ríjsX

            rî†rïj©jцrðjXlambdarñ†ròjsjÕ†rój©jцrôj©jæ†rõjsX
              rö†r÷j©jцrøjXletrù†rújsjÕ†rûj©jцrüj©jцrýhÐXt1rþ†rÿjsjÕ†rj©jцrhÐXdot-access-test5r†rj©jæ†rj©jæ†rjsX
                    r†rj©jцrhÐXt2r	†r
jsjÕ†rj©jцrhÐXdot-access-test5r
†rj©jæ†rj©jæ†rj©jæ†rjsX
                r†rhX;; identity of 5r†rjsX
                r†rj©jцrjtXprintfr†rjsjÕ†rjÁX
"%lld:%lld\n"r†rjsjÕ†rj©jцrhÐXt1r †r!jsjÕ†r"jŸj-†r#j©jæ†r$jsjÕ†r%j©jцr&hÐXt2r'†r(jsjÕ†r)jŸj-†r*j©jæ†r+j©jæ†r,jsX
                r-†r.j©jцr/hÐXt1.fr0†r1j-X:[i64,i64]*r2†r3jsjÕ†r4j©jцr5jXlambdar6†r7jsjÕ†r8j©jцr9hÐj†r:j-X:i64r;†r<j©jæ†r=jsjÕ†r>j©jцr?jtj(†r@jsjÕ†rAhÐj†rBjsjÕ†rChÐj†rDj©jæ†rEj©jæ†rFj©jæ†rGjsX
                rH†rIhX;; square of 5rJ†rKjsX
                rL†rMj©jцrNjtXprintfrO†rPjsjÕ†rQjÁX
"%lld:%lld\n"rR†rSjsjÕ†rTj©jцrUhÐXt1rV†rWjsjÕ†rXjŸj-†rYj©jæ†rZjsjÕ†r[j©jцr\hÐXt2r]†r^jsjÕ†r_jŸj-†r`j©jæ†raj©jæ†rbjsX
                rc†rdhX;; cube of 5re†rfjsX
                rg†rhj©jцrihÐXt2.frj†rkj-X:[i64,i64]*rl†rmjsjÕ†rnj©jцrojXlambdarp†rqjsjÕ†rrj©jцrshÐjS	†rtj-X:i64ru†rvj©jæ†rwjsjÕ†rxj©jцryjtj(†rzjsjÕ†r{hÐjS	†r|jsjÕ†r}hÐjS	†r~jsjÕ†rhÐjS	†r€j©jæ†rj©jæ†r‚j©jæ†rƒjsX
                r„†r…j©jцr†jtXprintfr‡†rˆjsjÕ†r‰e(jÁX
"%lld:%lld\n"rІr‹jsjÕ†rŒj©jцrhÐXt1rކrjsjÕ†rjŸj-†r‘j©jæ†r’jsjÕ†r“j©jцr”hÐXt2r•†r–jsjÕ†r—jŸj-†r˜j©jæ†r™j©jæ†ršjsX
                r›†rœhÐXvoidr†ržj©jæ†rŸj©jæ†r j©jæ†r¡jsX

         r¢†r£j©jцr¤jXdor¥†r¦hÐXt-access-test6r§†r¨j©jæ†r©j©jæ†rªjsjÕ†r«hX;; 5:5 > 25:5 > 25:125r¬†r­jsX

r®†r¯hX2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r°†r±jsj¿†r²hX;;r³†r´jsj¿†rµhX;; named typesr¶†r·jsX

r¸†r¹hX*;; it can sometimes be helpful to allocaterº†r»jsj¿†r¼hX';; a predefined tuple type on the stackr½†r¾jsj¿†r¿hX!;; you can do this using allocaterÀ†rÁjsj¿†rÂj©jцrÃjX	bind-typerĆrÅjsjÕ†rÆjtXvec3rdžrÈjsjÕ†rÉj-X<double,double,double>rʆrËj©jæ†rÌjsX

r͆rÎhX;; String printing!rφrÐjsj¿†rÑj©jцrÒjX	bind-funcrÓ†rÔjsjÕ†rÕjtX
vec3_printrÖ†r×j-X:[void,vec3*]*r؆rÙjsX
  rÚ†rÛj©jцrÜjXlambdar݆rÞjsjÕ†rßj©jцràhÐj†ráj©jæ†râjsX
    rã†räj©jцråjtXprintfræ†rçjsjÕ†rèjÁX"<%d,%d,%d>"ré†rêjsjÕ†rëj©jцrìjtXtrefrí†rîjsjÕ†rïhÐj†rðjsjÕ†rñjŸj,†ròj©jæ†rójsjÕ†rôj©jцrõjtXtrefrö†r÷jsjÕ†røhÐj†rùjsjÕ†rújŸj÷†rûj©jæ†rüjsjÕ†rýj©jцrþjtXtrefrÿ†rjsjÕ†rhÐj†rjsjÕ†rjŸjî†rj©jæ†rj©jæ†rjsX
    r†rhÐXvoidr	†r
j©jæ†rj©jæ†rjsX

r
†rj©jцrjX	bind-polyr†rjsjÕ†rjtXprintr†rjsjÕ†rhÐX
vec3_printr†rj©jæ†rjsX

r†rhX(;; note that point is deallocated at ther†rjsj¿†rhX%;; end of the function call.  You canr†rjsj¿†r hX;; stack allocate (stack-alloc)r!†r"jsj¿†r#hX$;; any valid type  (i64 for example)r$†r%jsj¿†r&j©jцr'hÐXxtmtestr(†r)jsjÕ†r*htj׆r+j©jцr,jX	bind-funcr-†r.jsjÕ†r/jtXsalloc-testr0†r1jsX

            r2†r3j©jцr4jXlambdar5†r6jsjÕ†r7j©jцr8j©jæ†r9jsX
              r:†r;j©jцr<jXletr=†r>jsjÕ†r?j©jцr@j©jцrAhÐXpointrB†rCj-X:vec3*rD†rEjsjÕ†rFj©jцrGjtXstack-allocrH†rIj©jæ†rJj©jæ†rKj©jæ†rLjsX
                rM†rNj©jцrOjtXtset!rP†rQjsjÕ†rRhÐXpointrS†rTjsjÕ†rUjŸj,†rVjsjÕ†rWjhX0.0rX†rYj©jæ†rZjsX
                r[†r\j©jцr]jtXtset!r^†r_jsjÕ†r`hÐXpointra†rbjsjÕ†rcjŸj÷†rdjsjÕ†rejhX-1.0rf†rgj©jæ†rhjsX
                ri†rjj©jцrkjtXtset!rl†rmjsjÕ†rnhÐXpointro†rpjsjÕ†rqjŸjî†rrjsjÕ†rsjhX1.0rt†ruj©jæ†rvjsX
                rw†rxjŸj÷†ryj©jæ†rzj©jæ†r{j©jæ†r|jsX

         r}†r~j©jцrhÐXsalloc-testr€†rj©jæ†r‚j©jæ†rƒjsjÕ†r„hX;; 1r…†r†jsX

r‡†rˆhX.;; all named types have 2 default constructorsr‰†rŠjsj¿†r‹hX3;; name (zone alloation) + name_h (heap allocation)rŒ†rjsj¿†rŽhX;; and a default print polyr†rjsj¿†r‘j©jцr’hÐXxtmtestr“†r”jsjÕ†r•htj׆r–j©jцr—jX	bind-funcr˜†r™jsjÕ†ršjtXdata-constructor-testr›†rœjsX

            r†ržj©jцrŸjXlambdar †r¡jsjÕ†r¢j©jцr£j©jæ†r¤jsX
              r¥†r¦j©jцr§jXletr¨†r©jsjÕ†rªj©jцr«j©jцr¬hÐXv1r­†r®jsjÕ†r¯j©jцr°hÐXvec3r±†r²jsjÕ†r³jhX1.0r´†rµjsjÕ†r¶jhX2.0r·†r¸jsjÕ†r¹jhX3.0rº†r»j©jæ†r¼j©jæ†r½jsX
                    r¾†r¿j©jцrÀhÐXv2rÁ†rÂjsjÕ†rÃj©jцrÄhÐXvec3_hrņrÆjsjÕ†rÇjhX4.0rȆrÉjsjÕ†rÊjhX5.0rˆrÌjsjÕ†rÍjhX6.0rΆrÏj©jæ†rÐj©jæ†rÑj©jæ†rÒjsX
                rÓ†rÔj©jцrÕjtXprintlnrÖ†r×jsjÕ†rØhÐXv1rÙ†rÚjsjÕ†rÛhÐXv2r܆rÝj©jæ†rÞjsX
                r߆ràhX;; halloced vec3 needs freeingrá†râjsX
                rã†räj©jцråjtXfreeræ†rçjsjÕ†rèhÐXv2ré†rêj©jæ†rëjsX
                rì†ríhÐXvoidrî†rïj©jæ†rðj©jæ†rñj©jæ†ròjsX

         ró†rôj©jцrõhÐXdata-constructor-teströ†r÷j©jæ†røj©jæ†rùjsX

rú†rûhX:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;rü†rýjsj¿†rþhX;;rÿ†rjsj¿†rhX;; aref-ptr and tref-ptrr†rjsj¿†rhX;;r†rjsX

r†rhX7;; aref-ptr and tref-ptr return a pointer to an elementr	†r
jsj¿†rhX5;; just as aref and tref return elements aref-ptr andr†r
jsj¿†rhX/;; tref-ptr return a pointer to those elements.r†rjsX

r†rhX4;; This allows you to do things like create an arrayr†rjsj¿†rhX;; with an offsetr†rjsj¿†rj©jцrhÐXxtmtestr†rjsjÕ†rhtj׆rj©jцrjX	bind-funcr†r jsjÕ†r!jtX
aref-ptr-testr"†r#jsX

            r$†r%j©jцr&jXlambdar'†r(jsjÕ†r)j©jцr*j©jæ†r+jsX
              r,†r-j©jцr.jXletr/†r0jsjÕ†r1j©jцr2j©jцr3hÐXarrr4†r5j-X
:|32,i64|*r6†r7jsjÕ†r8j©jцr9jtXallocr:†r;j©jæ†r<j©jæ†r=jsX
                    r>†r?j©jцr@hÐXarroffrA†rBjsjÕ†rCj©jцrDjtXaref-ptrrE†rFjsjÕ†rGhÐXarrrH†rIjsjÕ†rJjŸX16rK†rLj©jæ†rMj©jæ†rNjsX
                    rO†rPj©jцrQhÐj8†rRjsjÕ†rSjŸj,†rTj©jæ†rUjsX
                    rV†rWj©jцrXhÐj~†rYjsjÕ†rZjŸj,†r[j©jæ†r\j©jæ†r]jsX
                r^†r_hX;; load arrr`†rajsX
                rb†rcj©jцrdjXdotimesre†rfjsjÕ†rgj©jцrhhÐj8†rijsjÕ†rjjŸX32rk†rlj©jæ†rmjsjÕ†rnj©jцrojtXaset!rp†rqjsjÕ†rrhÐXarrrs†rtjsjÕ†ruhÐj8†rvjsjÕ†rwhÐj8†rxj©jæ†ryj©jæ†rzjsX
                r{†r|j©jцr}jXdotimesr~†rjsjÕ†r€j©jцrhÐj~†r‚jsjÕ†rƒjŸX16r„†r…j©jæ†r†jsX
                  r‡†rˆj©jцr‰jtXprintfrІr‹jsjÕ†rŒjÁX("index: %lld\tarr: %lld\tarroff: %lld\n"r†rŽjsX
                          r†rhÐj~†r‘jsjÕ†r’j©jцr“jtXarefr”†r•jsjÕ†r–hÐXarrr—†r˜jsjÕ†r™hÐj~†ršj©jæ†r›jsjÕ†rœj©jцrjtXprefrž†rŸjsjÕ†r hÐXarroffr¡†r¢jsjÕ†r£hÐj~†r¤j©jæ†r¥j©jæ†r¦j©jæ†r§j©jæ†r¨j©jæ†r©j©jæ†rªjsX

         r«†r¬j©jцr­hÐX
aref-ptr-testr®†r¯j©jæ†r°j©jæ†r±jsX

r²†r³hX8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r´†rµjsj¿†r¶hX;;r·†r¸jsj¿†r¹hX	;; arraysrº†r»jsj¿†r¼hX4;; Extempore lang supports arrays as for first classr½†r¾jsj¿†r¿hX3;; aggregate types (in other words as distinct fromrÀ†rÁjsj¿†rÂhX;; a pointer).rÆrÄjsj¿†rÅhX;;rƆrÇjsj¿†rÈhX+;; an array is made up of a size and a typerɆrÊjsj¿†rËhX2;; |32,i64| is an array of 32 elements of type i64r̆rÍjsj¿†rÎhX;;rφrÐjsX

rцrÒj©jцrÓjX	bind-typerÔ†rÕjsjÕ†rÖjtXtuple-with-arrayr׆rØjsjÕ†rÙj-X<double,|32,|4,i32||,float>rÚ†rÛj©jæ†rÜjsX

r݆rÞj©jцrßhÐXxtmtestrà†rájsjÕ†râhtj׆rãj©jцräjX	bind-funcrå†ræjsjÕ†rçjtXarray-test5rè†réjsX

            rê†rëj©jцrìjXlambdarí†rîjsjÕ†rïj©jцrðj©jæ†rñjsX
              rò†rój©jцrôjXletrõ†röjsjÕ†r÷j©jцrøj©jцrùhÐXtuprú†rûj-X:tuple-with-array*rü†rýjsjÕ†rþj©jцrÿjtXstack-allocr†rj©jæ†rj©jæ†rjsX
                    r†rj©jцrhÐXt2r†rj-X
:|32,i64|*r	†r
jsjÕ†rj©jцrjtXstack-allocr
†rj©jæ†rj©jæ†rj©jæ†rjsX
                r†rj©jцrjtXaset!r†rjsjÕ†rhÐXt2r†rjsjÕ†rjŸj,†rjsjÕ†rjŸjý†rj©jæ†rjsX
                r†r j©jцr!jtXtset!r"†r#jsjÕ†r$hÐXtupr%†r&jsjÕ†r'jŸjî†r(jsjÕ†r)jhX5.5r*†r+j©jæ†r,jsX
                r-†r.j©jцr/jtXaset!r0†r1jsjÕ†r2j©jцr3jtXaref-ptrr4†r5jsjÕ†r6j©jцr7jtXtref-ptrr8†r9jsjÕ†r:hÐXtupr;†r<jsjÕ†r=jŸj÷†r>j©jæ†r?jsjÕ†r@jŸj,†rAj©jæ†rBjsjÕ†rCjŸj,†rDjsjÕ†rEjŸj,†rFj©jæ†rGjsX
                rH†rIj©jцrJjtXaset!rK†rLjsjÕ†rMj©jцrNjtXaref-ptrrO†rPjsjÕ†rQj©jцrRjtXtref-ptrrS†rTjsjÕ†rUhÐXtuprV†rWjsjÕ†rXjŸj÷†rYj©jæ†rZjsjÕ†r[jŸj,†r\j©jæ†r]jsjÕ†r^jŸj÷†r_jsjÕ†r`jŸj÷†raj©jæ†rbjsX
                rc†rdj©jцrejtXaset!rf†rgjsjÕ†rhj©jцrijtXaref-ptrrj†rkjsjÕ†rlj©jцrmjtXtref-ptrrn†rojsjÕ†rphÐXtuprq†rrjsjÕ†rsjŸj÷†rtj©jæ†rujsjÕ†rvjŸj,†rwj©jæ†rxjsjÕ†ryjŸjî†rzjsjÕ†r{jŸjî†r|j©jæ†r}jsX
                r~†rj©jцr€jtXprintfr†r‚jsjÕ†rƒjÁX"val: %lld %lld %f\n"r„†r…jsX
                        r††r‡j©jцrˆjtXarefr‰†rŠjsjÕ†r‹j©jцrŒjtXaref-ptrr†rŽjsjÕ†rj©jцrjtXtref-ptrr‘†r’jsjÕ†r“hÐXtupr”†r•jsjÕ†r–jŸj÷†r—j©jæ†r˜jsjÕ†r™jŸj,†ršj©jæ†r›jsjÕ†rœjŸj÷†rj©jæ†ržjsX
                        rŸ†r j©jцr¡jtXarefr¢†r£jsjÕ†r¤hÐXt2r¥†r¦jsjÕ†r§jŸj,†r¨j©jæ†r©jsjÕ†rªj©jцr«jtXftodr¬†r­jsjÕ†r®j©jцr¯jtXtrefr°†r±jsjÕ†r²hÐXtupr³†r´jsjÕ†rµjŸjî†r¶j©jæ†r·j©jæ†r¸j©jæ†r¹jsX
                rº†r»j©jцr¼jtXarefr½†r¾jsjÕ†r¿j©jцrÀjtXaref-ptrrÁ†rÂjsjÕ†rÃj©jцrÄjtXtref-ptrrņrÆjsjÕ†rÇhÐXtuprȆrÉjsjÕ†rÊjŸj÷†rËj©jæ†rÌjsjÕ†rÍjŸj,†rÎj©jæ†rÏjsjÕ†rÐjŸj÷†rÑj©jæ†rÒj©jæ†rÓj©jæ†rÔj©jæ†rÕjsX

         rÖ†r×j©jцrØhÐXarray-test5rÙ†rÚj©jæ†rÛjsjÕ†rÜjŸj÷†rÝj©jæ†rÞjsjÕ†rßhX;; val: 1 9 5.5rà†rájsX

râ†rãhX5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;rä†råjsj¿†ræhX;;rç†rèjsj¿†réhX;; Global Variablesrê†rëjsj¿†rìhX;;rí†rîjsj¿†rïhX3;; You can allocate global variables using bind-valrð†rñjsj¿†ròhX;;ró†rôjsX

rõ†röj©jцr÷jXbind-valrø†rùjsjÕ†rújtXg_var_arû†rüjsjÕ†rýhÐXi32rþ†rÿjsjÕ†rjŸj-†rj©jæ†rjsX

r†rhX;; increment g_var_a by incr†rjsj¿†rhX";; and return new value of g_var_ar†r	jsj¿†r
j©jцrhÐXxtmtestr†r
jsjÕ†rhtj׆rj©jцrjX	bind-funcr†rjsjÕ†rjtXglobal_var_test1r†rjsX

            r†rj©jцrjXlambdar†rjsjÕ†rj©jцrhÐXincrr†rj©jæ†rjsX
              r †r!j©jцr"jXset!r#†r$jsjÕ†r%hÐXg_var_ar&†r'jsjÕ†r(j©jцr)jtjφr*jsjÕ†r+hÐXg_var_ar,†r-jsjÕ†r.hÐXincrr/†r0j©jæ†r1j©jæ†r2jsX
              r3†r4hÐXg_var_ar5†r6j©jæ†r7j©jæ†r8jsX

         r9†r:j©jцr;hÐXglobal_var_test1r<†r=jsjÕ†r>jŸj†r?j©jæ†r@jsjÕ†rAjŸjv†rBj©jæ†rCjsjÕ†rDhX;; 8rE†rFjsX

rG†rHhX";; you can bind any primitive typerI†rJjsj¿†rKj©jцrLjXbind-valrM†rNjsjÕ†rOjtXg_var_brP†rQjsjÕ†rRhÐXdoublerS†rTjsjÕ†rUjhX5.5rV†rWj©jæ†rXjsj¿†rYj©jцrZjXbind-valr[†r\jsjÕ†r]jtXg_var_cr^†r_jsjÕ†r`hÐXi1ra†rbjsjÕ†rcjŸj,†rdj©jæ†rejsX

rf†rgj©jцrhhÐXxtmtestri†rjjsjÕ†rkhtj׆rlj©jцrmjX	bind-funcrn†rojsjÕ†rpjtXglobal_var_test1brq†rrjsX

            rs†rtj©jцrujXlambdarv†rwjsjÕ†rxj©jцryj©jæ†rzjsX
              r{†r|j©jцr}jtj(†r~jsjÕ†rhÐXg_var_br€†rjsjÕ†r‚j©jцrƒjXifr„†r…jsjÕ†r†hÐXg_var_cr‡†rˆjsjÕ†r‰jhX1.0rІr‹jsjÕ†rŒjhX4.0r†rŽj©jæ†rj©jæ†rj©jæ†r‘j©jæ†r’jsX

         r“†r”j©jцr•hÐXglobal_var_test1br–†r—j©jæ†r˜jsjÕ†r™jhX22.0rš†r›j©jæ†rœjsX

r†ržhX;; global stringsrŸ†r jsX

r¡†r¢j©jцr£jXbind-valr¤†r¥jsjÕ†r¦jtX	g_cstringr§†r¨jsjÕ†r©j-Xi8*rª†r«jsjÕ†r¬jÁX	"Jiblet."r­†r®j©jæ†r¯jsX

r°†r±j©jцr²hÐXxtmtestr³†r´jsjÕ†rµhtj׆r¶j©jцr·jX	bind-funcr¸†r¹jsjÕ†rºjtXtest_g_cstringr»†r¼jsX

            r½†r¾j©jцr¿jXlambdarÀ†rÁjsjÕ†rÂj©jцrÃj©jæ†rÄjsX
              rņrÆj©jцrÇjXletrȆrÉjsjÕ†rÊj©jцrËj©jцrÌhÐj8†rÍjsjÕ†rÎjŸj,†rÏj©jæ†rÐj©jæ†rÑjsX
                rÒ†rÓj©jцrÔjXdotimesrÕ†rÖjsjÕ†r×j©jцrØhÐj8†rÙjsjÕ†rÚjŸj{†rÛj©jæ†rÜjsX
                  r݆rÞj©jцrßjtXprintfrà†rájsjÕ†râjÁX"g_cstring[%lld] = %c\n"rã†räjsjÕ†råhÐj8†ræjsjÕ†rçj©jцrèjtXprefré†rêjsjÕ†rëhÐX	g_cstringrì†ríjsjÕ†rîhÐj8†rïj©jæ†rðj©jæ†rñj©jæ†ròjsX
                ró†rôj©jцrõjtXprintfrö†r÷jsjÕ†røjÁX"\nSpells... %s\n"rù†rújsjÕ†rûhÐX	g_cstringrü†rýj©jæ†rþj©jæ†rÿj©jæ†rj©jæ†rjsX

         r†rj©jцrhÐXtest_g_cstringr†rj©jæ†rj©jæ†rjsX

r	†r
j©jцrhÐXxtmtestr†r
jsjÕ†rhtj׆rj©jцrjX	bind-funcr†rjsjÕ†rjtXtest_g_cstring1r†rjsX

            r†rj©jцrjXlambdar†rjsjÕ†rj©jцrj©jæ†rjsX
              r†rj©jцr jXletr!†r"jsjÕ†r#j©jцr$j©jцr%hÐXtest_cstringr&†r'jsjÕ†r(jÁX	"Niblot."r)†r*j©jæ†r+jsX
                    r,†r-j©jцr.hÐj8†r/jsjÕ†r0jŸj,†r1j©jæ†r2jsX
                    r3†r4j©jцr5hÐXtotalr6†r7jsjÕ†r8jŸj,†r9j©jæ†r:j©jæ†r;jsX
                r<†r=j©jцr>jXdotimesr?†r@jsjÕ†rAj©jцrBhÐj8†rCjsjÕ†rDjŸj{†rEj©jæ†rFjsX
                  rG†rHj©jцrIjXletrJ†rKjsjÕ†rLj©jцrMj©jцrNhÐXc1rO†rPjsjÕ†rQj©jцrRjtXprefrS†rTjsjÕ†rUhÐX	g_cstringrV†rWjsjÕ†rXhÐj8†rYj©jæ†rZj©jæ†r[jsX
                        r\†r]j©jцr^hÐXc2r_†r`jsjÕ†raj©jцrbjtXprefrc†rdjsjÕ†rehÐXtest_cstringrf†rgjsjÕ†rhhÐj8†rij©jæ†rjj©jæ†rkj©jæ†rljsX
                    rm†rnj©jцrojtXprintfrp†rqjsjÕ†rrjÁX"checking %c against %c\n"rs†rtjsjÕ†ruhÐXc1rv†rwjsjÕ†rxhÐXc2ry†rzj©jæ†r{jsX
                    r|†r}j©jцr~jXifr†r€jsjÕ†rj©jцr‚jtjµ†rƒjsjÕ†r„hÐXc1r…†r†jsjÕ†r‡hÐXc2rˆ†r‰j©jæ†rŠjsX
                        r‹†rŒj©jцrjXset!rކrjsjÕ†rhÐXtotalr‘†r’jsjÕ†r“j©jцr”jtjφr•jsjÕ†r–hÐXtotalr—†r˜jsjÕ†r™jŸj÷†ršj©jæ†r›j©jæ†rœj©jæ†rj©jæ†ržj©jæ†rŸjsX
                r †r¡hÐXtotalr¢†r£j©jæ†r¤j©jæ†r¥j©jæ†r¦jsX

         r§†r¨j©jцr©hÐXtest_g_cstring1rª†r«j©jæ†r¬jsjÕ†r­jŸj-†r®j©jæ†r¯jsX





r°†r±hX<;; for tuples, arrays and vectors, bind-val only takes *two*r²†r³jsj¿†r´hXA;; arguments. The tuple/array/vector will be initialised to zero.rµ†r¶jsX

r·†r¸j©jцr¹jXbind-valrº†r»jsjÕ†r¼jtXg_tuple1r½†r¾jsjÕ†r¿j-X	<i64,i64>rÀ†rÁj©jæ†rÂjsj¿†rÃj©jцrÄjXbind-valrņrÆjsjÕ†rÇjtXg_tuple2rȆrÉjsjÕ†rÊj-X<double,double>rˆrÌj©jæ†rÍjsX

rΆrÏj©jцrÐhÐXxtmtestrцrÒjsjÕ†rÓhtj׆rÔj©jцrÕjX	bind-funcrÖ†r×jsjÕ†rØjtXtest_g_tuplerÙ†rÚjsX

            rÛ†rÜj©jцrÝjXlambdarÞ†rßjsjÕ†ràe(j©jцráj©jæ†râjsX
              rã†räj©jцråjtXtfill!ræ†rçjsjÕ†rèhÐXg_tuple1ré†rêjsjÕ†rëjŸj÷†rìjsjÕ†ríjŸj‚†rîj©jæ†rïjsX
              rð†rñj©jцròjtXtfill!ró†rôjsjÕ†rõhÐXg_tuple2rö†r÷jsjÕ†røjhX4.0rù†rújsjÕ†rûjhX1.0rü†rýj©jæ†rþjsX
              rÿ†rj©jцrjXandr†rjsjÕ†rj©jцrjtjµ†rjsjÕ†rj©jцrjtXtrefr	†r
jsjÕ†rhÐXg_tuple1r†r
jsjÕ†rjŸj,†rj©jæ†rjsjÕ†rj©jцrhÐXdtoi64r†rjsjÕ†rj©jцrjtXtrefr†rjsjÕ†rhÐXg_tuple2r†rjsjÕ†rjŸj÷†rj©jæ†rj©jæ†rj©jæ†r jsX
                   r!†r"j©jцr#jtjµ†r$jsjÕ†r%j©jцr&hÐXdtoi64r'†r(jsjÕ†r)j©jцr*jtXtrefr+†r,jsjÕ†r-hÐXg_tuple2r.†r/jsjÕ†r0jŸj,†r1j©jæ†r2j©jæ†r3jsjÕ†r4j©jцr5jtXtrefr6†r7jsjÕ†r8hÐXg_tuple1r9†r:jsjÕ†r;jŸj÷†r<j©jæ†r=j©jæ†r>j©jæ†r?j©jæ†r@j©jæ†rAjsX

         rB†rCj©jцrDhÐXtest_g_tuplerE†rFj©jæ†rGjsjÕ†rHjŸj÷†rIj©jæ†rJjsX

rK†rLhX;; same thing with arraysrM†rNjsX

rO†rPj©jцrQjXbind-valrR†rSjsjÕ†rTjtXg_array1rU†rVjsjÕ†rWj-X|10,double|rX†rYj©jæ†rZjsj¿†r[j©jцr\jXbind-valr]†r^jsjÕ†r_jtXg_array2r`†rajsjÕ†rbj-X|10,i64|rc†rdj©jæ†rejsX

rf†rghX:;; if we just loop over and print the values in each arrayrh†rijsX

rj†rkj©jцrlhÐXxtmtestrm†rnjsjÕ†rohtj׆rpj©jцrqjX	bind-funcrr†rsjsjÕ†rtjtXtest_g_array11ru†rvjsX

            rw†rxj©jцryjXlambdarz†r{jsjÕ†r|j©jцr}j©jæ†r~jsX
              r†r€j©jцrjXletr‚†rƒjsjÕ†r„j©jцr…j©jцr†hÐj8†r‡jsjÕ†rˆjŸj,†r‰j©jæ†rŠj©jæ†r‹jsX
                rŒ†rj©jцrŽjXdotimesr†rjsjÕ†r‘j©jцr’hÐj8†r“jsjÕ†r”jŸX10r•†r–j©jæ†r—jsX
                  r˜†r™j©jцršjtXprintfr›†rœjsjÕ†rjÁX/"garray_1[%lld] = %f   garray_2[%lld] = %lld\n"rž†rŸjsX
                          r †r¡hÐj8†r¢jsjÕ†r£j©jцr¤jtXarefr¥†r¦jsjÕ†r§hÐXg_array1r¨†r©jsjÕ†rªhÐj8†r«j©jæ†r¬jsjÕ†r­hÐj8†r®jsjÕ†r¯j©jцr°jtXarefr±†r²jsjÕ†r³hÐXg_array2r´†rµjsjÕ†r¶hÐj8†r·j©jæ†r¸j©jæ†r¹j©jæ†rºj©jæ†r»j©jæ†r¼j©jæ†r½jsX

         r¾†r¿j©jцrÀhÐXtest_g_array11rÁ†rÂj©jæ†rÃjsjÕ†rÄjŸj÷†rÅj©jæ†rÆjsX

rdžrÈhX:;; but if we loop over and set some values into the arraysrɆrÊjsX

rˆrÌj©jцrÍhÐXxtmtestrΆrÏjsjÕ†rÐhtj׆rÑj©jцrÒjX	bind-funcrÓ†rÔjsjÕ†rÕjtX
test_g_array2rÖ†r×jsX

            r؆rÙj©jцrÚjXlambdarÛ†rÜjsjÕ†rÝj©jцrÞj©jæ†rßjsX
              rà†ráj©jцrâjXletrã†räjsjÕ†råj©jцræj©jцrçhÐj8†rèjsjÕ†réjŸj,†rêj©jæ†rëj©jæ†rìjsX
                rí†rîj©jцrïjXdotimesrð†rñjsjÕ†ròj©jцróhÐj8†rôjsjÕ†rõjŸX10rö†r÷j©jæ†røjsX
                  rù†rúj©jцrûjtXaset!rü†rýjsjÕ†rþhÐXg_array1rÿ†rjsjÕ†rhÐj8†rjsjÕ†rj©jцrjtXi64todr†rjsjÕ†rhÐj8†rj©jæ†r	j©jæ†r
jsX
                  r†rj©jцr
jtXaset!r†rjsjÕ†rhÐXg_array2r†rjsjÕ†rhÐj8†rjsjÕ†rhÐj8†rj©jæ†rjsX
                  r†rj©jцrjtXprintfr†rjsjÕ†rjÁX/"garray_1[%lld] = %f   garray_2[%lld] = %lld\n"r†rjsX
                          r †r!hÐj8†r"jsjÕ†r#j©jцr$jtXarefr%†r&jsjÕ†r'hÐXg_array1r(†r)jsjÕ†r*hÐj8†r+j©jæ†r,jsjÕ†r-hÐj8†r.jsjÕ†r/j©jцr0jtXarefr1†r2jsjÕ†r3hÐXg_array2r4†r5jsjÕ†r6hÐj8†r7j©jæ†r8j©jæ†r9j©jæ†r:jsX
                r;†r<j©jцr=jtjµ†r>jsjÕ†r?j©jцr@hÐXdtoi64rA†rBjsjÕ†rCj©jцrDjtXarefrE†rFjsjÕ†rGhÐXg_array1rH†rIjsjÕ†rJjŸj-†rKj©jæ†rLj©jæ†rMjsX
                   rN†rOj©jцrPjtXarefrQ†rRjsjÕ†rShÐXg_array2rT†rUjsjÕ†rVjŸj-†rWj©jæ†rXj©jæ†rYj©jæ†rZj©jæ†r[j©jæ†r\jsX

         r]†r^j©jцr_hÐX
test_g_array2r`†raj©jæ†rbjsjÕ†rcjŸj÷†rdj©jæ†rejsX

rf†rghX(;; just to test, let's try a large arrayrh†rijsX

rj†rkj©jцrljXbind-valrm†rnjsjÕ†rojtXg_array3rp†rqjsjÕ†rrj-X|100000000,i64|rs†rtj©jæ†rujsX

rv†rwj©jцrxhÐXxtmtestry†rzjsjÕ†r{htj׆r|j©jцr}jX	bind-funcr~†rjsjÕ†r€jtX
test_g_array3r†r‚jsX

            rƒ†r„j©jцr…jXlambdar††r‡jsjÕ†rˆj©jцr‰j©jæ†rŠjsX
              r‹†rŒj©jцrjXletrކrjsjÕ†rj©jцr‘j©jцr’hÐj8†r“jsjÕ†r”jŸj,†r•j©jæ†r–j©jæ†r—jsX
                r˜†r™j©jцršjXdotimesr›†rœjsjÕ†rj©jцržhÐj8†rŸjsjÕ†r jŸX	100000000r¡†r¢j©jæ†r£jsX
                  r¤†r¥j©jцr¦jtXaset!r§†r¨jsjÕ†r©hÐXg_array3rª†r«jsjÕ†r¬hÐj8†r­jsjÕ†r®hÐj8†r¯j©jæ†r°j©jæ†r±jsX
                r²†r³j©jцr´jtjµ†rµjsjÕ†r¶j©jцr·jtXprefr¸†r¹jsjÕ†rºhÐXg_array3r»†r¼jsjÕ†r½jŸX87654321r¾†r¿j©jæ†rÀjsX
                   rÁ†rÂjŸX87654321rÆrÄj©jæ†rÅj©jæ†rÆj©jæ†rÇj©jæ†rÈjsX

         rɆrÊj©jцrËhÐX
test_g_array3r̆rÍj©jæ†rÎjsjÕ†rÏjŸj÷†rÐj©jæ†rÑjsX

rÒ†rÓhX?;; if you want to bind a global pointer, then the third 'value'rÔ†rÕjsj¿†rÖhXM;; argument is the size of the memory to allocate (in elements, not in bytes)r׆rØjsX

rÙ†rÚj©jцrÛjXbind-valr܆rÝjsjÕ†rÞjtXg_ptr0r߆ràjsjÕ†ráj-Xdouble*râ†rãjsjÕ†räjŸX10rå†ræj©jæ†rçjsX

rè†réj©jцrêhÐXxtmtestrë†rìjsjÕ†ríhtj׆rîj©jцrïjX	bind-funcrð†rñjsjÕ†ròjtXtest_g_ptr0ró†rôjsX

            rõ†röj©jцr÷jXlambdarø†rùjsjÕ†rúj©jцrûj©jæ†rüjsX
              rý†rþj©jцrÿjXletr†rjsjÕ†rj©jцrj©jцrhÐXtotalr†rjsjÕ†rjhX0.0r†r	j©jæ†r
jsX
                    r†rj©jцr
hÐj8†rjsjÕ†rjŸj,†rj©jæ†rj©jæ†rjsX
                r†rj©jцrjXdotimesr†rjsjÕ†rj©jцrhÐj8†rjsjÕ†rjŸX10r†rj©jæ†rjsX
                  r†r j©jцr!jtXpset!r"†r#jsjÕ†r$hÐXg_ptr0r%†r&jsjÕ†r'hÐj8†r(jsjÕ†r)j©jцr*jtXi64todr+†r,jsjÕ†r-hÐj8†r.j©jæ†r/j©jæ†r0jsX
                  r1†r2j©jцr3jXset!r4†r5jsjÕ†r6hÐXtotalr7†r8jsjÕ†r9j©jцr:jtjφr;jsjÕ†r<hÐXtotalr=†r>jsjÕ†r?j©jцr@jtXprefrA†rBjsjÕ†rChÐXg_ptr0rD†rEjsjÕ†rFhÐj8†rGj©jæ†rHj©jæ†rIj©jæ†rJj©jæ†rKjsX
                rL†rMhÐXtotalrN†rOj©jæ†rPj©jæ†rQj©jæ†rRjsX

         rS†rTj©jцrUhÐXtest_g_ptr0rV†rWj©jæ†rXjsjÕ†rYjhX45.0rZ†r[j©jæ†r\jsX

r]†r^j©jцr_jXbind-valr`†rajsjÕ†rbjtXg_ptr1rc†rdjsjÕ†rej-X|4,i32|*rf†rgjsjÕ†rhjŸjî†rij©jæ†rjjsj¿†rkj©jцrljXbind-valrm†rnjsjÕ†rojtXg_ptr2rp†rqjsjÕ†rrj-X
<i64,double>*rs†rtjsjÕ†rujŸj‚†rvj©jæ†rwjsX

rx†ryj©jцrzhÐXxtmtestr{†r|jsjÕ†r}htj׆r~j©jцrjX	bind-funcr€†rjsjÕ†r‚jtXtest_g_ptr1rƒ†r„jsX

            r…†r†j©jцr‡jXlambdarˆ†r‰jsjÕ†rŠj©jцr‹j©jæ†rŒjsX
              r†rŽj©jцrjtXafill!r†r‘jsjÕ†r’hÐXg_ptr1r“†r”jsjÕ†r•jŸX11r–†r—jsjÕ†r˜jŸX66r™†ršjsjÕ†r›jŸX35rœ†rjsjÕ†ržjŸX81rŸ†r j©jæ†r¡jsX
              r¢†r£j©jцr¤jtXtset!r¥†r¦jsjÕ†r§hÐXg_ptr2r¨†r©jsjÕ†rªjŸj÷†r«jsjÕ†r¬jhX35.0r­†r®j©jæ†r¯jsX
              r°†r±j©jцr²jtXprintfr³†r´jsjÕ†rµjÁX"%f :: %d\n"r¶†r·jsjÕ†r¸j©jцr¹jtXtrefrº†r»jsjÕ†r¼hÐXg_ptr2r½†r¾jsjÕ†r¿jŸj÷†rÀj©jæ†rÁjsjÕ†rÂj©jцrÃjtXarefrĆrÅjsjÕ†rÆhÐXg_ptr1rdžrÈjsjÕ†rÉjŸjî†rÊj©jæ†rËj©jæ†rÌjsX
              r͆rÎj©jцrÏjtXarefrІrÑjsjÕ†rÒhÐXg_ptr1rÓ†rÔjsjÕ†rÕjŸj†rÖj©jæ†r×j©jæ†rØj©jæ†rÙjsX

         rÚ†rÛj©jцrÜhÐXtest_g_ptr1r݆rÞj©jæ†rßjsjÕ†ràjŸX81rá†râj©jæ†rãjsjÕ†rähX$;; should also print 35.000000 :: 35rå†ræjsX

rç†rèhX(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ré†rêjsj¿†rëhX;;rì†ríjsj¿†rîhX;; Callbacksrï†rðjsX

rñ†ròj©jцróhÐXxtmtestrô†rõjsjÕ†röhtj׆r÷j©jцrøjX	bind-funcrù†rújsjÕ†rûjtX
callback-testrü†rýjsX

            rþ†rÿj©jцrjXlambdar†rjsjÕ†rj©jцrhÐXtimer†rj-X:i64r†rjsjÕ†r	hÐXcountr
†rj-X:i64r†r
j©jæ†rjsX
              r†rj©jцrjtXprintfr†rjsjÕ†rjÁX"time: %lld:%lld\n"r†rjsjÕ†rhÐXtimer†rjsjÕ†rhÐXcountr†rj©jæ†rjsX
              r†rj©jцr jtXcallbackr!†r"jsjÕ†r#j©jцr$jtjφr%jsjÕ†r&hÐXtimer'†r(jsjÕ†r)jŸX1000r*†r+j©jæ†r,jsjÕ†r-hÐX
callback-testr.†r/jsjÕ†r0j©jцr1jtjφr2jsjÕ†r3hÐXtimer4†r5jsjÕ†r6jŸX22050r7†r8j©jæ†r9jsjÕ†r:j©jцr;jtjφr<jsjÕ†r=hÐXcountr>†r?jsjÕ†r@jŸj÷†rAj©jæ†rBj©jæ†rCj©jæ†rDj©jæ†rEjsX

         rF†rGj©jцrHjtXcallbackrI†rJhÐX-testrK†rLjsjÕ†rMj©jцrNjtXnowrO†rPj©jæ†rQjsjÕ†rRjŸj,†rSj©jæ†rTj©jæ†rUjsX

rV†rWhX);; compiling this will stop the callbacksrX†rYjsj¿†rZhX;;r[†r\jsj¿†r]hX%;; of course we need to keep the typer^†r_jsj¿†r`hX%;; signature the same [void,i64,i64]*ra†rbjsj¿†rchX;;rd†rejsj¿†rfj©jцrghÐXxtmtestrh†rijsjÕ†rjhtj׆rkj©jцrljX	bind-funcrm†rnjsjÕ†rojtX
callback-testrp†rqjsX

            rr†rsj©jцrtjXlambdaru†rvjsjÕ†rwj©jцrxhÐXtimery†rzj-X:i64r{†r|jsjÕ†r}hÐXcountr~†rj-X:i64r€†rj©jæ†r‚jsX
              rƒ†r„jŠX#tr…†r†j©jæ†r‡j©jæ†rˆjsX

         r‰†rŠj©jцr‹jtXcallbackrŒ†rhÐX-testrކrj©jæ†rj©jæ†r‘jsX

r’†r“hX';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r”†r•jsj¿†r–hX;;r—†r˜jsj¿†r™hX;; some memzone testsrš†r›jsX

rœ†rj©jцržhÐXxtmtestrŸ†r jsjÕ†r¡htj׆r¢j©jцr£jX	bind-funcr¤†r¥jsjÕ†r¦jtX
memzone-test1r§†r¨jsX

            r©†rªj©jцr«jXlambdar¬†r­jsjÕ†r®j©jцr¯j©jæ†r°jsX
              r±†r²j©jцr³jXletr´†rµjsjÕ†r¶j©jцr·j©jцr¸hÐj4	†r¹j-X:|5,double|*rº†r»jsjÕ†r¼j©jцr½jtXzallocr¾†r¿j©jæ†rÀj©jæ†rÁj©jæ†rÂjsX
                rÆrÄj©jцrÅjtXaset!rƆrÇjsjÕ†rÈhÐj4	†rÉjsjÕ†rÊjŸj,†rËjsX
                       r̆rÍj©jцrÎjXmemzonerφrÐjsjÕ†rÑjŸX1024rÒ†rÓjsX
                         rÔ†rÕj©jцrÖjXletr׆rØjsjÕ†rÙj©jцrÚj©jцrÛhÐj"†rÜj-X
:|10,double|*r݆rÞjsjÕ†rßj©jцràjtXzallocrá†râj©jæ†rãj©jæ†räj©jæ†råjsX
                           ræ†rçj©jцrèjtXaset!ré†rêjsjÕ†rëhÐj"†rìjsjÕ†ríjŸj,†rîjsjÕ†rïjhX3.5rð†rñj©jæ†ròjsX
                           ró†rôj©jцrõjtXarefrö†r÷jsjÕ†røhÐj"†rùjsjÕ†rújŸj,†rûj©jæ†rüj©jæ†rýj©jæ†rþj©jæ†rÿjsX
                r†rj©jцrjXletr†rjsjÕ†rj©jцrj©jцrhÐjK	†rj-X	:|9,i32|*r	†r
jsjÕ†rj©jцrjtXzallocr
†rj©jæ†rj©jæ†rj©jæ†rjsX
                  r†rj©jцrjtXaset!r†rjsjÕ†rhÐjK	†rjsjÕ†rjŸj,†rjsjÕ†rjŸX99r†rj©jæ†rjsX
                  r†r j©jцr!jtXarefr"†r#jsjÕ†r$hÐj4	†r%jsjÕ†r&jŸj,†r'j©jæ†r(j©jæ†r)j©jæ†r*j©jæ†r+j©jæ†r,jsX

         r-†r.j©jцr/hÐX
memzone-test1r0†r1j©jæ†r2jsjÕ†r3jhX3.5r4†r5j©jæ†r6jsX

r7†r8j©jцr9hÐXxtmtestr:†r;jsjÕ†r<htj׆r=j©jцr>jX	bind-funcr?†r@jsjÕ†rAjtX
memzone-test2rB†rCjsX

            rD†rEj©jцrFjXlambdarG†rHjsjÕ†rIj©jцrJj©jæ†rKjsX
              rL†rMj©jцrNjXmemzonerO†rPjsjÕ†rQjŸX1024rR†rSjsX
                rT†rUj©jцrVjXletrW†rXjsjÕ†rYj©jцrZj©jцr[hÐj~†r\j-X
:|15,double|*r]†r^jsjÕ†r_j©jцr`jtXzallocra†rbj©jæ†rcj©jæ†rdjsX
                      re†rfj©jцrghÐjކrhjsjÕ†rij©jцrjjXlambdark†rljsjÕ†rmj©jцrnhÐXfaro†rpj-X
:|15,double|*rq†rrj©jæ†rsjsX
                           rt†ruj©jцrvjXmemzonerw†rxjsjÕ†ryjŸX1024rz†r{jsX
                             r|†r}j©jцr~jXletr†r€jsjÕ†rj©jцr‚j©jцrƒhÐj"†r„j-X
:|10,double|*r…†r†jsjÕ†r‡j©jцrˆjtXzallocr‰†rŠj©jæ†r‹j©jæ†rŒjsX$
                                   r†rŽj©jцrhÐj8†rjsjÕ†r‘jŸj,†r’j©jæ†r“j©jæ†r”jsX 
                               r•†r–j©jцr—jXdotimesr˜†r™jsjÕ†ršj©jцr›hÐj8†rœjsjÕ†rjŸX10rž†rŸj©jæ†r jsX"
                                 r¡†r¢j©jцr£jtXaset!r¤†r¥jsjÕ†r¦hÐj"†r§jsjÕ†r¨hÐj8†r©jsjÕ†rªj©jцr«jtj(†r¬jsjÕ†r­j©jцr®jtXarefr¯†r°jsjÕ†r±hÐXfar²†r³jsjÕ†r´hÐj8†rµj©jæ†r¶jsjÕ†r·j©jцr¸jtXrandomr¹†rºj©jæ†r»j©jæ†r¼j©jæ†r½j©jæ†r¾jsX 
                               r¿†rÀhÐj"†rÁj©jæ†rÂj©jæ†rÃj©jæ†rÄj©jæ†rÅj©jæ†rÆjsX
                  rdžrÈj©jцrÉhÐjކrÊjsjÕ†rËhÐj~†rÌj©jæ†rÍj©jæ†rÎj©jæ†rÏj©jæ†rÐj©jæ†rÑjsX

         rÒ†rÓj©jцrÔhÐX
memzone-test2rÕ†rÖj©jæ†r×j©jæ†rØjsX

rÙ†rÚj©jцrÛhÐXxtmtestr܆rÝjsjÕ†rÞhtj׆rßj©jцràjX	bind-funcrá†râjsjÕ†rãjtX
memzone-test3rä†råjsX

            ræ†rçj©jцrèjXlambdaré†rêjsjÕ†rëj©jцrìj©jæ†ríjsX
              rî†rïj©jцrðjXletrñ†ròjsjÕ†rój©jцrôj©jцrõhÐjp†röjsjÕ†r÷j©jцrøjXmemzonerù†rúhÐX-test2rû†rüj©jæ†rýj©jæ†rþjsX
                    rÿ†rj©jцrhÐj8†rjsjÕ†rjŸj,†rj©jæ†rj©jæ†rjsX
                r†rj©jцr	jXdotimesr
†rjsjÕ†rj©jцr
hÐj8†rjsjÕ†rjŸX10r†rj©jæ†rjsjÕ†rj©jцrjtXprintfr†rjsjÕ†rjÁX"%lld:%f\n"r†rjsjÕ†rhÐj8†re(jsjÕ†rj©jцrjtXarefr†rjsjÕ†r hÐjp†r!jsjÕ†r"hÐj8†r#j©jæ†r$j©jæ†r%j©jæ†r&j©jæ†r'j©jæ†r(j©jæ†r)jsX

         r*†r+j©jцr,hÐX
memzone-test3r-†r.j©jæ†r/j©jæ†r0jsjÕ†r1hX;; should print all 0.0'sr2†r3jsX

r4†r5j©jцr6hÐXxtmtestr7†r8jsjÕ†r9htj׆r:j©jцr;jX	bind-funcr<†r=jsjÕ†r>jtX
memzone-test4r?†r@jsX

            rA†rBj©jцrCjXlambdarD†rEjsjÕ†rFj©jцrGj©jæ†rHjsX
              rI†rJj©jцrKjXmemzonerL†rMjsjÕ†rNjŸX1024rO†rPjsjÕ†rQj©jцrRjtj(†rSjsjÕ†rTjŸX44100rU†rVjsjÕ†rWjŸX10rX†rYj©jæ†rZjsX
                       r[†r\j©jцr]jXletr^†r_jsjÕ†r`j©jцraj©jцrbhÐj"†rcj-X:|5,double|*rd†rejsjÕ†rfj©jцrgjtXallocrh†rij©jæ†rjj©jæ†rkj©jæ†rljsX
                         rm†rnj©jцrojtXaset!rp†rqjsjÕ†rrhÐj"†rsjsjÕ†rtjŸj,†rujsjÕ†rvjhX5.5rw†rxj©jæ†ryjsX
                         rz†r{j©jцr|jtXarefr}†r~jsjÕ†rhÐj"†r€jsjÕ†rjŸj,†r‚j©jæ†rƒj©jæ†r„j©jæ†r…j©jæ†r†j©jæ†r‡jsX

         rˆ†r‰j©jцrŠhÐX
memzone-test4r‹†rŒj©jæ†rjsjÕ†rŽjhX5.50000r†rj©jæ†r‘jsX

r’†r“hX;;r”†r•jsj¿†r–hXI;; Large allocation of memory on BUILD (i.e. when the closure is created)r—†r˜jsj¿†r™hXF;; requires an optional argument (i.e. an amount of memory to allocaterš†r›jsj¿†rœhX%;; specifically for closure creation)r†ržjsj¿†rŸhX;;r †r¡jsj¿†r¢hXI;; This memory is automatically free'd whenever you recompile the closurer£†r¤jsj¿†r¥hX@;; (it will be destroyed and replaced by a new allocation of ther¦†r§jsj¿†r¨hXE;;  same amount or whatever new amount you have allocated for closurer©†rªjsj¿†r«hX;;  compilation)r¬†r­jsj¿†r®hX;;r¯†r°jsj¿†r±j©jцr²hÐXxtmtestr³†r´jsjÕ†rµhtj׆r¶j©jцr·jX	bind-funcr¸†r¹jsjÕ†rºjtXclosure-zalloc-testr»†r¼jsjÕ†r½jŸX1000000r¾†r¿jsX

            rÀ†rÁj©jцrÂjXletrÆrÄjsjÕ†rÅj©jцrÆj©jцrÇhÐj~†rÈj-X:|100000,double|*rɆrÊjsjÕ†rËj©jцrÌjtXzallocr͆rÎj©jæ†rÏj©jæ†rÐj©jæ†rÑjsX
              rÒ†rÓj©jцrÔjXlambdarÕ†rÖjsjÕ†r×j©jцrØj©jæ†rÙjsX
                rÚ†rÛj©jцrÜjtXaset!r݆rÞjsjÕ†rßhÐj~†ràjsjÕ†rájŸj,†râjsjÕ†rãjhX1.0rä†råj©jæ†ræjsX
                rç†rèj©jцréjtXarefrê†rëjsjÕ†rìhÐj~†ríjsjÕ†rîjŸj,†rïj©jæ†rðj©jæ†rñj©jæ†ròj©jæ†rójsX

         rô†rõj©jцröhÐXclosure-zalloc-testr÷†røjsjÕ†rùjŸX1000000rú†rûj©jæ†rüj©jæ†rýjsX

rþ†rÿhX.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r†rjsj¿†rhX;;r†rjsj¿†rhX;; Ad-Hoc Polymorphismr†rjsj¿†rhX;;r	†r
jsj¿†rhX.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r†r
jsX

r†rhX);; extempore supports ad-hoc polymorphismr†rjsj¿†rhX(;; at some stage in the future this willr†rjsj¿†rhX#;; be implicit - but for the momentr†rjsj¿†rhX+;; it is explicitly defined using bind-polyr†rjsX

r†rhX,;; ad-hoc polymorphism allows you to provider†rjsj¿†rhX);; different specialisations depending onr †r!jsj¿†r"hX);; type.  In other words, a single 'name'r#†r$jsj¿†r%hX$;; can be bound to multiple functionr&†r'jsj¿†r(hX&;; implementations each with a uniquter)†r*jsj¿†r+hX;; type.r,†r-jsX


r.†r/hX);; poly variables can be for functions ofr0†r1jsj¿†r2hX;; mixed argument lengthsr3†r4jsj¿†r5hX;;r6†r7jsj¿†r8hX;; so for example:r9†r:jsj¿†r;j©jцr<jX	bind-funcr=†r>jsjÕ†r?jtX
poly-test4r@†rAjsX
  rB†rCj©jцrDjXlambdarE†rFjsjÕ†rGj©jцrHhÐj"†rIj-X:i8*rJ†rKj©jæ†rLjsX
    rM†rNj©jцrOjtXprintfrP†rQjsjÕ†rRjÁX"%s\n"rS†rTjsjÕ†rUhÐj"†rVj©jæ†rWj©jæ†rXj©jæ†rYjsX

rZ†r[j©jцr\jX	bind-funcr]†r^jsjÕ†r_jtX
poly-test5r`†rajsX
  rb†rcj©jцrdjXlambdare†rfjsjÕ†rgj©jцrhhÐj"†rij-X:i8*rj†rkjsjÕ†rlhÐj4	†rmj-X:i8*rn†roj©jæ†rpjsX
    rq†rrj©jцrsjtXprintfrt†rujsjÕ†rvjÁX	"%s %s\n"rw†rxjsjÕ†ryhÐj"†rzjsjÕ†r{hÐj4	†r|j©jæ†r}j©jæ†r~j©jæ†rjsX

r€†rj©jцr‚jX	bind-funcrƒ†r„jsjÕ†r…jtX
poly-test6r††r‡jsX
  rˆ†r‰j©jцrŠjXlambdar‹†rŒjsjÕ†rj©jцrŽhÐj"†rj-X:i8*r†r‘jsjÕ†r’hÐj4	†r“j-X:i8*r”†r•jsjÕ†r–hÐjK	†r—j-X:i8*r˜†r™j©jæ†ršjsX
    r›†rœj©jцrjtXprintfrž†rŸjsjÕ†r jÁX"%s %s %s\n"r¡†r¢jsjÕ†r£hÐj"†r¤jsjÕ†r¥hÐj4	†r¦jsjÕ†r§hÐjK	†r¨j©jæ†r©j©jæ†rªj©jæ†r«jsX

r¬†r­hX-;; bind these three functions to poly 'print'r®†r¯jsj¿†r°j©jцr±jX	bind-polyr²†r³jsjÕ†r´jtX	testprintrµ†r¶jsjÕ†r·hÐX
poly-test4r¸†r¹j©jæ†rºjsj¿†r»j©jцr¼jX	bind-polyr½†r¾jsjÕ†r¿jtX	testprintrÀ†rÁjsjÕ†rÂhÐX
poly-test5rÆrÄj©jæ†rÅjsj¿†rÆj©jцrÇjX	bind-polyrȆrÉjsjÕ†rÊjtX	testprintrˆrÌjsjÕ†rÍhÐX
poly-test6rΆrÏj©jæ†rÐjsX

rцrÒj©jцrÓhÐXxtmtestrÔ†rÕjsjÕ†rÖhtj׆r×j©jцrØjX	bind-funcrÙ†rÚjsjÕ†rÛjtX
poly-test7r܆rÝjsX

            rÞ†rßj©jцràjXlambdará†râjsjÕ†rãj©jцräj©jæ†råjsX
              ræ†rçj©jцrèhÐX	testprintré†rêjsjÕ†rëjÁX
"extempore's"rì†ríj©jæ†rîjsX
              rï†rðj©jцrñhÐX	testprintrò†rójsjÕ†rôjÁX
"extempore's"rõ†röjsjÕ†r÷jÁX"polymorphism"rø†rùj©jæ†rújsX
              rû†rüj©jцrýhÐX	testprintrþ†rÿjsjÕ†r jÁX
"extempore's"r †r jsjÕ†r jÁX"polymorphism"r †r jsjÕ†r jÁX"rocks"r †r j©jæ†r	 j©jæ†r
 j©jæ†r jsX

         r †r
 j©jцr hÐX
poly-test7r †r j©jæ†r j©jæ†r jsX

r †r hX;; polys can Also specializer †r jsj¿†r hX;; on the return typer †r jsj¿†r j©jцr jX	bind-funcr †r jsjÕ†r jtX
poly-test8r †r  jsX
  r! †r" j©jцr# jXlambdar$ †r% jsjÕ†r& j©jцr' hÐj"†r( j-X:doubler) †r* j©jæ†r+ jsX
    r, †r- j©jцr. jtj(†r/ jsjÕ†r0 hÐj"†r1 jsjÕ†r2 hÐj"†r3 j©jæ†r4 j©jæ†r5 j©jæ†r6 jsX

r7 †r8 j©jцr9 jX	bind-funcr: †r; jsjÕ†r< jtX
poly-test9r= †r> jsX
  r? †r@ j©jцrA jXlambdarB †rC jsjÕ†rD j©jцrE hÐj"†rF j-X:doublerG †rH j©jæ†rI jsX
    rJ †rK j©jцrL hÐXdtoi64rM †rN jsjÕ†rO j©jцrP jtj(†rQ jsjÕ†rR hÐj"†rS jsjÕ†rT hÐj"†rU j©jæ†rV j©jæ†rW j©jæ†rX j©jæ†rY jsX

rZ †r[ j©jцr\ jX	bind-polyr] †r^ jsjÕ†r_ jtXsqrdr` †ra jsjÕ†rb hÐX
poly-test8rc †rd j©jæ†re jsj¿†rf j©jцrg jX	bind-polyrh †ri jsjÕ†rj jtXsqrdrk †rl jsjÕ†rm hÐX
poly-test9rn †ro j©jæ†rp jsX

rq †rr hX;; specialize on [i64,double]*rs †rt jsj¿†ru hX;;rv †rw jsj¿†rx j©jцry hÐXxtmtestrz †r{ jsjÕ†r| htj׆r} j©jцr~ jX	bind-funcr †r€ jsjÕ†r jtXpoly-test10r‚ †rƒ j-X:[i64,double]*r„ †r… jsX

            r† †r‡ j©jцrˆ jXlambdar‰ †rŠ jsjÕ†r‹ j©jцrŒ hÐj"†r j©jæ†rŽ jsX
              r †r j©jцr‘ jtjφr’ jsjÕ†r“ jŸj÷†r” jsjÕ†r• j©jцr– hÐXsqrdr— †r˜ jsjÕ†r™ hÐj"†rš j©jæ†r› j©jæ†rœ j©jæ†r j©jæ†rž jsX

         rŸ †r  j©jцr¡ hÐXpoly-test10r¢ †r£ jsjÕ†r¤ jhX5.0r¥ †r¦ j©jæ†r§ j©jæ†r¨ jsX

r© †rª hX ;; specialize on [double,doube]*r« †r¬ jsj¿†r­ j©jцr® hÐXxtmtestr¯ †r° jsjÕ†r± htj׆r² j©jцr³ jX	bind-funcr´ †rµ jsjÕ†r¶ jtXpoly-test11r· †r¸ j-X:[double,double]*r¹ †rº jsX

            r» †r¼ j©jцr½ jXlambdar¾ †r¿ jsjÕ†rÀ j©jцrÁ hÐj"†r j©jæ†rà jsX
              rÄ †rÅ j©jцrÆ jtjφrÇ jsjÕ†rÈ jhX1.0rÉ †rÊ jsjÕ†rË j©jцrÌ hÐXsqrdrÍ †rÎ jsjÕ†rÏ hÐj"†rÐ j©jæ†rÑ j©jæ†rÒ j©jæ†rÓ j©jæ†rÔ jsX

         rÕ †rÖ j©jцr× hÐXpoly-test11rØ †rÙ jsjÕ†rÚ jhX5.0rÛ †rÜ j©jæ†rÝ j©jæ†rÞ jsX


rß †rà hX$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;rá †râ jsj¿†rã hX;;rä †rå jsj¿†ræ hX!;; a little test for zone cleanuprç †rè jsj¿†ré hX;;rê †rë jsj¿†rì j©jцrí jX	bind-funcrî †rï jsjÕ†rð jtXMyLittleCleanupTestrñ †rò jsX
  ró †rô j©jцrõ jXlambdarö †r÷ jsjÕ†rø j©jцrù j©jæ†rú jsX
    rû †rü j©jцrý jXletrþ †rÿ jsjÕ†r!j©jцr!j©jцr!hÐXtmp2r!†r!j-X:i8*r!†r!jsjÕ†r!j©jцr!jtXallocr	!†r
!jsjÕ†r!jŸjv†r!j©jæ†r
!j©jæ†r!j©jæ†r!jsX
      r!†r!j©jцr!hÐXcleanupr!†r!jsjÕ†r!j©jцr!jtXprintlnr!†r!jsjÕ†r!jÁX"Clean up before leaving zone!"r!†r!j©jæ†r!j©jæ†r!jsX
      r!†r!hÐXtmp2r !†r!!j©jæ†r"!j©jæ†r#!j©jæ†r$!jsX

r%!†r&!j©jцr'!hÐXxtmtestr(!†r)!jsjÕ†r*!htj׆r+!j©jцr,!jX	bind-funcr-!†r.!jsjÕ†r/!jtXcleanup-testr0!†r1!jsX

            r2!†r3!j©jцr4!jXlambdar5!†r6!jsjÕ†r7!j©jцr8!j©jæ†r9!jsX
              r:!†r;!j©jцr<!jXletzr=!†r>!jsjÕ†r?!j©jцr@!j©jцrA!hÐXtmprB!†rC!j-X:i8*rD!†rE!jsjÕ†rF!j©jцrG!jtXallocrH!†rI!jsjÕ†rJ!jŸjv†rK!j©jæ†rL!j©jæ†rM!jsX
                     rN!†rO!j©jцrP!hÐXt2rQ!†rR!jsjÕ†rS!j©jцrT!hÐXMyLittleCleanupTestrU!†rV!j©jæ†rW!j©jæ†rX!j©jæ†rY!jsX
                rZ!†r[!j©jцr\!jXbeginr]!†r^!jsX
                  r_!†r`!j©jцra!jtXprintlnrb!†rc!jsjÕ†rd!jÁX
"In Zone ..."re!†rf!j©jæ†rg!jsX
                  rh!†ri!jŸj÷†rj!j©jæ†rk!j©jæ†rl!jsX
              rm!†rn!j©jцro!jtXprintlnrp!†rq!jsjÕ†rr!jÁX"Out of zone ..."rs!†rt!j©jæ†ru!jsX
              rv!†rw!hÐXvoidrx!†ry!j©jæ†rz!j©jæ†r{!jsX

         r|!†r}!j©jцr~!hÐXcleanup-testr!†r€!j©jæ†r!j©jæ†r‚!jsX

rƒ!†r„!hX;;;;;;;;;;;;;;;;;;r…!†r†!jsj¿†r‡!hX;; vector typesrˆ!†r‰!jsX

rŠ!†r‹!hX;; (bind-func vector-test1rŒ!†r!jsj¿†rŽ!hX;;   (lambda ()r!†r!jsj¿†r‘!hX$;;     (let ((v1:/4,float/* (alloc))r’!†r“!jsj¿†r”!hX;; 	  (v2:/4,float/* (alloc))r•!†r–!jsj¿†r—!hX;; 	  (v3:/4,float/* (alloc)))r˜!†r™!jsj¿†rš!hX$;;       (vfill! v1 4.0 3.0 2.0 1.0)r›!†rœ!jsj¿†r!hX$;;       (vfill! v2 1.0 2.0 3.0 4.0)rž!†rŸ!jsj¿†r !hX$;;       (vfill! v3 5.0 5.0 5.0 5.0)r¡!†r¢!jsj¿†r£!hX;;       (let ((v4 (* v1 v2))r¤!†r¥!jsj¿†r¦!hXG;; 	    (v5 (> v3 v4))) ;; unforunately vector conditionals don't work!r§!†r¨!jsj¿†r©!hXl;; 	(printf "mul:%f:%f:%f:%f\n" (ftod (vref v4 0)) (ftod (vref v4 1)) (ftod (vref v4 2)) (ftod (vref v4 3)))rª!†r«!jsj¿†r¬!hXx;; 	(printf "cmp:%d:%d:%d:%d\n" (i1toi32 (vref v5 0)) (i1toi32 (vref v5 1)) (i1toi32 (vref v5 2)) (i1toi32 (vref v5 3)))r­!†r®!jsj¿†r¯!hX;; 	void))))r°!†r±!jsX

r²!†r³!hX;; (test-xtfunc (vector-test1))r´!†rµ!jsX

r¶!†r·!j©jцr¸!jX	bind-funcr¹!†rº!jsjÕ†r»!jtXvector-test2r¼!†r½!jsX
  r¾!†r¿!j©jцrÀ!jXlambdarÁ!†rÂ!jsjÕ†rÃ!j©jцrÄ!j©jæ†rÅ!jsX
    rÆ!†rÇ!j©jцrÈ!jXletrÉ!†rÊ!jsjÕ†rË!j©jцrÌ!j©jцrÍ!hÐXv1rÎ!†rÏ!j-X:/4,float/*rÐ!†rÑ!jsjÕ†rÒ!j©jцrÓ!jtXallocrÔ!†rÕ!j©jæ†rÖ!j©jæ†r×!jsX
	  rØ!†rÙ!j©jцrÚ!hÐXv2rÛ!†rÜ!j-X:/4,float/*rÝ!†rÞ!jsjÕ†rß!j©jцrà!jtXallocrá!†râ!j©jæ†rã!j©jæ†rä!j©jæ†rå!jsX
      ræ!†rç!j©jцrè!jtXvfill!ré!†rê!jsjÕ†rë!hÐXv1rì!†rí!jsjÕ†rî!jhX1.0rï!†rð!jsjÕ†rñ!jhX2.0rò!†ró!jsjÕ†rô!jhX4.0rõ!†rö!jsjÕ†r÷!jhX8.0rø!†rù!j©jæ†rú!jsX
      rû!†rü!j©jцrý!jtXvfill!rþ!†rÿ!jsjÕ†r"hÐXv2r"†r"jsjÕ†r"jhX2.0r"†r"jsjÕ†r"jhX2.5r"†r"jsjÕ†r	"jhX2.25r
"†r"jsjÕ†r"jhX2.125r
"†r"j©jæ†r"jsX
      r"†r"j©jцr"jtj(†r"jsjÕ†r"hÐXv1r"†r"jsjÕ†r"hÐXv2r"†r"j©jæ†r"j©jæ†r"j©jæ†r"j©jæ†r"jsX

r"†r"j©jцr "hÐXxtmtestr!"†r""jsjÕ†r#"htj׆r$"j©jцr%"jX	bind-funcr&"†r'"jsjÕ†r("jtXvector-test3r)"†r*"jsX

            r+"†r,"j©jцr-"jXlambdar."†r/"jsjÕ†r0"j©jцr1"j©jæ†r2"jsX
              r3"†r4"j©jцr5"jXletr6"†r7"jsjÕ†r8"j©jцr9"j©jцr:"hÐj"†r;"jsjÕ†r<"j©jцr="hÐXvector-test2r>"†r?"j©jæ†r@"j©jæ†rA"j©jæ†rB"jsX
                rC"†rD"j©jцrE"jtXprintfrF"†rG"jsjÕ†rH"jÁX"%f:%f:%f:%f\n"rI"†rJ"jsX
                        rK"†rL"j©jцrM"jtXftodrN"†rO"jsjÕ†rP"j©jцrQ"jtXvrefrR"†rS"jsjÕ†rT"hÐj"†rU"jsjÕ†rV"jŸj,†rW"j©jæ†rX"j©jæ†rY"jsX
                        rZ"†r["j©jцr\"jtXftodr]"†r^"jsjÕ†r_"j©jцr`"jtXvrefra"†rb"jsjÕ†rc"hÐj"†rd"jsjÕ†re"jŸj÷†rf"j©jæ†rg"j©jæ†rh"jsX
                        ri"†rj"j©jцrk"jtXftodrl"†rm"jsjÕ†rn"j©jцro"jtXvrefrp"†rq"jsjÕ†rr"hÐj"†rs"jsjÕ†rt"jŸjî†ru"j©jæ†rv"j©jæ†rw"jsX
                        rx"†ry"j©jцrz"jtXftodr{"†r|"jsjÕ†r}"j©jцr~"jtXvrefr"†r€"jsjÕ†r"hÐj"†r‚"jsjÕ†rƒ"jŸj†r„"j©jæ†r…"j©jæ†r†"j©jæ†r‡"jsX
                rˆ"†r‰"hÐXvoidrŠ"†r‹"j©jæ†rŒ"j©jæ†r"j©jæ†rŽ"jsX

         r"†r"j©jцr‘"jtXvectorr’"†r“"hÐX-test3r”"†r•"j©jæ†r–"j©jæ†r—"jsX

r˜"†r™"hX;; vectorised sine funcrš"†r›"jsj¿†rœ"j©jцr"jX	bind-funcrž"†rŸ"jsjÕ†r "jtXvsinf4r¡"†r¢"jsX
  r£"†r¤"j©jцr¥"jXletr¦"†r§"jsjÕ†r¨"j©jцr©"j©jцrª"hÐXpr«"†r¬"j-X:/4,float/*r­"†r®"jsjÕ†r¯"j©jцr°"jtXallocr±"†r²"j©jæ†r³"j©jæ†r´"jsX	
        rµ"†r¶"j©jцr·"hÐj4	†r¸"j-X:/4,float/*r¹"†rº"jsjÕ†r»"j©jцr¼"jtXallocr½"†r¾"j©jæ†r¿"j©jæ†rÀ"jsX	
        rÁ"†rÂ"j©jцrÃ"hÐjK	†rÄ"j-X:/4,float/*rÅ"†rÆ"jsjÕ†rÇ"j©jцrÈ"jtXallocrÉ"†rÊ"j©jæ†rË"j©jæ†rÌ"jsX	
        rÍ"†rÎ"j©jцrÏ"hÐXf1rÐ"†rÑ"j-X:/4,float/*rÒ"†rÓ"jsjÕ†rÔ"j©jцrÕ"jtXallocrÖ"†r×"j©jæ†rØ"j©jæ†rÙ"jsX	
        rÚ"†rÛ"j©jцrÜ"hÐXf2rÝ"†rÞ"j-X:/4,float/*rß"†rà"jsjÕ†rá"j©jцrâ"jtXallocrã"†rä"j©jæ†rå"j©jæ†ræ"jsX	
        rç"†rè"j©jцré"hÐj8†rê"j-X:i32rë"†rì"jsjÕ†rí"jŸj,†rî"j©jæ†rï"jsX	
        rð"†rñ"j©jцrò"hÐXp_ró"†rô"jsjÕ†rõ"jhX0.225rö"†r÷"j©jæ†rø"jsX	
        rù"†rú"j©jцrû"hÐXb_rü"†rý"jsjÕ†rþ"j©jцrÿ"jtXdtofr#†r#jsjÕ†r#j©jцr#jtj†r#jsjÕ†r#jhX4.0r#†r#jsjÕ†r#jhX3.1415r	#†r
#j©jæ†r#j©jæ†r#j©jæ†r
#jsX	
        r#†r#j©jцr#hÐXc_r#†r#jsjÕ†r#j©jцr#jtXdtofr#†r#jsjÕ†r#j©jцr#jtj†r#jsjÕ†r#jhX-4.0r#†r#jsjÕ†r#j©jцr#jtj(†r#jsjÕ†r #jhX3.1415r!#†r"#jsjÕ†r##jhX3.1415r$#†r%#j©jæ†r&#j©jæ†r'#j©jæ†r(#j©jæ†r)#j©jæ†r*#jsX
    r+#†r,#j©jцr-#jXdotimesr.#†r/#jsjÕ†r0#j©jцr1#hÐj8†r2#jsjÕ†r3#jŸj‚†r4#j©jæ†r5#jsjÕ†r6#j©jцr7#jtXvset!r8#†r9#jsjÕ†r:#hÐj«"†r;#jsjÕ†r<#hÐj8†r=#jsjÕ†r>#hÐXp_r?#†r@#j©jæ†rA#jsjÕ†rB#j©jцrC#jtXvset!rD#†rE#jsjÕ†rF#hÐj4	†rG#jsjÕ†rH#hÐj8†rI#jsjÕ†rJ#hÐXb_rK#†rL#j©jæ†rM#jsjÕ†rN#j©jцrO#jtXvset!rP#†rQ#jsjÕ†rR#hÐjK	†rS#jsjÕ†rT#hÐj8†rU#jsjÕ†rV#hÐXc_rW#†rX#j©jæ†rY#j©jæ†rZ#jsX
    r[#†r\#j©jцr]#jXlambdar^#†r_#jsjÕ†r`#j©jцra#hÐj†rb#j-X
:/4,float/rc#†rd#j©jæ†re#jsX
      rf#†rg#hX;; no SIMD for abs yet!rh#†ri#jsX
      rj#†rk#j©jцrl#jXdotimesrm#†rn#jsjÕ†ro#j©jцrp#hÐj8†rq#jsjÕ†rr#jŸj‚†rs#j©jæ†rt#jsjÕ†ru#j©jцrv#e(jtXvset!rw#†rx#jsjÕ†ry#hÐXf1rz#†r{#jsjÕ†r|#hÐj8†r}#jsjÕ†r~#j©jцr#hÐXfabsr€#†r#jsjÕ†r‚#j©jцrƒ#jtXvrefr„#†r…#jsjÕ†r†#hÐj†r‡#jsjÕ†rˆ#hÐj8†r‰#j©jæ†rŠ#j©jæ†r‹#j©jæ†rŒ#j©jæ†r#jsX
      rŽ#†r#j©jцr#jXletr‘#†r’#jsjÕ†r“#j©jцr”#j©jцr•#hÐjS	†r–#jsjÕ†r—#j©jцr˜#jtjφr™#jsjÕ†rš#j©jцr›#jtj(†rœ#jsjÕ†r#hÐj4	†rž#jsjÕ†rŸ#hÐj†r #j©jæ†r¡#jsjÕ†r¢#j©jцr£#jtj(†r¤#jsjÕ†r¥#hÐjK	†r¦#jsjÕ†r§#hÐj†r¨#jsjÕ†r©#hÐXf1rª#†r«#j©jæ†r¬#j©jæ†r­#j©jæ†r®#j©jæ†r¯#jsX	
        r°#†r±#hX;; no SIMD for abs yet!r²#†r³#jsX	
        r´#†rµ#j©jцr¶#jXdotimesr·#†r¸#jsjÕ†r¹#j©jцrº#hÐj8†r»#jsjÕ†r¼#jŸj‚†r½#j©jæ†r¾#jsjÕ†r¿#j©jцrÀ#jtXvset!rÁ#†rÂ#jsjÕ†rÃ#hÐXf2rÄ#†rÅ#jsjÕ†rÆ#hÐj8†rÇ#jsjÕ†rÈ#j©jцrÉ#hÐXfabsrÊ#†rË#jsjÕ†rÌ#j©jцrÍ#jtXvrefrÎ#†rÏ#jsjÕ†rÐ#hÐjS	†rÑ#jsjÕ†rÒ#hÐj8†rÓ#j©jæ†rÔ#j©jæ†rÕ#j©jæ†rÖ#j©jæ†r×#jsX	
        rØ#†rÙ#j©jцrÚ#jtjφrÛ#jsjÕ†rÜ#j©jцrÝ#jtj(†rÞ#jsjÕ†rß#hÐj«"†rà#jsjÕ†rá#j©jцrâ#jtjD†rã#jsjÕ†rä#j©jцrå#jtj(†ræ#jsjÕ†rç#hÐjS	†rè#jsjÕ†ré#hÐXf2rê#†rë#j©jæ†rì#jsjÕ†rí#hÐjS	†rî#j©jæ†rï#j©jæ†rð#jsjÕ†rñ#hÐjS	†rò#j©jæ†ró#j©jæ†rô#j©jæ†rõ#j©jæ†rö#j©jæ†r÷#jsX

rø#†rù#j©jцrú#jX	bind-funcrû#†rü#jsjÕ†rý#jtXvcosf4rþ#†rÿ#jsX
  r$†r$j©jцr$jXletr$†r$jsjÕ†r$j©jцr$j©jцr$hÐj«"†r$j-X:/4,float/*r	$†r
$jsjÕ†r$j©jцr$jtXallocr
$†r$j©jæ†r$j©jæ†r$jsX
	r$†r$j©jцr$hÐj4	†r$j-X:/4,float/*r$†r$jsjÕ†r$j©jцr$jtXallocr$†r$j©jæ†r$j©jæ†r$jsX
	r$†r$j©jцr$hÐjK	†r $j-X:/4,float/*r!$†r"$jsjÕ†r#$j©jцr$$jtXallocr%$†r&$j©jæ†r'$j©jæ†r($jsX
	r)$†r*$j©jцr+$hÐXdr,$†r-$j-X:/4,float/*r.$†r/$jsjÕ†r0$j©jцr1$jtXallocr2$†r3$j©jæ†r4$j©jæ†r5$jsX
	r6$†r7$j©jцr8$hÐXf1r9$†r:$j-X:/4,float/*r;$†r<$jsjÕ†r=$j©jцr>$jtXallocr?$†r@$j©jæ†rA$j©jæ†rB$jsX
	rC$†rD$j©jцrE$hÐXf2rF$†rG$j-X:/4,float/*rH$†rI$jsjÕ†rJ$j©jцrK$jtXallocrL$†rM$j©jæ†rN$j©jæ†rO$jsX
	rP$†rQ$j©jцrR$hÐj8†rS$j-X:i32rT$†rU$jsjÕ†rV$jŸj,†rW$j©jæ†rX$jsX
	rY$†rZ$j©jцr[$hÐXp_r\$†r]$jsjÕ†r^$jhX0.225r_$†r`$j©jæ†ra$jsX
	rb$†rc$j©jцrd$hÐXd_re$†rf$jsjÕ†rg$j©jцrh$jtXdtofri$†rj$jsjÕ†rk$j©jцrl$jtj†rm$jsjÕ†rn$jhX3.1415ro$†rp$jsjÕ†rq$jhX2.0rr$†rs$j©jæ†rt$j©jæ†ru$j©jæ†rv$jsX
	rw$†rx$j©jцry$hÐXb_rz$†r{$jsjÕ†r|$j©jцr}$jtXdtofr~$†r$jsjÕ†r€$j©jцr$jtj†r‚$jsjÕ†rƒ$jhX4.0r„$†r…$jsjÕ†r†$jhX3.1415r‡$†rˆ$j©jæ†r‰$j©jæ†rŠ$j©jæ†r‹$jsX
	rŒ$†r$j©jцrŽ$hÐXc_r$†r$jsjÕ†r‘$j©jцr’$jtXdtofr“$†r”$jsjÕ†r•$j©jцr–$jtj†r—$jsjÕ†r˜$jhX-4.0r™$†rš$jsjÕ†r›$j©jцrœ$jtj(†r$jsjÕ†rž$jhX3.1415rŸ$†r $jsjÕ†r¡$jhX3.1415r¢$†r£$j©jæ†r¤$j©jæ†r¥$j©jæ†r¦$j©jæ†r§$j©jæ†r¨$jsX
    r©$†rª$j©jцr«$jXdotimesr¬$†r­$jsjÕ†r®$j©jцr¯$hÐj8†r°$jsjÕ†r±$jŸj‚†r²$j©jæ†r³$jsX
      r´$†rµ$j©jцr¶$jtXvset!r·$†r¸$jsjÕ†r¹$hÐj«"†rº$jsjÕ†r»$hÐj8†r¼$jsjÕ†r½$hÐXp_r¾$†r¿$j©jæ†rÀ$jsjÕ†rÁ$j©jцrÂ$jtXvset!rÃ$†rÄ$jsjÕ†rÅ$hÐj4	†rÆ$jsjÕ†rÇ$hÐj8†rÈ$jsjÕ†rÉ$hÐXb_rÊ$†rË$j©jæ†rÌ$jsjÕ†rÍ$j©jцrÎ$jtXvset!rÏ$†rÐ$jsjÕ†rÑ$hÐjK	†rÒ$jsjÕ†rÓ$hÐj8†rÔ$jsjÕ†rÕ$hÐXc_rÖ$†r×$j©jæ†rØ$jsjÕ†rÙ$j©jцrÚ$jtXvset!rÛ$†rÜ$jsjÕ†rÝ$hÐj,$†rÞ$jsjÕ†rß$hÐj8†rà$jsjÕ†rá$hÐXd_râ$†rã$j©jæ†rä$j©jæ†rå$jsX
    ræ$†rç$j©jцrè$jXlambdaré$†rê$jsjÕ†rë$j©jцrì$hÐj†rí$j-X
:/4,float/rî$†rï$j©jæ†rð$jsX
      rñ$†rò$hX;; offset x for cosró$†rô$jsX
      rõ$†rö$j©jцr÷$jXset!rø$†rù$jsjÕ†rú$hÐj†rû$jsjÕ†rü$j©jцrý$jtjφrþ$jsjÕ†rÿ$hÐj†r%jsjÕ†r%hÐj,$†r%j©jæ†r%j©jæ†r%jsX
      r%†r%hX;; no SIMD for abs yet!r%†r%jsX
      r	%†r
%j©jцr%jXdotimesr%†r
%jsjÕ†r%j©jцr%hÐj8†r%jsjÕ†r%jŸj‚†r%j©jæ†r%jsjÕ†r%j©jцr%jtXvset!r%†r%jsjÕ†r%hÐXf1r%†r%jsjÕ†r%hÐj8†r%jsjÕ†r%j©jцr%hÐXfabsr%†r %jsjÕ†r!%j©jцr"%jtXvrefr#%†r$%jsjÕ†r%%hÐj†r&%jsjÕ†r'%hÐj8†r(%j©jæ†r)%j©jæ†r*%j©jæ†r+%j©jæ†r,%jsX
      r-%†r.%j©jцr/%jXletr0%†r1%jsjÕ†r2%j©jцr3%j©jцr4%hÐjS	†r5%jsjÕ†r6%j©jцr7%jtjφr8%jsjÕ†r9%j©jцr:%jtj(†r;%jsjÕ†r<%hÐj4	†r=%jsjÕ†r>%hÐj†r?%j©jæ†r@%jsjÕ†rA%j©jцrB%jtj(†rC%jsjÕ†rD%hÐjK	†rE%jsjÕ†rF%hÐj†rG%jsjÕ†rH%hÐXf1rI%†rJ%j©jæ†rK%j©jæ†rL%j©jæ†rM%j©jæ†rN%jsX
	rO%†rP%hX;; no SIMD for abs yet!rQ%†rR%jsX
	rS%†rT%j©jцrU%jXdotimesrV%†rW%jsjÕ†rX%j©jцrY%hÐj8†rZ%jsjÕ†r[%jŸj‚†r\%j©jæ†r]%jsjÕ†r^%j©jцr_%jtXvset!r`%†ra%jsjÕ†rb%hÐXf2rc%†rd%jsjÕ†re%hÐj8†rf%jsjÕ†rg%j©jцrh%hÐXfabsri%†rj%jsjÕ†rk%j©jцrl%jtXvrefrm%†rn%jsjÕ†ro%hÐjS	†rp%jsjÕ†rq%hÐj8†rr%j©jæ†rs%j©jæ†rt%j©jæ†ru%j©jæ†rv%jsX
	rw%†rx%j©jцry%jtjφrz%jsjÕ†r{%j©jцr|%jtj(†r}%jsjÕ†r~%hÐj«"†r%jsjÕ†r€%j©jцr%jtjD†r‚%jsjÕ†rƒ%j©jцr„%jtj(†r…%jsjÕ†r†%hÐjS	†r‡%jsjÕ†rˆ%hÐXf2r‰%†rŠ%j©jæ†r‹%jsjÕ†rŒ%hÐjS	†r%j©jæ†rŽ%j©jæ†r%jsjÕ†r%hÐjS	†r‘%j©jæ†r’%j©jæ†r“%j©jæ†r”%j©jæ†r•%j©jæ†r–%jsX


r—%†r˜%j©jцr™%hÐXxtmtestrš%†r›%jsjÕ†rœ%htj׆r%j©jцrž%jX	bind-funcrŸ%†r %jsjÕ†r¡%jtXvector-test4r¢%†r£%jsX

            r¤%†r¥%j©jцr¦%jXlambdar§%†r¨%jsjÕ†r©%j©jцrª%j©jæ†r«%jsX
              r¬%†r­%j©jцr®%jXletr¯%†r°%jsjÕ†r±%j©jцr²%j©jцr³%hÐj"†r´%j-X:/4,float/*rµ%†r¶%jsjÕ†r·%j©jцr¸%jtXallocr¹%†rº%j©jæ†r»%j©jæ†r¼%j©jæ†r½%jsX
                r¾%†r¿%j©jцrÀ%jtXvfill!rÁ%†rÂ%jsjÕ†rÃ%hÐj"†rÄ%jsjÕ†rÅ%jhX0.1rÆ%†rÇ%jsjÕ†rÈ%jhX0.2rÉ%†rÊ%jsjÕ†rË%jhX0.3rÌ%†rÍ%jsjÕ†rÎ%jhX0.4rÏ%†rÐ%j©jæ†rÑ%jsX
                rÒ%†rÓ%j©jцrÔ%jXletrÕ%†rÖ%jsjÕ†r×%j©jцrØ%j©jцrÙ%hÐj4	†rÚ%jsjÕ†rÛ%j©jцrÜ%hÐXvsinf4rÝ%†rÞ%jsjÕ†rß%j©jцrà%jtXprefrá%†râ%jsjÕ†rã%hÐj"†rä%jsjÕ†rå%jŸj,†ræ%j©jæ†rç%j©jæ†rè%j©jæ†ré%jsX
                      rê%†rë%j©jцrì%hÐjK	†rí%jsjÕ†rî%j©jцrï%hÐXvcosf4rð%†rñ%jsjÕ†rò%j©jцró%jtXprefrô%†rõ%jsjÕ†rö%hÐj"†r÷%jsjÕ†rø%jŸj,†rù%j©jæ†rú%j©jæ†rû%j©jæ†rü%j©jæ†rý%jsX
                  rþ%†rÿ%j©jцr&jtXprintfr&†r&jsjÕ†r&jÁX%"precision inaccuracy is expected:\n"r&†r&j©jæ†r&jsX
                  r&†r&j©jцr	&jtXprintfr
&†r&jsjÕ†r&jÁX" sinf:\t%f,%f,%f,%f\n"r
&†r&jsX
                          r&†r&j©jцr&jtXftodr&†r&jsjÕ†r&j©jцr&jtXsinr&†r&jsjÕ†r&jhX0.1r&†r&j-X:fr&†r&j©jæ†r&j©jæ†r&jsX
                          r&†r &j©jцr!&jtXftodr"&†r#&jsjÕ†r$&j©jцr%&jtXsinr&&†r'&jsjÕ†r(&jhX0.2r)&†r*&j-X:fr+&†r,&j©jæ†r-&j©jæ†r.&jsX
                          r/&†r0&j©jцr1&jtXftodr2&†r3&jsjÕ†r4&j©jцr5&jtXsinr6&†r7&jsjÕ†r8&jhX0.3r9&†r:&j-X:fr;&†r<&j©jæ†r=&j©jæ†r>&jsX
                          r?&†r@&j©jцrA&jtXftodrB&†rC&jsjÕ†rD&j©jцrE&jtXsinrF&†rG&jsjÕ†rH&jhX0.4rI&†rJ&j-X:frK&†rL&j©jæ†rM&j©jæ†rN&j©jæ†rO&jsX
                  rP&†rQ&j©jцrR&jtXprintfrS&†rT&jsjÕ†rU&jÁX"vsinf:\t%f,%f,%f,%f\n"rV&†rW&jsX
                          rX&†rY&j©jцrZ&jtXftodr[&†r\&jsjÕ†r]&j©jцr^&jtXvrefr_&†r`&jsjÕ†ra&hÐj4	†rb&jsjÕ†rc&jŸj,†rd&j©jæ†re&j©jæ†rf&jsX
                          rg&†rh&j©jцri&jtXftodrj&†rk&jsjÕ†rl&j©jцrm&jtXvrefrn&†ro&jsjÕ†rp&hÐj4	†rq&jsjÕ†rr&jŸj÷†rs&j©jæ†rt&j©jæ†ru&jsX
                          rv&†rw&j©jцrx&jtXftodry&†rz&jsjÕ†r{&j©jцr|&jtXvrefr}&†r~&jsjÕ†r&hÐj4	†r€&jsjÕ†r&jŸjî†r‚&j©jæ†rƒ&j©jæ†r„&jsX
                          r…&†r†&j©jцr‡&jtXftodrˆ&†r‰&jsjÕ†rŠ&j©jцr‹&jtXvrefrŒ&†r&jsjÕ†rŽ&hÐj4	†r&jsjÕ†r&jŸj†r‘&j©jæ†r’&j©jæ†r“&j©jæ†r”&jsX
                  r•&†r–&j©jцr—&jtXprintfr˜&†r™&jsjÕ†rš&jÁX" cosf:\t%f,%f,%f,%f\n"r›&†rœ&jsX
                          r&†rž&j©jцrŸ&jtXftodr &†r¡&jsjÕ†r¢&j©jцr£&jtXcosr¤&†r¥&jsjÕ†r¦&jhX0.1r§&†r¨&j-X:fr©&†rª&j©jæ†r«&j©jæ†r¬&jsX
                          r­&†r®&j©jцr¯&jtXftodr°&†r±&jsjÕ†r²&j©jцr³&jtXcosr´&†rµ&jsjÕ†r¶&jhX0.2r·&†r¸&j-X:fr¹&†rº&j©jæ†r»&j©jæ†r¼&jsX
                          r½&†r¾&j©jцr¿&jtXftodrÀ&†rÁ&jsjÕ†rÂ&j©jцrÃ&jtXcosrÄ&†rÅ&jsjÕ†rÆ&jhX0.3rÇ&†rÈ&j-X:frÉ&†rÊ&j©jæ†rË&j©jæ†rÌ&jsX
                          rÍ&†rÎ&j©jцrÏ&jtXftodrÐ&†rÑ&jsjÕ†rÒ&j©jцrÓ&jtXcosrÔ&†rÕ&jsjÕ†rÖ&jhX0.4r×&†rØ&j-X:frÙ&†rÚ&j©jæ†rÛ&j©jæ†rÜ&j©jæ†rÝ&jsX
                  rÞ&†rß&j©jцrà&jtXprintfrá&†râ&jsjÕ†rã&jÁX"vcosf:\t%f,%f,%f,%f\n"rä&†rå&jsX
                          ræ&†rç&j©jцrè&jtXftodré&†rê&jsjÕ†rë&j©jцrì&jtXvrefrí&†rî&jsjÕ†rï&hÐjK	†rð&jsjÕ†rñ&jŸj,†rò&j©jæ†ró&j©jæ†rô&jsX
                          rõ&†rö&j©jцr÷&jtXftodrø&†rù&jsjÕ†rú&j©jцrû&jtXvrefrü&†rý&jsjÕ†rþ&hÐjK	†rÿ&jsjÕ†r'jŸj÷†r'j©jæ†r'j©jæ†r'jsX
                          r'†r'j©jцr'jtXftodr'†r'jsjÕ†r	'j©jцr
'jtXvrefr'†r'jsjÕ†r
'hÐjK	†r'jsjÕ†r'jŸjî†r'j©jæ†r'j©jæ†r'jsX
                          r'†r'j©jцr'jtXftodr'†r'jsjÕ†r'j©jцr'jtXvrefr'†r'jsjÕ†r'hÐjK	†r'jsjÕ†r'jŸj†r'j©jæ†r 'j©jæ†r!'j©jæ†r"'jsX
                  r#'†r$'hÐXvoidr%'†r&'j©jæ†r''j©jæ†r('j©jæ†r)'j©jæ†r*'jsX

         r+'†r,'j©jцr-'jtXvectorr.'†r/'hÐX-test4r0'†r1'j©jæ†r2'j©jæ†r3'jsX

r4'†r5'hX ;; test the call-as-xtlang macror6'†r7'jsX

r8'†r9'hX-;; make sure it'll handle multiple body formsr:'†r;'jsj¿†r<'j©jцr='hÐXxtmtest-resultr>'†r?'jsjÕ†r@'j©jцrA'hÐXcall-as-xtlangrB'†rC'jsjÕ†rD'j©jцrE'jtXprintlnrF'†rG'jsjÕ†rH'jŸj÷†rI'j©jæ†rJ'jsjÕ†rK'j©jцrL'jtXprintlnrM'†rN'jsjÕ†rO'jŸjî†rP'j©jæ†rQ'jsjÕ†rR'jŸj-†rS'j©jæ†rT'jsX
                rU'†rV'jŸj-†rW'j©jæ†rX'jsX


rY'†rZ'hX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r['†r\'jsj¿†r]'hX;;r^'†r_'jsj¿†r`'hX;; test globalvar as closurera'†rb'jsj¿†rc'hX;;rd'†re'jsj¿†rf'hX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;rg'†rh'jsX

ri'†rj'j©jцrk'jX	bind-funcrl'†rm'jsjÕ†rn'jtXtestincro'†rp'jsX
  rq'†rr'j©jцrs'jXlambdart'†ru'jsjÕ†rv'j©jцrw'hÐXincrrx'†ry'j-X:i64rz'†r{'j©jæ†r|'jsX
    r}'†r~'j©jцr'jXlambdar€'†r'jsjÕ†r‚'j©jцrƒ'hÐj†r„'j-X:i64r…'†r†'j©jæ†r‡'jsX
      rˆ'†r‰'j©jцrŠ'jtjφr‹'jsjÕ†rŒ'hÐj†r'jsjÕ†rŽ'hÐXincrr'†r'j©jæ†r‘'j©jæ†r’'j©jæ†r“'j©jæ†r”'jsX

r•'†r–'j©jцr—'jXbind-valr˜'†r™'jsjÕ†rš'jtX	GlobalIncr›'†rœ'jsjÕ†r'j-X
[i64,i64]*rž'†rŸ'jsjÕ†r 'j©jцr¡'hÐXtestincr¢'†r£'jsjÕ†r¤'jŸjî†r¥'j©jæ†r¦'j©jæ†r§'jsX

r¨'†r©'j©jцrª'hÐXxtmtestr«'†r¬'jsjÕ†r­'htj׆r®'j©jцr¯'jX	bind-funcr°'†r±'jsjÕ†r²'jtXgincr³'†r´'jsX

            rµ'†r¶'j©jцr·'jXlambdar¸'†r¹'jsjÕ†rº'j©jцr»'j©jæ†r¼'jsX
              r½'†r¾'j©jцr¿'hÐX	GlobalIncrÀ'†rÁ'jsjÕ†rÂ'jŸj-†rÃ'j©jæ†rÄ'j©jæ†rÅ'j©jæ†rÆ'jsX

         rÇ'†rÈ'j©jцrÉ'hÐXgincrÊ'†rË'j©jæ†rÌ'jsjÕ†rÍ'jŸj{†rÎ'j©jæ†rÏ'jsX
                       

rÐ'†rÑ'hX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;rÒ'†rÓ'jsj¿†rÔ'hX;; syntax highlighting tests ;;rÕ'†rÖ'jsj¿†r×'hX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;rØ'†rÙ'jsj¿†rÚ'hXE;; these don't return any values, they're visual tests---do they lookrÛ'†rÜ'jsj¿†rÝ'hX	;; right?rÞ'†rß'jsX

rà'†rá'j©jцrâ'jX	bind-funcrã'†rä'jsjÕ†rå'jtX	hl_test1aræ'†rç'j-X:[i32,double,|4,i32|**]*rè'†ré'jsjÕ†rê'jŸX4000rë'†rì'jsX
  rí'†rî'jÁX"docstring"rï'†rð'jsX
  rñ'†rò'j©jцró'jXlambdarô'†rõ'jsjÕ†rö'j©jцr÷'hÐj"†rø'jsjÕ†rù'hÐj4	†rú'j©jæ†rû'jsX
    rü'†rý'j©jцrþ'jtXprintfrÿ'†r(jsjÕ†r(jÁX"done\n"r(†r(j©jæ†r(j©jæ†r(j©jæ†r(jsX

r(†r(j©jцr	(jX	bind-funcr
(†r(jsjÕ†r(jtX	hl_test1br
(†r(j-X:[i32]*r(†r(jsX
  r(†r(j©jцr(jXlambdar(†r(jsjÕ†r(j©jцr(j©jæ†r(jsX
    r(†r(j©jцr(jXletr(†r(jsjÕ†r(j©jцr(j©jцr (hÐj8†r!(j-X:i32r"(†r#(jsjÕ†r$(jŸj8†r%(j©jæ†r&(j©jæ†r'(jsX
      r((†r)(j©jцr*(jtXprintfr+(†r,(jsjÕ†r-(jÁX"done\n"r.(†r/(j©jæ†r0(j©jæ†r1(j©jæ†r2(j©jæ†r3(jsX

r4(†r5(j©jцr6(jXbind-valr7(†r8(jsjÕ†r9(jtXhl_test2r:(†r;(jsjÕ†r<(j-X	<i32,i32>r=(†r>(j©jæ†r?(jsj¿†r@(j©jцrA(jXbind-valrB(†rC(jsjÕ†rD(jtXhl_test3rE(†rF(jsjÕ†rG(j-X|4,i8|rH(†rI(j©jæ†rJ(jsj¿†rK(j©jцrL(jXbind-valrM(†rN(jsjÕ†rO(jtXhl_test4rP(†rQ(jsjÕ†rR(j-Xdouble*rS(†rT(jsjÕ†rU(jŸX10rV(†rW(j©jæ†rX(jsj¿†rY(j©jцrZ(jXbind-valr[(†r\(jsjÕ†r](jtXhl_test5r^(†r_(jsjÕ†r`(j-Xi8*ra(†rb(jsjÕ†rc(jÁX	"teststr"rd(†re(j©jæ†rf(jsX

rg(†rh(j©jцri(jX	bind-typerj(†rk(jsjÕ†rl(jtXhl_test_typerm(†rn(jsjÕ†ro(j-X<i64>rp(†rq(j©jæ†rr(jsX

rs(†rt(j©jцru(jtXprintlnrv(†rw(jsjÕ†rx(htj׆ry(j©jцrz(jXbind-libr{(†r|(jsjÕ†r}(jtXtestlibr~(†r(jsjÕ†r€(hÐXtestfnr(†r‚(jsjÕ†rƒ(j-X
[i32,i32]*r„(†r…(j©jæ†r†(j©jæ†r‡(jsX

rˆ(†r‰(hX;; (and 4 5)rŠ(†r‹(jsj¿†rŒ(hX!;; (bind-val hl_test4 double* 10)r(†rŽ(jsj¿†r(hX-;; (bind-type hl_test_type <i64> "docstring")r(†r‘(jsj¿†r’(hX';; (bind-lib testlib testfn [i32,i32]*)r“(†r”(jsj¿†r•(e.