This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=pdflatex 2006.6.6) 25 JAN 2008 10:10 entering extended mode **metalua-manual.tex (./metalua-manual.tex LaTeX2e <2003/12/01> Babel and hyphenation patterns for american, french, german, ngerman, b ahasa, basque, bulgarian, catalan, croatian, czech, danish, dutch, esperanto, e stonian, finnish, greek, icelandic, irish, italian, latin, magyar, norsk, polis h, portuges, romanian, russian, serbian, slovak, slovene, spanish, swedish, tur kish, ukrainian, nohyphenation, loaded. (/sw/share/texmf-dist/tex/latex/base/book.cls Document Class: book 2004/02/16 v1.4f Standard LaTeX document class (/sw/share/texmf-dist/tex/latex/base/bk10.clo File: bk10.clo 2004/02/16 v1.4f Standard LaTeX file (size option) ) \c@part=\count79 \c@chapter=\count80 \c@section=\count81 \c@subsection=\count82 \c@subsubsection=\count83 \c@paragraph=\count84 \c@subparagraph=\count85 \c@figure=\count86 \c@table=\count87 \abovecaptionskip=\skip41 \belowcaptionskip=\skip42 \bibindent=\dimen102 ) (/sw/share/texmf-dist/tex/latex/psnfss/palatino.sty Package: palatino 2004/09/15 PSNFSS-v9.2 (SPQR) ) (/sw/share/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty \fancy@headwidth=\skip43 \f@ncyO@elh=\skip44 \f@ncyO@erh=\skip45 \f@ncyO@olh=\skip46 \f@ncyO@orh=\skip47 \f@ncyO@elf=\skip48 \f@ncyO@erf=\skip49 \f@ncyO@olf=\skip50 \f@ncyO@orf=\skip51 ) (/sw/share/texmf-dist/tex/latex/base/alltt.sty Package: alltt 1997/06/16 v2.0g defines alltt environment ) (/sw/share/texmf-dist/tex/latex/url/url.sty \Urlmuskip=\muskip10 Package: url 2004/03/15 ver 3.1 Verb mode for urls, etc. ) (./metalua-manual.aux (./intro.aux) (./syntax-ext.aux) (./data.aux) (./meta.a ux) (./gg-ref.aux) (./mlp-ref.aux) (./stdlib.aux) (./clopts-ref.aux) (./springs-ref.aux) (./walk-ref.aux) (./match-ref.aux) (./dollar-ref.aux) (./clist-ref.aux) (./hygiene-ref.aux) (./samples.aux) (./sample-exception.aux) (./sample-match.aux) (./src-hints.aux) (./ast.aux)) \openout1 = `metalua-manual.aux'. LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 26. LaTeX Font Info: ... okay on input line 26. LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 26. LaTeX Font Info: ... okay on input line 26. LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 26. LaTeX Font Info: ... okay on input line 26. LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 26. LaTeX Font Info: ... okay on input line 26. LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 26. LaTeX Font Info: ... okay on input line 26. LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 26. LaTeX Font Info: ... okay on input line 26. LaTeX Font Info: Try loading font information for OT1+ppl on input line 26. (/sw/share/texmf-dist/tex/latex/psnfss/ot1ppl.fd File: ot1ppl.fd 2001/06/04 font definitions for OT1/ppl. ) LaTeX Font Info: External font `cmex10' loaded for size (Font) <12> on input line 31. LaTeX Font Info: External font `cmex10' loaded for size (Font) <8> on input line 31. LaTeX Font Info: External font `cmex10' loaded for size (Font) <6> on input line 31. LaTeX Warning: No \author given. [1 {/sw/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] [2 ] LaTeX Font Info: Font shape `OT1/ppl/bx/n' in size <24.88> not available (Font) Font shape `OT1/ppl/b/n' tried instead on input line 32. (./metalua-manual.toc LaTeX Font Info: External font `cmex10' loaded for size (Font) <7> on input line 1. LaTeX Font Info: External font `cmex10' loaded for size (Font) <5> on input line 1. LaTeX Font Info: Font shape `OT1/ppl/bx/n' in size <10> not available (Font) Font shape `OT1/ppl/b/n' tried instead on input line 67. LaTeX Font Info: Try loading font information for OT1+pcr on input line 68. (/sw/share/texmf-dist/tex/latex/psnfss/ot1pcr.fd File: ot1pcr.fd 2001/06/04 font definitions for OT1/pcr. ) Underfull \vbox (badness 2452) has occurred while \output is active [] [3] Underfull \vbox (badness 1694) has occurred while \output is active [] [4]) \tf@toc=\write3 \openout3 = `metalua-manual.toc'. [5] \openout2 = `intro.aux'. (./intro.tex LaTeX Font Info: Font shape `OT1/ppl/bx/n' in size <14.4> not available (Font) Font shape `OT1/ppl/b/n' tried instead on input line 1. LaTeX Font Info: Try loading font information for OMS+ppl on input line 22. (/sw/share/texmf-dist/tex/latex/psnfss/omsppl.fd File: omsppl.fd ) LaTeX Font Info: Font shape `OMS/ppl/m/n' in size <10> not available (Font) Font shape `OMS/cmsy/m/n' tried instead on input line 22. [6 ] Overfull \hbox (10.8078pt too wide) in paragraph at lines 99--102 []\OT1/ppl/m/n/10 The mail-ing list ($\OT1/pcr/m/n/10 http : / / www . lua . or g / lua-[]l . html$\OT1/ppl/m/n/10 ) and the IRC chan- [] Overfull \hbox (2.75807pt too wide) in paragraph at lines 99--102 \OT1/ppl/m/n/10 nel ($\OT1/pcr/m/n/10 irc : / / irc . freenode . net / #lua$\OT 1/ppl/m/n/10 ) are pop-u-lated with a very help- [] [7] Overfull \hbox (4.66658pt too wide) in paragraph at lines 135--144 []\OT1/ppl/m/n/10 Macro-systems bolted on ex-ist-ing lan-guages (Tem-plate Hask ell[], CamlP4[], [] [8]) [9] \openout2 = `syntax-ext.aux'. (./syntax-ext.tex LaTeX Font Info: Font shape `OT1/ppl/bx/n' in size <12> not available (Font) Font shape `OT1/ppl/b/n' tried instead on input line 7. Overfull \hbox (39.20924pt too wide) in paragraph at lines 8--14 \OT1/pcr/m/n/10 argn) return some[]expr end\OT1/ppl/m/n/10 '' can be writ-ten ` `\OT1/pcr/m/n/10 |arg1,arg2,argn| some[]exp\OT1/ppl/m/n/10 ''. [] Overfull \hbox (1.36873pt too wide) in paragraph at lines 15--19 \OT1/ppl/m/n/10 that re-turn func-tions: ``\OT1/pcr/m/n/10 function(x) return f unction(y) return x+y [] LaTeX Font Info: Try loading font information for OMS+pcr on input line 51. (/sw/share/texmf-dist/tex/latex/psnfss/omspcr.fd File: omspcr.fd ) LaTeX Font Info: Font shape `OMS/pcr/m/n' in size <10> not available (Font) Font shape `OMS/cmsy/m/n' tried instead on input line 51. ) [10 ] [11] \openout2 = `data.aux'. (./data.tex [12 ] Overfull \hbox (1.5184pt too wide) in paragraph at lines 88--91 \OT1/ppl/m/n/10 fore, []\OT1/pcr/m/n/10 { tag = "Nil" } \OT1/ppl/m/n/10 can be ab-bre-vi-ated as []\OT1/pcr/m/n/10 `Nil \OT1/ppl/m/n/10 (al-though []\OT1/pcr/ m/n/10 `Nil{ } [] Overfull \hbox (63.0pt too wide) in paragraph at lines 104--104 [] \OT1/pcr/m/n/10 `Formula{ "Multiplication", `Variable "i", `Variable "p i" } },[] [] [13] Overfull \hbox (0.74602pt too wide) in paragraph at lines 142--147 \OT1/ppl/m/n/10 based on unary or bi-nary op-er-a-tors, func-tion def-i-ni-tion s, func-tion calls, method [] Overfull \hbox (2.99579pt too wide) in paragraph at lines 148--154 \OT1/ppl/m/n/10 with can be re-turned through eval-u-a-tion, whereas state-ment s just ex-e-cute them- [] LaTeX Font Info: Font shape `OMS/pcr/m/n' in size <8> not available (Font) Font shape `OMS/cmsy/m/n' tried instead on input line 160. Overfull \hbox (9.88669pt too wide) in paragraph at lines 156--161 \OT1/ppl/m/n/10 the num-ber value as its sole child. For in-stance, []\OT1/pcr/ m/n/10 6 \OT1/ppl/m/n/10 is rep-re-sented by []\OT1/pcr/m/n/10 `Number 6[]\OT1/ ppl/m/n/10 . [] Overfull \hbox (35.12733pt too wide) in paragraph at lines 163--166 \OT1/ppl/m/n/10 string as its sole child. For in-stance, []\OT1/pcr/m/n/10 "foo bar" \OT1/ppl/m/n/10 is rep-re-sented by []\OT1/pcr/m/n/10 `String "foobar"\OT1 /ppl/m/n/10 . [] [14] Overfull \hbox (0.27684pt too wide) in paragraph at lines 173--174 \OT1/ppl/b/n/10 Other atomic val-ues[] \OT1/ppl/m/n/10 Here are the trans-la-t ions of other keyword-based atomic [] Overfull \hbox (108.50003pt too wide) in paragraph at lines 204--207 []\OT1/pcr/m/n/10 `Table{ `Key{ `String "x", `Number 1 }, `Key{ `String "y", `N umber 2} }\OT1/ppl/m/n/10 ; [] Overfull \hbox (8.57785pt too wide) in paragraph at lines 208--211 []\OT1/ppl/m/n/10 indexed and non-indexed en-tries can be mixed: []\OT1/pcr/m/n /10 { 1, [100]="foo", 3} [] Overfull \hbox (72.50003pt too wide) in paragraph at lines 208--211 []\OT1/pcr/m/n/10 `Table{ `Number 1, `Key{ `Number 100, `String "foo"}, `Number 3 }\OT1/ppl/m/n/10 ; [] Overfull \hbox (70.04755pt too wide) in paragraph at lines 215--219 \OT1/ppl/b/n/10 Bi-nary Op-er-a-tors[] \OT1/ppl/m/n/10 Bi-nary op-er-a-tions a re rep-re-sented by []\OT1/pcr/m/n/10 `Op{ operator, left, right}\OT1/ppl/m/n/1 0 , [] [15] Overfull \hbox (130.62933pt too wide) in paragraph at lines 259--261 [][]\OT1/pcr/m/n/10 1+2*3 \OT1/ppl/m/n/10 is rep-re-sented as []\OT1/pcr/m/n/10 `Op{ `Add, `Number 1, `Op{ `Mul, `Number 2, `Number 3 } }\OT1/ppl/m/n/10 ; [] Overfull \hbox (140.12933pt too wide) in paragraph at lines 261--263 [][]\OT1/pcr/m/n/10 (1+2)*3 \OT1/ppl/m/n/10 is rep-re-sented as []\OT1/pcr/m/n/ 10 `Op{ `Mul, `Op{ `Add, `Number 1, `Number 2 }, `Number 3 } [] Overfull \hbox (68.12933pt too wide) in paragraph at lines 294--296 [][]\OT1/pcr/m/n/10 -(1+2) \OT1/ppl/m/n/10 is rep-re-sented as []\OT1/pcr/m/n/1 0 `Op{ `Sub, `Op{ `Add, `Number 1, `Number 2 } } [] [16] Overfull \hbox (94.62933pt too wide) in paragraph at lines 307--309 [][]\OT1/pcr/m/n/10 x[3][5] \OT1/ppl/m/n/10 is rep-re-sented as []\OT1/pcr/m/n/ 10 `Index{ `Index{ `Id "x", `Number 3 }, `Number 5 }\OT1/ppl/m/n/10 ; [] Overfull \hbox (97.28851pt too wide) in paragraph at lines 309--311 [][]\OT1/pcr/m/n/10 x.y \OT1/ppl/m/n/10 is syn-tax sugar for []\OT1/pcr/m/n/10 x["y"]\OT1/ppl/m/n/10 , and is rep-re-sented as []\OT1/pcr/m/n/10 `Index{ `Id " x", `String "y" }\OT1/ppl/m/n/10 ; [] Overfull \hbox (16.62933pt too wide) in paragraph at lines 324--326 [][]\OT1/pcr/m/n/10 f(x, 1) \OT1/ppl/m/n/10 is rep-re-sented as []\OT1/pcr/m/n/ 10 `Call{ `Id "f", `Id "x", `Number 1 }\OT1/ppl/m/n/10 ; [] Overfull \hbox (4.62933pt too wide) in paragraph at lines 326--328 [][]\OT1/pcr/m/n/10 f(x, ...) \OT1/ppl/m/n/10 is rep-re-sented as []\OT1/pcr/m/ n/10 `Call{ `Id "f", `Id "x", `Dots }\OT1/ppl/m/n/10 . [] Overfull \hbox (118.62933pt too wide) in paragraph at lines 340--342 [][]\OT1/pcr/m/n/10 o:f(x, 1) \OT1/ppl/m/n/10 is rep-re-sented as []\OT1/pcr/m/ n/10 `Invoke{ `Id "o", `String "f", `Id "x", `Number 1 }\OT1/ppl/m/n/10 ; [] Overfull \hbox (106.62933pt too wide) in paragraph at lines 342--344 [][]\OT1/pcr/m/n/10 o:f(x, ...) \OT1/ppl/m/n/10 is rep-re-sented as []\OT1/pcr/ m/n/10 `Invoke{ `Id "o", `String "f", `Id "x", `Dots }\OT1/ppl/m/n/10 ; [] Overfull \hbox (9.7182pt too wide) in paragraph at lines 346--351 \OT1/ppl/m/n/10 ments. No-tice also that ``\OT1/pcr/m/n/10 function o:m (x) ret urn x end\OT1/ppl/m/n/10 '' is not a method [] [17] Overfull \hbox (11.12653pt too wide) in paragraph at lines 360--363 []\OT1/ppl/m/n/10 The block is a list of state-ment AST, op-tion-naly ter-mi-na ted with a []\OT1/pcr/m/n/10 `Return{...} [] Overfull \hbox (16.00003pt too wide) in paragraph at lines 383--385 [][]\OT1/pcr/m/n/10 function (fmt, ...) print (string.format (fmt, ...)) end [] Overfull \hbox (88.00003pt too wide) in paragraph at lines 391--391 [] \OT1/pcr/m/n/10 `Call{ `Index{ `Id "string", `String "fo rmat" },[] [] Overfull \hbox (3.18822pt too wide) in paragraph at lines 393--397 [][]\OT1/pcr/m/n/10 function f (x) return x end \OT1/ppl/m/n/10 is not an ex-pr es-sion, but a state-ment: [] Overfull \hbox (51.02776pt too wide) in paragraph at lines 393--397 \OT1/ppl/m/n/10 it is ac-tu-ally syn-tax sugar for the as-sign-ment []\OT1/pcr/ m/n/10 f = function (x) return x end\OT1/ppl/m/n/10 , [] Overfull \hbox (22.00003pt too wide) in paragraph at lines 400--400 [] \OT1/pcr/m/n/10 { `Function{ { `Id x } { `Return{ `Id "x" } } } } }[] [] Overfull \hbox (9.95673pt too wide) in paragraph at lines 407--414 \OT1/ppl/b/n/10 Paren-the-ses[] \OT1/ppl/m/n/10 In Lua, paren-the-ses are some -times se-man-ti-cally mean-ing-ful: when [] Overfull \hbox (0.51523pt too wide) in paragraph at lines 407--414 \OT1/ppl/m/n/10 the paren-the-sised ex-pres-sion re-turns mul-ti-ple val-ues, p utting it be-tween paren- [] Overfull \hbox (0.88937pt too wide) in paragraph at lines 407--414 \OT1/pcr/m/n/10 f() return 1, 2, 3 end; return \OMS/cmsy/m/n/10 f \OT1/pcr/m/n/ 10 f() \OMS/cmsy/m/n/10 g\OT1/ppl/m/n/10 '' will re-turn ``\OMS/cmsy/m/n/10 f\O T1/pcr/m/n/10 1, 2, 3\OMS/cmsy/m/n/10 g\OT1/ppl/m/n/10 '', [] Overfull \hbox (15.64977pt too wide) in paragraph at lines 407--414 \OT1/ppl/m/n/10 whereas ``\OT1/pcr/m/n/10 local function f() return 1, 2, 3 end ; return \OMS/cmsy/m/n/10 f \OT1/pcr/m/n/10 (f()) [] [18] Overfull \hbox (105.0pt too wide) in paragraph at lines 423--423 [] \OT1/pcr/m/n/10 `Return{ `Number 1, `Number 2, `Num ber 3 } } } },[] [] Overfull \hbox (12.50003pt too wide) in paragraph at lines 442--444 []\OT1/pcr/m/n/10 `Set{ { `Index{ `Id "x", `Number 1 } }, { `Number 2 } }\OT1/p pl/m/n/10 ; [] Overfull \hbox (0.50003pt too wide) in paragraph at lines 445--447 []\OT1/pcr/m/n/10 `Set{ { `Id "a",`Id "b" }, { `Number 1, `Number 2 } }\OT1/ppl /m/n/10 ; [] Overfull \hbox (18.50003pt too wide) in paragraph at lines 448--450 []\OT1/pcr/m/n/10 `Set{ { `Id "a" }, { `Number 1, `Number 2, `Number 3 } }\OT1/ ppl/m/n/10 ; [] Overfull \hbox (95.70926pt too wide) in paragraph at lines 451--454 [][]\OT1/pcr/m/n/10 function f(x) return x end \OT1/ppl/m/n/10 is syn-tax sugar for []\OT1/pcr/m/n/10 f = function (x) return x end\OT1/ppl/m/n/10 , [] Overfull \hbox (100.00003pt too wide) in paragraph at lines 451--454 []\OT1/pcr/m/n/10 `Set{ { `Id "f" }, { `Function{ { `Id x } { `Return{ `Id "x" } } } } } [] Overfull \hbox (6.48944pt too wide) in paragraph at lines 455--458 []\OT1/pcr/m/n/10 o["f"] = function (self, x) return x end\OT1/ppl/m/n/10 , and as such, is rep- [] [19] Overfull \hbox (28.62933pt too wide) in paragraph at lines 474--476 [][]\OT1/pcr/m/n/10 local x=2 \OT1/ppl/m/n/10 is rep-re-sented as []\OT1/pcr/m/ n/10 `Local{ { `Id "x" }, { `Number 2 } }\OT1/ppl/m/n/10 ; [] Overfull \hbox (22.62933pt too wide) in paragraph at lines 477--479 [][]\OT1/pcr/m/n/10 local a, b \OT1/ppl/m/n/10 is rep-re-sented as []\OT1/pcr/m /n/10 `Local{ { `Id "a",`Id "b" }, { } }\OT1/ppl/m/n/10 ; [] Overfull \hbox (9.0pt too wide) in paragraph at lines 500--500 [] \OT1/pcr/m/n/10 { `Call{ `Id "f", `Id "x" } } } } }[] [] LaTeX Font Info: Font shape `OT1/ppl/bx/it' in size <10> not available (Font) Font shape `OT1/ppl/b/it' tried instead on input line 505. [20] Overfull \hbox (18.77942pt too wide) in paragraph at lines 549--552 \OT1/ppl/b/n/10 For state-ments[] \OT1/pcr/m/n/10 for x=,, do ; ; ... [] Overfull \hbox (0.12932pt too wide) in paragraph at lines 549--552 \OT1/pcr/m/n/10 end \OT1/ppl/m/n/10 is rep-re-sented as \OT1/pcr/m/n/10 `Fornum \OMS/cmsy/m/n/10 f \OT1/pcr/m/n/10 `Id "x", , , , [] Overfull \hbox (15.00009pt too wide) in paragraph at lines 562--565 \OT1/pcr/m/n/10 `Forin\OMS/cmsy/m/n/10 f f\OT1/pcr/m/n/10 `Id "x1",`Id "x2",... \OMS/cmsy/m/n/10 g\OT1/pcr/m/n/10 , \OMS/cmsy/m/n/10 f \OT1/pcr/m/n/10 , ,... \OMS/cmsy/m/n/10 g f \OT1/pcr/m/n/10 , [] [21] Overfull \hbox (122.0293pt too wide) in paragraph at lines 577--579 [][]\OT1/pcr/m/n/10 if then ; end \OT1/ppl/m/n/10 is rep-re-se nted as: []\OT1/pcr/m/n/10 `If{ , { , } }\OT1/ppl/m/n/10 ; [] Overfull \hbox (7.08931pt too wide) in paragraph at lines 580--583 [][]\OT1/pcr/m/n/10 if then else ; end \OT1/ppl/m/n/1 0 is rep-re-sented [] Overfull \hbox (82.00003pt too wide) in paragraph at lines 585--588 [][]\OT1/pcr/m/n/10 if then ; elseif then ; end [] Overfull \hbox (42.50003pt too wide) in paragraph at lines 585--588 []\OT1/pcr/m/n/10 `If{ , { , }, ,{ , } }\ OT1/ppl/m/n/10 ; [] Overfull \hbox (25.56914pt too wide) in paragraph at lines 609--611 \OT1/ppl/b/n/10 Ex-am-ple[] \OT1/pcr/m/n/10 return 1, 2, 3 \OT1/ppl/m/n/10 is rep-re-sented as \OT1/pcr/m/n/10 `Return\OMS/cmsy/m/n/10 f \OT1/pcr/m/n/10 `Num ber 1, `Number [] Overfull \hbox (4.76651pt too wide) in paragraph at lines 625--629 []\OT1/ppl/m/n/10 Identifiers, string AST or plain strings are equiv-a-lent: `` \OT1/pcr/m/n/10 `Label\OMS/cmsy/m/n/10 f \OT1/pcr/m/n/10 `Id "foo"\OMS/cmsy/m/n /10 g\OT1/ppl/m/n/10 '' [] Overfull \hbox (2.47899pt too wide) in paragraph at lines 625--629 \OT1/ppl/m/n/10 is syn-ony-mous for ``\OT1/pcr/m/n/10 `Label\OMS/cmsy/m/n/10 f \OT1/pcr/m/n/10 `String "foo"\OMS/cmsy/m/n/10 g\OT1/ppl/m/n/10 '' and ``\OT1/pc r/m/n/10 `Label "foo"\OT1/ppl/m/n/10 ''. The [] [22]) [23] \openout2 = `meta.aux'. (./meta.tex Overfull \hbox (7.37595pt too wide) in paragraph at lines 2--5 \OT1/ppl/m/n/10 As the pre-vi-ous sec-tion shows, AST are not ex-tremely read-a ble, and as promized, [] [24 ] Overfull \hbox (45.0pt too wide) in paragraph at lines 68--68 []\OT1/pcr/m/n/10 Y = `Let{ { `Id "four" }, { `Op{ `Add, `Number 2, `Number 2 } } }[] [] Overfull \hbox (51.0pt too wide) in paragraph at lines 68--68 []\OT1/pcr/m/n/10 X = +{ 2+2 }; Y = +{stat: four = -{ X } }[] [] Overfull \hbox (51.0pt too wide) in paragraph at lines 68--68 []\OT1/pcr/m/n/10 X = `Op{ `Add, +{2}, +{2} }; Y = +{stat: four = -{ X } }[] [] Overfull \hbox (51.0pt too wide) in paragraph at lines 68--68 []\OT1/pcr/m/n/10 X = `Op{ `Add, `Number 2, `Number 2 }; Y = +{stat: four = -{ X } }[] [] Overfull \hbox (9.0pt too wide) in paragraph at lines 68--68 []\OT1/pcr/m/n/10 Y = +{stat: four = -{ `Op{ `Add, `Number 2, `Number 2 } } }[] [] Overfull \hbox (39.0pt too wide) in paragraph at lines 68--68 []\OT1/pcr/m/n/10 Y = +{stat: four = -{ +{ -{ +{ -{ +{ -{ +{ 2+2 } } } } } } } } }[] [] Overfull \hbox (141.0pt too wide) in paragraph at lines 79--79 []\OT1/pcr/m/n/10 Y = +{stat: four = -{block: local two=`Number 2; return `Op{ `Add, two, two } } }[] [] Overfull \hbox (27.0pt too wide) in paragraph at lines 109--109 []\OT1/pcr/m/n/10 +-----------+ / \ +---+ / \ +-------- +[] [] Overfull \hbox (27.0pt too wide) in paragraph at lines 109--109 []\OT1/pcr/m/n/10 |SOURCE FILE|-->< Parser >-->|AST|-->< Compiler >-->|BYTECODE |[] [] Overfull \hbox (27.0pt too wide) in paragraph at lines 109--109 []\OT1/pcr/m/n/10 +-----------+ \______/ +---+ \________/ +-------- +[] [] [25] Overfull \hbox (33.0pt too wide) in paragraph at lines 128--128 [] \OT1/pcr/m/n/10 +------- -+[] [] Overfull \hbox (33.0pt too wide) in paragraph at lines 128--128 [] \OT1/pcr/m/n/10 ______ ________ +->|BYTECOD E|[] [] Overfull \hbox (33.0pt too wide) in paragraph at lines 128--128 []\OT1/pcr/m/n/10 +-----------+ / \ +---+ / \ | +------- -+[] [] Overfull \hbox (33.0pt too wide) in paragraph at lines 128--128 []\OT1/pcr/m/n/10 +-----------+ \______/ +-^-+ \________/ | +------- -+[] [] Overfull \hbox (33.0pt too wide) in paragraph at lines 128--128 [] \OT1/pcr/m/n/10 /|\ ________ +->|BYTECOD E|[] [] Overfull \hbox (33.0pt too wide) in paragraph at lines 128--128 [] \OT1/pcr/m/n/10 | / \ +---+--- -+[] [] Overfull \hbox (3.0pt too wide) in paragraph at lines 128--128 [] \OT1/pcr/m/n/10 +-----< Eval ><-------+[] [] Underfull \hbox (badness 10000) in paragraph at lines 134--134 [] Overfull \hbox (47.00006pt too wide) in paragraph at lines 137--137 []\OT1/pcr/m/n/10 -\OMS/cmsy/m/n/10 f\OT1/pcr/m/n/10 block: print "META HELLO"; return +\OMS/cmsy/m/n/10 f \OT1/pcr/m/n/10 print "GENERATED HELLO" \OMS/cmsy/m /n/10 g g[] [] Underfull \hbox (badness 10000) in paragraph at lines 149--150 [] Overfull \hbox (74.17773pt too wide) in paragraph at lines 159--163 \OT1/ppl/m/n/10 piler is the AST rep-re-sent-ing []\OT1/pcr/m/n/10 print "GENER ATED HELLO"; []print "NORMAL HELLO"\OT1/ppl/m/n/10 . [] [26] Overfull \hbox (25.81767pt too wide) in paragraph at lines 186--189 []\OT1/ppl/m/n/10 Here is the prob-lem: in Lua, choices are made by us-ing []\O T1/pcr/m/n/10 if _ then _ else _ end [] Underfull \hbox (badness 10000) in paragraph at lines 213--213 [] [27] Overfull \hbox (21.0pt too wide) in paragraph at lines 217--217 [] \OT1/pcr/m/n/10 -- Declaring the [ternary] metafunction. As a metafunction, [] [] Overfull \hbox (49.00003pt too wide) in paragraph at lines 218--218 [] \OT1/pcr/m/n/10 -- it only exists within -\OMS/cmsy/m/n/10 f\OT1/pcr/m/n/10 ...\OMS/cmsy/m/n/10 g\OT1/pcr/m/n/10 , i.e. not in the program itself.[] [] Overfull \hbox (7.00012pt too wide) in paragraph at lines 225--225 []\OT1/pcr/m/n/10 hi = -\OMS/cmsy/m/n/10 f \OT1/pcr/m/n/10 ternary ( +\OMS/cmsy /m/n/10 f\OT1/pcr/m/n/10 lang=="fr"\OMS/cmsy/m/n/10 g\OT1/pcr/m/n/10 , +\OMS/cm sy/m/n/10 f\OT1/pcr/m/n/10 "Bonjour"\OMS/cmsy/m/n/10 g\OT1/pcr/m/n/10 , +\OMS/c msy/m/n/10 f\OT1/pcr/m/n/10 "Hello"\OMS/cmsy/m/n/10 g\OT1/pcr/m/n/10 ) \OMS/cms y/m/n/10 g[] [] Overfull \hbox (7.00012pt too wide) in paragraph at lines 229--229 []\OT1/pcr/m/n/10 hi = -\OMS/cmsy/m/n/10 f \OT1/pcr/m/n/10 ternary ( +\OMS/cmsy /m/n/10 f\OT1/pcr/m/n/10 lang=="fr"\OMS/cmsy/m/n/10 g\OT1/pcr/m/n/10 , +\OMS/cm sy/m/n/10 f\OT1/pcr/m/n/10 "Bonjour"\OMS/cmsy/m/n/10 g\OT1/pcr/m/n/10 , +\OMS/c msy/m/n/10 f\OT1/pcr/m/n/10 "Hello"\OMS/cmsy/m/n/10 g\OT1/pcr/m/n/10 ) \OMS/cms y/m/n/10 g[] [] Underfull \hbox (badness 10000) in paragraph at lines 240--241 [] Overfull \hbox (10.44992pt too wide) in paragraph at lines 249--257 []\OT1/pcr/m/n/10 x=x+1 \OT1/ppl/m/n/10 is []\OT1/pcr/m/n/10 `Let{ { `Id x }, { `Op{ `Add, `Id x, `Number 1 } } }\OT1/ppl/m/n/10 . [] Underfull \hbox (badness 10000) in paragraph at lines 258--258 [] [28] Overfull \hbox (13.00012pt too wide) in paragraph at lines 265--265 [] \OT1/pcr/m/n/10 return `Let\OMS/cmsy/m/n/10 f f \OT1/pcr/m/n/10 var \OM S/cmsy/m/n/10 g\OT1/pcr/m/n/10 , \OMS/cmsy/m/n/10 f \OT1/pcr/m/n/10 `Op\OMS/cms y/m/n/10 f \OT1/pcr/m/n/10 `Add, var, `Number 1 \OMS/cmsy/m/n/10 g g g[] [] Underfull \hbox (badness 10000) in paragraph at lines 280--281 [] ) [29] [30 ] Chapter 1. LaTeX Font Info: Font shape `OT1/ppl/bx/n' in size <20.74> not available (Font) Font shape `OT1/ppl/b/n' tried instead on input line 37. [31] \openout2 = `gg-ref.aux'. (./gg-ref.tex Overfull \hbox (69.0pt too wide) in paragraph at lines 54--54 [] \OT1/pcr/m/n/10 func_params_content, ")", mlp.block, "end" }[] [] Overfull \hbox (3.0pt too wide) in paragraph at lines 54--54 []\OT1/pcr/m/n/10 func_stat = gg.sequence{ "local", "function", mlp.id, "(",[] [] Overfull \hbox (69.0pt too wide) in paragraph at lines 54--54 [] \OT1/pcr/m/n/10 func_params_content, ")", mlp.block, "end" }[] [] [32 ] Overfull \hbox (3.68726pt too wide) in paragraph at lines 80--85 \OT1/ppl/m/n/10 and the builder re-turns \OT1/pcr/m/n/10 x\OT1/ppl/m/n/10 , the n the whole parser re-turns \OT1/pcr/m/n/10 f3(f2(f1(x)))\OT1/ppl/m/n/10 . [] Overfull \hbox (0.7478pt too wide) in paragraph at lines 100--102 []\OT1/ppl/m/n/10 It can also be di-rectly called as sim-ply []\OT1/pcr/m/n/10 x(lexer) \OT1/ppl/m/n/10 in-stead of []\OT1/pcr/m/n/10 x:parse(lexer)\OT1/ppl/m /n/10 . [] [33] Overfull \hbox (39.0pt too wide) in paragraph at lines 125--125 [] \OT1/pcr/m/n/10 mlp.do_stat, mlp.while_stat, mlp.repeat_stat, mlp.if_stat.. . }[] [] Overfull \hbox (25.36647pt too wide) in paragraph at lines 133--143 \OT1/ppl/m/n/10 struc-tor, and are con-verted into se-quence parsers on-the-fly by call-ing []\OT1/pcr/m/n/10 gg.sequence [] Overfull \hbox (2.07597pt too wide) in paragraph at lines 153--159 \OT1/ppl/m/n/10 turn value is re-turned as the parser's re-sult. If ab-sent, th e se-lected parser's [] Overfull \hbox (62.307pt too wide) in paragraph at lines 153--159 \OT1/ppl/m/n/10 re-sult is sim-ply re-turned. It can be up-dated at any-time wi th []\OT1/pcr/m/n/10 x.builder = \OT1/ppl/m/n/10 . [] Overfull \hbox (58.00003pt too wide) in paragraph at lines 159--163 []\OT1/pcr/m/n/10 builder = function(x) return { tag = "foobar"; unpack (x) } e nd [] [34] Overfull \hbox (0.7478pt too wide) in paragraph at lines 179--181 []\OT1/ppl/m/n/10 It can also be di-rectly called as sim-ply []\OT1/pcr/m/n/10 x(lexer) \OT1/ppl/m/n/10 in-stead of []\OT1/pcr/m/n/10 x:parse(lexer)\OT1/ppl/m /n/10 . [] Overfull \hbox (11.24693pt too wide) in paragraph at lines 188--194 []\OT1/ppl/m/n/10 Take a se-quence parser, or a con-fig ta-ble that would be ac -cepted by []\OT1/pcr/m/n/10 gg.sequence [] [35] [36] Overfull \hbox (58.00003pt too wide) in paragraph at lines 284--288 []\OT1/pcr/m/n/10 builder = function(x) return { tag = "foobar"; unpack (x) } e nd [] Overfull \hbox (0.7478pt too wide) in paragraph at lines 308--310 []\OT1/ppl/m/n/10 It can also be di-rectly called as sim-ply []\OT1/pcr/m/n/10 x(lexer) \OT1/ppl/m/n/10 in-stead of []\OT1/pcr/m/n/10 x:parse(lexer)\OT1/ppl/m /n/10 . [] [37] Overfull \hbox (69.0pt too wide) in paragraph at lines 341--345 []\OT1/pcr/m/n/10 { "+", prec=60, assoc="left", builder= |a, _, b| `Op{ `Add, a, b } } [] Overfull \hbox (5.62663pt too wide) in paragraph at lines 348--351 \OT1/ppl/b/n/10 In-fix op-er-a-tors[] \OT1/ppl/m/n/10 In-fix op-er-a-tors are de-scribed by a ta-ble whose array-part works [] Overfull \hbox (4.10693pt too wide) in paragraph at lines 353--357 [][]\OT1/pcr/m/n/10 prec = \OT1/ppl/m/n/10 its prece-dence. The higher the prece-dence, the tighter [] [38] Overfull \hbox (20.18748pt too wide) in paragraph at lines 397--399 \OT1/ppl/b/n/10 Suf-fix op-er-a-tors[] \OT1/ppl/m/n/10 Same as pre-fix op-er-a -tors, ex-cept that []\OT1/pcr/m/n/10 builder \OT1/ppl/m/n/10 takes \OT1/pcr/m/ n/10 |operand, [] [39] Overfull \hbox (0.7478pt too wide) in paragraph at lines 443--445 []\OT1/ppl/m/n/10 It can also be di-rectly called as sim-ply []\OT1/pcr/m/n/10 x(lexer) \OT1/ppl/m/n/10 in-stead of []\OT1/pcr/m/n/10 x:parse(lexer)\OT1/ppl/m /n/10 . [] [40] Overfull \hbox (0.7478pt too wide) in paragraph at lines 488--490 []\OT1/ppl/m/n/10 It can also be di-rectly called as sim-ply []\OT1/pcr/m/n/10 x(lexer) \OT1/ppl/m/n/10 in-stead of []\OT1/pcr/m/n/10 x:parse(lexer)\OT1/ppl/m /n/10 . [] ) [41] \openout2 = `mlp-ref.aux'. (./mlp-ref.tex Underfull \hbox (badness 2426) in paragraph at lines 33--33 \OT1/ppl/m/n/10 ments' open-ning paren-the-sis to the fi-nal [] Underfull \hbox (badness 1642) in paragraph at lines 33--33 \OT1/pcr/m/n/10 end\OT1/ppl/m/n/10 , but ex-clud-ing the ini-tial \OT1/pcr/m/n/ 10 function [] Underfull \hbox (badness 4805) in paragraph at lines 33--33 \OT1/ppl/m/n/10 key-word, so that it can be used both [] Underfull \hbox (badness 2922) in paragraph at lines 33--33 \OT1/ppl/m/n/10 for anony-mous func-tions, for \OT1/pcr/m/n/10 function [] Underfull \hbox (badness 10000) in paragraph at lines 33--33 \OT1/pcr/m/n/10 some[]name(...) end \OT1/ppl/m/n/10 and for \OT1/pcr/m/n/10 loc al [] Underfull \hbox (badness 1147) in paragraph at lines 65--65 []\OT1/ppl/m/n/10 Try to read an iden-ti-fier, or an iden-ti-fier [] Overfull \hbox (40.1871pt too wide) in paragraph at lines 23--71 [] [] Underfull \hbox (badness 4279) in paragraph at lines 78--78 []\OT1/ppl/m/n/10 Read a se-quence of state-ments, op-tion- [] Underfull \hbox (badness 10000) in paragraph at lines 78--78 \OT1/ppl/m/n/10 ally sep-a-rated by semi-colons. When [] Underfull \hbox (badness 4805) in paragraph at lines 78--78 \OT1/ppl/m/n/10 in-tro-duc-ing syn-tax ex-ten-sions, it's of-ten [] Underfull \hbox (badness 2591) in paragraph at lines 78--78 \OT1/ppl/m/n/10 nec-es-sary to add block ter-mi-na-tors with [] Overfull \hbox (53.21857pt too wide) in paragraph at lines 74--83 [] [] Underfull \vbox (badness 4341) has occurred while \output is active [] [42 ]) [43] \openout2 = `stdlib.aux'. (./stdlib.tex Underfull \hbox (badness 10000) in paragraph at lines 12--13 [] Underfull \hbox (badness 10000) in paragraph at lines 17--18 [] Underfull \hbox (badness 10000) in paragraph at lines 22--23 [] Underfull \hbox (badness 10000) in paragraph at lines 29--30 [] Underfull \hbox (badness 10000) in paragraph at lines 34--35 [] Underfull \hbox (badness 10000) in paragraph at lines 39--40 [] Underfull \hbox (badness 10000) in paragraph at lines 43--44 [] [44 ] Overfull \hbox (34.82903pt too wide) in paragraph at lines 48--50 []\OT1/pcr/m/n/10 for x in values(t) do [...] end \OT1/ppl/m/n/10 is equiv-a-le nt to \OT1/pcr/m/n/10 for [], x in pairs(t) [] Underfull \hbox (badness 10000) in paragraph at lines 51--52 [] Overfull \hbox (22.82903pt too wide) in paragraph at lines 57--59 []\OT1/pcr/m/n/10 for k in keys(t) do [...] end \OT1/ppl/m/n/10 is equiv-a-lent to \OT1/pcr/m/n/10 for k, [] in pairs(t) [] Underfull \hbox (badness 10000) in paragraph at lines 61--62 [] Underfull \hbox (badness 10000) in paragraph at lines 66--67 [] Underfull \hbox (badness 10000) in paragraph at lines 70--71 [] Underfull \hbox (badness 10000) in paragraph at lines 80--81 [] [45] Underfull \hbox (badness 10000) in paragraph at lines 106--107 [] Overfull \hbox (15.66942pt too wide) in paragraph at lines 111--113 []\OT1/ppl/m/n/10 For in-stance, \OT1/pcr/m/n/10 table.imap((|x,y|x+y), 2, \OMS /cmsy/m/n/10 f\OT1/pcr/m/n/10 "foo", 1, 2, 3\OMS/cmsy/m/n/10 g\OT1/pcr/m/n/10 , \OMS/cmsy/m/n/10 f\OT1/pcr/m/n/10 "bar", [] Underfull \hbox (badness 10000) in paragraph at lines 114--115 [] Overfull \hbox (17.5pt too wide) in paragraph at lines 122--127 \OT1/pcr/m/n/10 table.ifold( (|acc, xi, yi| acc + max (xi, yi)), 0, 2, x, y)\OT 1/ppl/m/n/10 . [] Underfull \hbox (badness 10000) in paragraph at lines 128--129 [] Underfull \hbox (badness 10000) in paragraph at lines 135--136 [] [46] Underfull \hbox (badness 10000) in paragraph at lines 140--141 [] Underfull \hbox (badness 10000) in paragraph at lines 145--146 [] Overfull \hbox (2.17764pt too wide) in paragraph at lines 147--149 []\OT1/ppl/m/n/10 Flatten a list of lists into a list. for in-stance, \OT1/pcr/ m/n/10 table.iflatten\OMS/cmsy/m/n/10 ff\OT1/pcr/m/n/10 1,2\OMS/cmsy/m/n/10 g\O T1/pcr/m/n/10 , \OMS/cmsy/m/n/10 f\OT1/pcr/m/n/10 3,4\OMS/cmsy/m/n/10 gg [] Underfull \hbox (badness 10000) in paragraph at lines 155--156 [] Underfull \hbox (badness 10000) in paragraph at lines 160--161 [] Underfull \hbox (badness 10000) in paragraph at lines 165--166 [] Underfull \hbox (badness 10000) in paragraph at lines 171--172 [] Underfull \hbox (badness 10000) in paragraph at lines 177--178 [] [47] Underfull \hbox (badness 10000) in paragraph at lines 182--183 [] Underfull \hbox (badness 10000) in paragraph at lines 191--192 [] Underfull \hbox (badness 10000) in paragraph at lines 202--203 [] [48] Overfull \hbox (5.48813pt too wide) in paragraph at lines 221--229 \OT1/ppl/m/n/10 aliases to other stan-dard func-tions such as \OT1/pcr/m/n/10 l oadstring() \OT1/ppl/m/n/10 or \OT1/pcr/m/n/10 string.dump()\OT1/ppl/m/n/10 ; [] ) [49] \openout2 = `clopts-ref.aux'. (./clopts-ref.tex) [50 ] \openout2 = `springs-ref.aux'. (./springs-ref.tex Overfull \hbox (2.28566pt too wide) in paragraph at lines 21--23 \OT1/ppl/m/n/10 Notice how-ever that the Pluto ver-sion used in met-alua has si g-nif-i-cantly patched [] ) [51 ] \openout2 = `walk-ref.aux'. (./walk-ref.tex Overfull \hbox (1.67618pt too wide) in paragraph at lines 3--12 \OT1/ppl/m/n/10 check for some prop-erty, you of-ten need to de-sign a func-tio n that walks through [] [52 ] Overfull \hbox (19.36885pt too wide) in paragraph at lines 74--79 \OT1/ppl/m/n/10 There are 3 main tree walk-ers: \OT1/pcr/m/n/10 walk.expr()\OT1 /ppl/m/n/10 , \OT1/pcr/m/n/10 walk.stat() \OT1/ppl/m/n/10 and \OT1/pcr/m/n/10 w alk.block()\OT1/ppl/m/n/10 , [] Overfull \hbox (3.61923pt too wide) in paragraph at lines 80--85 []\OT1/pcr/m/n/10 cfg.stat.down(node, parent, grandparent...)\OT1/ppl/m/n/10 , which ap-plies [] Overfull \hbox (0.66913pt too wide) in paragraph at lines 85--89 []\OT1/pcr/m/n/10 cfg.stat.up(node, parent, grandparent...)\OT1/ppl/m/n/10 , wh ich is ap-plies [] Overfull \hbox (3.22891pt too wide) in paragraph at lines 89--94 []\OT1/pcr/m/n/10 cfg.expr.down() \OT1/ppl/m/n/10 and \OT1/pcr/m/n/10 cfg.expr. up()\OT1/ppl/m/n/10 , which work just as their \OT1/pcr/m/n/10 stat [] [53] Overfull \hbox (8.72974pt too wide) in paragraph at lines 96--99 []\OT1/pcr/m/n/10 cfg.binder(identifier, id[]parent, id[]grandparent...)\OT1/pp l/m/n/10 : this [] [54] Overfull \hbox (135.0pt too wide) in paragraph at lines 217--217 []\OT1/pcr/m/n/10 ------------------------------------------------------------- -------------------[] [] Overfull \hbox (27.0pt too wide) in paragraph at lines 217--217 []\OT1/pcr/m/n/10 -- Scope handling: ':push()' saves the current scope, ':pop() '[] [] Overfull \hbox (57.0pt too wide) in paragraph at lines 217--217 []\OT1/pcr/m/n/10 -- restores the previously saved one. ':add(identifiers_list) ' adds[] [] Overfull \hbox (33.0pt too wide) in paragraph at lines 217--217 []\OT1/pcr/m/n/10 -- identifiers to the current scope. Current scope is stored in[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 217--217 []\OT1/pcr/m/n/10 ------------------------------------------------------------- -------------------[] [] [55] Overfull \hbox (33.0pt too wide) in paragraph at lines 217--217 [] \OT1/pcr/m/n/10 table.insert (self.stack, table.shallow_copy (self.current ))[] [] Overfull \hbox (3.0pt too wide) in paragraph at lines 217--217 [] \OT1/pcr/m/n/10 match id with `Id{ x } -> self.current[x] = true end[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 243--243 [] \OT1/pcr/m/n/10 | `Id{ name } -> if not scope.current[name] then freeva rs[name] = true end[] [] [56] Overfull \hbox (33.98691pt too wide) in paragraph at lines 250--254 \OT1/ppl/m/n/10 when we leave it. That will be done by pro-vid-ing func-tions \ OT1/pcr/m/n/10 cfg.block.down() [] Overfull \hbox (0.13757pt too wide) in paragraph at lines 250--254 \OT1/ppl/m/n/10 and \OT1/pcr/m/n/10 cfg.block.up()\OT1/ppl/m/n/10 . Sav-ing and restor-ing will be per-formed by meth- [] Overfull \hbox (135.0pt too wide) in paragraph at lines 278--278 [] \OT1/pcr/m/n/10 ---------------------------------------------------------- -------------------[] [] Overfull \hbox (63.0pt too wide) in paragraph at lines 278--278 [] \OT1/pcr/m/n/10 -- Create a separate scope for each block, close it when l eaving.[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 278--278 [] \OT1/pcr/m/n/10 ---------------------------------------------------------- -------------------[] [] [57] Overfull \hbox (135.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 ---------------------------------------------------------- -------------------[] [] Overfull \hbox (93.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 -- Check identifiers; add functions parameters to newly cr eated scope.[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 ---------------------------------------------------------- -------------------[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 | `Id{ name } -> if not scope.current[name] then freeva rs[name] = true end[] [] Overfull \hbox (51.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 | `Function{ params, _ } -> scope:push(); scope:add (pa rams)[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 ---------------------------------------------------------- -------------------[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 ---------------------------------------------------------- -------------------[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 ---------------------------------------------------------- -------------------[] [] Overfull \hbox (15.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 -- Create a new scope and register loop variable[s] in it[ ] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 ---------------------------------------------------------- -------------------[] [] Overfull \hbox (33.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 | `Forin{ vars, ... } -> scope:push(); scope:add(var s)[] [] Overfull \hbox (27.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 | `Fornum{ var, ... } -> scope:push(); scope:add{var }[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 ---------------------------------------------------------- -------------------[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 ---------------------------------------------------------- -------------------[] [] [58] Overfull \hbox (135.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 ---------------------------------------------------------- -------------------[] [] Overfull \hbox (63.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 -- Create a separate scope for each block, close it when l eaving.[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 355--355 [] \OT1/pcr/m/n/10 ---------------------------------------------------------- -------------------[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 385--385 [] \OT1/pcr/m/n/10 ---------------------------------------------------------- -------------------[] [] Overfull \hbox (15.0pt too wide) in paragraph at lines 385--385 [] \OT1/pcr/m/n/10 -- Create a new scope and register loop variable[s] in it[ ] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 385--385 [] \OT1/pcr/m/n/10 ---------------------------------------------------------- -------------------[] [] Overfull \hbox (33.0pt too wide) in paragraph at lines 385--385 [] \OT1/pcr/m/n/10 | `Forin{ vars, ... } -> scope:push(); scope:add(var s)[] [] Overfull \hbox (27.0pt too wide) in paragraph at lines 385--385 [] \OT1/pcr/m/n/10 | `Fornum{ var, ... } -> scope:push(); scope:add{var }[] [] Overfull \hbox (75.0pt too wide) in paragraph at lines 385--385 [] \OT1/pcr/m/n/10 | `Repeat{ block, cond } -> -- 'cond' is in the scope o f 'block'[] [] Overfull \hbox (93.0pt too wide) in paragraph at lines 385--385 [] \OT1/pcr/m/n/10 for s in values (block) do walk.stat(cfg)(s) end -- no new scope[] [] Overfull \hbox (117.0pt too wide) in paragraph at lines 385--385 [] \OT1/pcr/m/n/10 return 'break' -- No automatic walking of subparts ' cond' and 'body'[] [] [59] Overfull \hbox (2.89964pt too wide) in paragraph at lines 414--416 []\OT1/pcr/m/n/10 cfg.id.free(identifier, parent, grandparent...)\OT1/ppl/m/n/1 0 , which is [] Overfull \hbox (18.50003pt too wide) in paragraph at lines 416--419 []\OT1/pcr/m/n/10 cfg.id.bound(identifier, binder, parent, grandparent...)\OT1/ ppl/m/n/10 , [] [60] Overfull \hbox (135.0pt too wide) in paragraph at lines 490--490 []\OT1/pcr/m/n/10 ------------------------------------------------------------- -------------------[] [] Overfull \hbox (69.0pt too wide) in paragraph at lines 490--490 []\OT1/pcr/m/n/10 -- bound_vars keeps a binder node -> old_name -> new_name dic tionary.[] [] Overfull \hbox (51.0pt too wide) in paragraph at lines 490--490 []\OT1/pcr/m/n/10 -- It allows to associate all instances of an identifier toge ther,[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 490--490 []\OT1/pcr/m/n/10 ------------------------------------------------------------- -------------------[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 490--490 []\OT1/pcr/m/n/10 ------------------------------------------------------------- -------------------[] [] Overfull \hbox (51.0pt too wide) in paragraph at lines 490--490 []\OT1/pcr/m/n/10 -- local_renames will keep all identifier nodes to rename as keys,[] [] Overfull \hbox (33.0pt too wide) in paragraph at lines 490--490 []\OT1/pcr/m/n/10 -- and their new name as values. The renaming must happen aft er[] [] Overfull \hbox (87.0pt too wide) in paragraph at lines 490--490 []\OT1/pcr/m/n/10 -- the whole tree has been visited, in order to avoid breakin g captures.[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 490--490 []\OT1/pcr/m/n/10 ------------------------------------------------------------- -------------------[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 490--490 []\OT1/pcr/m/n/10 ------------------------------------------------------------- -------------------[] [] Overfull \hbox (81.0pt too wide) in paragraph at lines 490--490 []\OT1/pcr/m/n/10 -- Associate a new name in bound_vars when a local variable i s created.[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 490--490 []\OT1/pcr/m/n/10 ------------------------------------------------------------- -------------------[] [] Overfull \hbox (99.0pt too wide) in paragraph at lines 490--490 [] \OT1/pcr/m/n/10 local new_name = mlp.gensym(old_name)[1] -- genera te a new name[] [] Overfull \hbox (87.0pt too wide) in paragraph at lines 490--490 [] \OT1/pcr/m/n/10 binder_table[old_name] = new_name -- remember name for nex t instances[] [] Overfull \hbox (57.0pt too wide) in paragraph at lines 490--490 [] \OT1/pcr/m/n/10 local_renames[id] = new_name -- add to the rename tod o-list[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 490--490 []\OT1/pcr/m/n/10 ------------------------------------------------------------- -------------------[] [] Overfull \hbox (135.0pt too wide) in paragraph at lines 490--490 []\OT1/pcr/m/n/10 ------------------------------------------------------------- -------------------[] [] [61] Overfull \hbox (39.0pt too wide) in paragraph at lines 490--490 []\OT1/pcr/m/n/10 for id, new_name in pairs(local_renames) do id[1] = new_name end[] [] ) [62] Chapter 2. [63 ] \openout2 = `match-ref.aux'. (./match-ref.tex Overfull \hbox (6.73804pt too wide) in paragraph at lines 14--25 \OT1/ppl/m/n/10 match-ing: it lets you give a list of (\OT1/pcr/m/n/10 pattern -> code[]to[]execute[]if[]match\OT1/ppl/m/n/10 ) [] Overfull \hbox (32.70644pt too wide) in paragraph at lines 49--54 []\OT1/ppl/m/n/10 When the match state-ment is ex-e-cuted, the first pat-tern w hich matches \OT1/pcr/m/n/10 [] [64 ] Overfull \hbox (0.31627pt too wide) in paragraph at lines 85--91 \OT1/ppl/b/n/10 Iden-ti-fiers[] \OT1/ppl/m/n/10 The other fun-da-men-tal kind of pat-terns are iden-ti-fiers: they match [] Overfull \hbox (117.0pt too wide) in paragraph at lines 97--97 []\OT1/pcr/m/n/10 | `Local{ identifiers, values } -> table.foreach(identifiers, |x| print(x[1])[] [] [65] [66] Overfull \hbox (45.0pt too wide) in paragraph at lines 167--167 []\OT1/pcr/m/n/10 | "^(%w+) +(%w+) +(%w+)$"/{ w1, w2, w3 } -> do_stuff (w1, w2, w3)[] [] ) [67] \openout2 = `dollar-ref.aux'. (./dollar-ref.tex) [68 ] \openout2 = `clist-ref.aux'. (./clist-ref.tex Overfull \hbox (13.74886pt too wide) in paragraph at lines 43--49 \OT1/ppl/m/n/10 have been \OT1/pcr/m/n/10 y = \OMS/cmsy/m/n/10 f\OT1/pcr/m/n/10 i for i=1,3; i for i=1,3; i for i=1,3\OMS/cmsy/m/n/10 g \OT1/ppl/m/n/10 (no-ti ce how- [] [69 ]) [70] \openout2 = `hygiene-ref.aux'. (./hygiene-ref.tex) [71 ] \openout2 = `samples.aux'. (./samples.tex) [72 ] \openout2 = `sample-exception.aux'. (./sample-exception.tex Overfull \hbox (21.0pt too wide) in paragraph at lines 32--32 [] \OT1/pcr/m/n/10 -> [] [] Overfull \hbox (21.0pt too wide) in paragraph at lines 32--32 []\OT1/pcr/m/n/10 | -> [] [] Overfull \hbox (21.0pt too wide) in paragraph at lines 32--32 []\OT1/pcr/m/n/10 | -> [] [] Overfull \hbox (33.0pt too wide) in paragraph at lines 49--49 [] \OT1/pcr/m/n/10 gg.sequence{ "try", mlp.block, "with", gg.optkeyword "| ",[] [] Overfull \hbox (63.0pt too wide) in paragraph at lines 49--49 [] \OT1/pcr/m/n/10 gg.list{ gg.sequence{ mlp.expr, "->", mlp.b lock },[] [] Overfull \hbox (45.0pt too wide) in paragraph at lines 49--49 [] \OT1/pcr/m/n/10 separators = "|", terminators = "end " },[] [] [73 ] Overfull \hbox (44.87628pt too wide) in paragraph at lines 51--58 \OT1/ppl/m/n/10 word. The parser del-e-gates the build-ing of the re-sult-ing s tate-ment to \OT1/pcr/m/n/10 trywith[]builder\OT1/ppl/m/n/10 , [] Overfull \hbox (0.56863pt too wide) in paragraph at lines 77--80 []\OT1/ppl/m/n/10 The fun-da-men-tal mech-a-nism is \OT1/pcr/m/n/10 pcall(func, arg1, arg2, ..., argn)\OT1/ppl/m/n/10 : [] [74] Overfull \hbox (11.217pt too wide) in paragraph at lines 125--130 []\OT1/ppl/m/n/10 To com-pile a \OT1/pcr/m/n/10 try/with \OT1/ppl/m/n/10 block, af-ter hav-ing put the guarded block into a \OT1/pcr/m/n/10 pcall() [] Overfull \hbox (69.0pt too wide) in paragraph at lines 154--154 []\OT1/pcr/m/n/10 | exn_nomorecofee -> print "you shouldn't see that: uncompara ble exn"[] [] Overfull \hbox (87.0pt too wide) in paragraph at lines 154--154 []\OT1/pcr/m/n/10 | exn_nullarg -> print "you shouldn't see that: too speci alized exn"[] [] Overfull \hbox (51.0pt too wide) in paragraph at lines 154--154 []\OT1/pcr/m/n/10 | exception -> print "execution should never reach that far"[] [] [75] Underfull \vbox (badness 10000) has occurred while \output is active [] [76] Overfull \hbox (15.0pt too wide) in paragraph at lines 219--219 [] \OT1/pcr/m/n/10 ---------------------------------------------------------[ ] [] Overfull \hbox (15.0pt too wide) in paragraph at lines 219--219 [] \OT1/pcr/m/n/10 ---------------------------------------------------------[ ] [] Overfull \hbox (15.0pt too wide) in paragraph at lines 219--219 [] \OT1/pcr/m/n/10 ---------------------------------------------------------[ ] [] Overfull \hbox (33.0pt too wide) in paragraph at lines 219--219 [] \OT1/pcr/m/n/10 -- [catchers] is the big [if] statement which handles erro rs[] [] Overfull \hbox (15.0pt too wide) in paragraph at lines 219--219 [] \OT1/pcr/m/n/10 ---------------------------------------------------------[ ] [] Overfull \hbox (27.0pt too wide) in paragraph at lines 219--219 [] \OT1/pcr/m/n/10 -- insert the corresponding block to execute on success :[] [] Overfull \hbox (15.0pt too wide) in paragraph at lines 219--219 [] \OT1/pcr/m/n/10 ---------------------------------------------------------[ ] [] Overfull \hbox (27.0pt too wide) in paragraph at lines 219--219 [] \OT1/pcr/m/n/10 -- Finally, put an [else] block to rethrow uncought errors :[] [] Overfull \hbox (15.0pt too wide) in paragraph at lines 219--219 [] \OT1/pcr/m/n/10 ---------------------------------------------------------[ ] [] Overfull \hbox (15.0pt too wide) in paragraph at lines 219--219 [] \OT1/pcr/m/n/10 ---------------------------------------------------------[ ] [] Overfull \hbox (15.0pt too wide) in paragraph at lines 219--219 [] \OT1/pcr/m/n/10 ---------------------------------------------------------[ ] [] Overfull \hbox (27.0pt too wide) in paragraph at lines 219--219 [] \OT1/pcr/m/n/10 local status, exn = { pcall (function() -{block} end) }[] [] [77] [78] Overfull \hbox (3.47722pt too wide) in paragraph at lines 290--292 []\OT1/ppl/m/n/10 Coroutines can't yield across a \OT1/pcr/m/n/10 pcall()\OT1/p pl/m/n/10 . There-fore, a yield in the guarded [] Overfull \hbox (87.0pt too wide) in paragraph at lines 320--320 [] \OT1/pcr/m/n/10 throw (exn_invalid:new "I'm sorry Dave, I'm afraid I can't do that.")[] [] Overfull \hbox (9.0pt too wide) in paragraph at lines 320--320 []\OT1/pcr/m/n/10 | exn_invalid e -> printf ("The computer choked: %s", e[1])[] [] [79]) [80] \openout2 = `sample-match.aux'. (./sample-match.tex [81 ] Overfull \hbox (33.0pt too wide) in paragraph at lines 80--80 [] \OT1/pcr/m/n/10 | `Op{ op, a, b } -> return binopfuncs[op](eval(a), eval(b ))[] [] [82] Overfull \hbox (9.28348pt too wide) in paragraph at lines 166--166 [] \OT1/pcr/m/n/10 if type(v2) == "string" then[] [] Overfull \hbox (27.28348pt too wide) in paragraph at lines 166--166 [] \OT1/pcr/m/n/10 if type(v2) == "number" then[] [] Overfull \hbox (39.28348pt too wide) in paragraph at lines 166--166 [] \OT1/pcr/m/n/10 if type(v2) == "table" then[] [] Overfull \hbox (57.28348pt too wide) in paragraph at lines 166--166 [] \OT1/pcr/m/n/10 if type(v3) == "number" then[] [] Overfull \hbox (3.28348pt too wide) in paragraph at lines 166--166 [] \OT1/pcr/m/n/10 if v2 ~= nil then[] [] Overfull \hbox (69.28348pt too wide) in paragraph at lines 166--166 [] \OT1/pcr/m/n/10 if type(v2) == "table" then[] [] Overfull \hbox (15.28348pt too wide) in paragraph at lines 166--166 [] \OT1/pcr/m/n/10 if v3 ~= nil then[] [] Overfull \hbox (3.28348pt too wide) in paragraph at lines 166--166 [] \OT1/pcr/m/n/10 let v2 = v1[4][] [] Overfull \hbox (21.28348pt too wide) in paragraph at lines 166--166 [] \OT1/pcr/m/n/10 if v2 ~= nil then[] [] Underfull \hbox (badness 10000) in paragraph at lines 104--169 [] Underfull \hbox (badness 10000) in paragraph at lines 104--169 [] Underfull \hbox (badness 10000) in paragraph at lines 104--169 [] Overfull \hbox (2.13712pt too wide) in paragraph at lines 170--174 \OT1/ppl/m/n/10 not put all as-sign-ments on one side, and all tests on an othe r, e.g. []\OT1/pcr/m/n/10 v2 = v1.tag [] Underfull \vbox (badness 10000) has occurred while \output is active [] [83] Overfull \hbox (93.0pt too wide) in paragraph at lines 215--215 [] \OT1/pcr/m/n/10 ------------------------------------------------------- ------------[] [] Overfull \hbox (57.0pt too wide) in paragraph at lines 215--215 [] \OT1/pcr/m/n/10 -- Turn a pattern into a list of conditions and assigna tions,[] [] Overfull \hbox (81.0pt too wide) in paragraph at lines 215--215 [] \OT1/pcr/m/n/10 -- stored into [acc]. [n] is the depth of the subpatter n into the[] [] Overfull \hbox (69.0pt too wide) in paragraph at lines 215--215 [] \OT1/pcr/m/n/10 -- toplevel pattern; [tested_term] is the AST of the te rm to be[] [] Overfull \hbox (87.0pt too wide) in paragraph at lines 215--215 [] \OT1/pcr/m/n/10 -- tested; [pattern] is the AST of a pattern, or a subt ree of that[] [] Overfull \hbox (93.0pt too wide) in paragraph at lines 215--215 [] \OT1/pcr/m/n/10 ------------------------------------------------------- ------------[] [] Overfull \hbox (57.0pt too wide) in paragraph at lines 215--215 [] \OT1/pcr/m/n/10 if "Number" == pattern.tag or "String" == pattern.ta g then[] [] Overfull \hbox (3.0pt too wide) in paragraph at lines 215--215 [] \OT1/pcr/m/n/10 accumulate (+{stat: local -{pattern} = -{v} })[] [] Overfull \hbox (15.0pt too wide) in paragraph at lines 215--215 [] \OT1/pcr/m/n/10 then key = x[1]; sub_pattern = x[2][ ] [] Overfull \hbox (87.0pt too wide) in paragraph at lines 215--215 [] \OT1/pcr/m/n/10 else key = `Number{ idx }; sub_pattern = x; id x=idx+1 end[] [] Overfull \hbox (15.0pt too wide) in paragraph at lines 215--215 [] \OT1/pcr/m/n/10 accumulate (+{stat: (-{w}) = -{v} [-{key}] })[ ] [] Overfull \hbox (93.0pt too wide) in paragraph at lines 215--215 [] \OT1/pcr/m/n/10 ------------------------------------------------------- ------------[] [] Overfull \hbox (104.39642pt too wide) in paragraph at lines 229--237 []\OT1/ppl/m/n/10 In the quotes, you might no-tice the paren-the-ses around the vari-able in ``[]\OT1/pcr/m/n/10 (-{w}) = -{v} [-{key}]\OT1/ppl/m/n/10 '': [] [84] Overfull \hbox (93.0pt too wide) in paragraph at lines 277--277 [] \OT1/pcr/m/n/10 ------------------------------------------------------- ------------[] [] Overfull \hbox (39.0pt too wide) in paragraph at lines 277--277 [] \OT1/pcr/m/n/10 -- Turn a list of tests and assignations into [acc] int o a[] [] Overfull \hbox (15.0pt too wide) in paragraph at lines 277--277 [] \OT1/pcr/m/n/10 -- single term of nested conditionals and assignments.[ ] [] Overfull \hbox (81.0pt too wide) in paragraph at lines 277--277 [] \OT1/pcr/m/n/10 -- [inner_term] is the AST of a term to be put into the innermost[] [] Overfull \hbox (81.0pt too wide) in paragraph at lines 277--277 [] \OT1/pcr/m/n/10 -- conditionnal, after all assignments. [n] is the inde x in [acc][] [] Overfull \hbox (69.0pt too wide) in paragraph at lines 277--277 [] \OT1/pcr/m/n/10 -- This is a recursive function, which builds the inner part of[] [] Overfull \hbox (9.0pt too wide) in paragraph at lines 277--277 [] \OT1/pcr/m/n/10 -- the statement first, then surrounds it with nested[] [] Overfull \hbox (69.0pt too wide) in paragraph at lines 277--277 [] \OT1/pcr/m/n/10 -- [if ... then ... end], [local ... = ...] and [let .. . = ...][] [] Overfull \hbox (93.0pt too wide) in paragraph at lines 277--277 [] \OT1/pcr/m/n/10 ------------------------------------------------------- ------------[] [] Overfull \hbox (105.0pt too wide) in paragraph at lines 277--277 [] \OT1/pcr/m/n/10 assert (not inner_term.tag, "collapse inner term mus t be a block")[] [] Overfull \hbox (45.0pt too wide) in paragraph at lines 277--277 [] \OT1/pcr/m/n/10 assert (not inside.tag, "collapse must produce a blo ck")[] [] Overfull \hbox (99.0pt too wide) in paragraph at lines 277--277 [] \OT1/pcr/m/n/10 -- [it] is a test, put it in an [if ... then .. e nd] statement[] [] Overfull \hbox (105.0pt too wide) in paragraph at lines 277--277 [] \OT1/pcr/m/n/10 -- [it] is a statement, just add it at the result 's beginning.[] [] [85] Overfull \hbox (21.0pt too wide) in paragraph at lines 322--322 [] \OT1/pcr/m/n/10 local v1, v2, ... vx -- variables used to store subpatterns [] [] Overfull \hbox (93.0pt too wide) in paragraph at lines 343--343 [] \OT1/pcr/m/n/10 ------------------------------------------------------- ------------[] [] Overfull \hbox (63.0pt too wide) in paragraph at lines 343--343 [] \OT1/pcr/m/n/10 -- parse all [pattern ==> block] pairs. Result goes in [body].[] [] Overfull \hbox (93.0pt too wide) in paragraph at lines 343--343 [] \OT1/pcr/m/n/10 ------------------------------------------------------- ------------[] [] Overfull \hbox (117.0pt too wide) in paragraph at lines 343--343 [] \OT1/pcr/m/n/10 parse_pattern (1, case[1], var(1)) -- fill [acc] wit h conds and lets[] [] Overfull \hbox (111.0pt too wide) in paragraph at lines 343--343 [] \OT1/pcr/m/n/10 table.insert (case[2], `Break) -- to skip other c ases on success[] [] [86] Overfull \hbox (93.0pt too wide) in paragraph at lines 343--343 [] \OT1/pcr/m/n/10 for _, x in ipairs (compiled_case) do table.insert ( body, x) end[] [] Overfull \hbox (93.0pt too wide) in paragraph at lines 364--364 [] \OT1/pcr/m/n/10 ------------------------------------------------------- ------------[] [] Overfull \hbox (39.0pt too wide) in paragraph at lines 364--364 [] \OT1/pcr/m/n/10 for i = 1, max_n do table.insert (local_vars, var(i)) end[] [] Overfull \hbox (93.0pt too wide) in paragraph at lines 364--364 [] \OT1/pcr/m/n/10 ------------------------------------------------------- ------------[] [] Overfull \hbox (87.0pt too wide) in paragraph at lines 364--364 [] \OT1/pcr/m/n/10 -- cases are put inside a [repeat until true], so that the [break][] [] Overfull \hbox (105.0pt too wide) in paragraph at lines 364--364 [] \OT1/pcr/m/n/10 -- inserted after the value will jump after the last ca se on success.[] [] Overfull \hbox (93.0pt too wide) in paragraph at lines 364--364 [] \OT1/pcr/m/n/10 ------------------------------------------------------- ------------[] [] Overfull \hbox (93.0pt too wide) in paragraph at lines 364--364 [] \OT1/pcr/m/n/10 ------------------------------------------------------- ------------[] [] [87] Overfull \hbox (75.0pt too wide) in paragraph at lines 406--406 []\OT1/pcr/m/n/10 ------------------------------------------------------------- ---------[] [] Overfull \hbox (9.0pt too wide) in paragraph at lines 406--406 []\OT1/pcr/m/n/10 mlp.stat:add{ "match", mlp.expr, "with", gg.optkeyword "|",[] [] Overfull \hbox (39.0pt too wide) in paragraph at lines 406--406 [] \OT1/pcr/m/n/10 gg.list{ gg.sequence{ mlp.expr, "->", mlp.block },[] [] Overfull \hbox (75.0pt too wide) in paragraph at lines 406--406 []\OT1/pcr/m/n/10 ------------------------------------------------------------- ---------[] [] Overfull \hbox (4.38596pt too wide) in paragraph at lines 421--425 \OT1/ppl/m/n/10 tem pre-sented above. Some of these pro-pos-als can be im-ple-m ented very quickly, [] Overfull \hbox (15.27702pt too wide) in paragraph at lines 426--428 []\OT1/ppl/m/n/10 The code of the ba-sic ver-sion, as pre-sented here, is avail -able at $\OT1/pcr/m/n/10 http : / / metalua . [] [88] Overfull \hbox (9.30801pt too wide) in paragraph at lines 441--446 []\OT1/ppl/m/n/10 Labels and go-tos in met-alua ASTs are rep-re-sented as \OT1/ pcr/m/n/10 `Label\OMS/cmsy/m/n/10 f \OT1/pcr/m/n/10 id \OMS/cmsy/m/n/10 g \OT1/ ppl/m/n/10 and \OT1/pcr/m/n/10 `Goto\OMS/cmsy/m/n/10 f [] Overfull \hbox (3.56679pt too wide) in paragraph at lines 441--446 \OT1/pcr/m/n/10 id \OMS/cmsy/m/n/10 g \OT1/ppl/m/n/10 re-spec-tively, with \OT1 /pcr/m/n/10 id \OT1/ppl/m/n/10 an iden-ti-fier, typ-i-cally gen-er-ated by \OT1 /pcr/m/n/10 mlp.gensym()\OT1/ppl/m/n/10 . [] [89] Overfull \hbox (7.66571pt too wide) in paragraph at lines 535--539 \OT1/ppl/m/n/10 dummy, un-used vari-able. Non-linear oc-curences of it should p rob-a-bly be silently [] Overfull \hbox (161.43729pt too wide) in paragraph at lines 541--549 \OT1/ppl/m/n/10 ``[]\OT1/pcr/m/n/10 foo=bar\OT1/ppl/m/n/10 '' as-sign-ment. See n this way, it al-lows to write things such as ``[]\OT1/pcr/m/n/10 `If{ cond, b lock } = some_ast }\OT1/ppl/m/n/10 '' [] [90] Overfull \hbox (1.14665pt too wide) in paragraph at lines 556--564 \OT1/ppl/m/n/10 and take state-ments as right-hand sides of cases. We could al- low pat-tern match- [] [91] Overfull \hbox (23.63799pt too wide) in paragraph at lines 595--600 \OT1/ppl/m/n/10 tent to strings and num-ber. For in-stance, ``\OT1/pcr/m/n/10 < foo bar=3>eek\OT1/ppl/m/n/10 '' [] ) Overfull \hbox (6.67633pt too wide) in paragraph at lines 610--52 \OT1/ppl/m/n/10 Most of the im-prove-ments pro-posed here are ac-tu-ally im-ple -mented in the \OT1/pcr/m/n/10 match [] [92] \openout2 = `src-hints.aux'. (./src-hints.tex [93 ] Overfull \hbox (5.47766pt too wide) in paragraph at lines 93--101 \OT1/ppl/m/n/10 scaf-fold-ing from Kein-Hong Man's Yueliang project ($\OT1/pcr/ m/n/10 http : / / luaforge . net / [] [94] Overfull \hbox (10.8356pt too wide) in paragraph at lines 106--109 []\OT1/ppl/m/n/10 it's rather easy to get bitwise-identical com-pi-la-tions, be -tween what Yueliang [] Overfull \hbox (2.92763pt too wide) in paragraph at lines 128--133 []\OT1/ppl/m/n/10 So, the files bor-rowed from Yueliang are \OT1/ppl/b/n/10 lop -code.lua\OT1/ppl/m/n/10 , \OT1/ppl/b/n/10 lcode.lua\OT1/ppl/m/n/10 , and \OT1/ ppl/b/n/10 ldump.lua\OT1/ppl/m/n/10 . [] ) [95] \openout2 = `ast.aux'. (./ast.tex) [96 ] (./metalua-manual.aux (./intro.aux) (./syntax-ext.aux) (./data.aux) (./meta.aux) (./gg-ref.aux) (./mlp-ref.aux) (./stdlib.aux) (./clopts-ref.aux) (./springs-ref.aux) (./walk-ref.aux) (./match-ref.aux) (./dollar-ref.aux) (./clist-ref.aux) (./hygiene-ref.aux) (./samples.aux) (./sample-exception.aux) (./sample-match.aux) (./src-hints.aux) (./ast.aux)) ) Here is how much of TeX's memory you used: 782 strings out of 94500 9251 string characters out of 1176115 60690 words of memory out of 1000000 3841 multiletter control sequences out of 10000+50000 24604 words of font info for 62 fonts, out of 500000 for 2000 580 hyphenation exceptions out of 1000 32i,11n,43p,209b,429s stack positions out of 1500i,500n,5000p,200000b,5000s PDF statistics: 346 PDF objects out of 300000 0 named destinations out of 131072 1 words of extra memory for PDF output out of 65536 < /sw/share/texmf-dist/fonts/type1/bluesky/cm/cmr7.pfb>{/sw/share/texmf-dist/fonts/enc/dvips/psnfss/8r.enc} Output written on metalua-manual.pdf (96 pages, 338205 bytes).