| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985 | smalltalk.parser = (function(){  /*   * Generated by PEG.js 0.7.0.   *   * http://pegjs.majda.cz/   */    function quote(s) {    /*     * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a     * string literal except for the closing quote character, backslash,     * carriage return, line separator, paragraph separator, and line feed.     * Any character may appear in the form of an escape sequence.     *     * For portability, we also escape escape all control and non-ASCII     * characters. Note that "\0" and "\v" escape sequences are not used     * because JSHint does not like the first and IE the second.     */     return '"' + s      .replace(/\\/g, '\\\\')  // backslash      .replace(/"/g, '\\"')    // closing quote character      .replace(/\x08/g, '\\b') // backspace      .replace(/\t/g, '\\t')   // horizontal tab      .replace(/\n/g, '\\n')   // line feed      .replace(/\f/g, '\\f')   // form feed      .replace(/\r/g, '\\r')   // carriage return      .replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g, escape)      + '"';  }    var result = {    /*     * Parses the input with a generated parser. If the parsing is successfull,     * returns a value explicitly or implicitly specified by the grammar from     * which the parser was generated (see |PEG.buildParser|). If the parsing is     * unsuccessful, throws |PEG.parser.SyntaxError| describing the error.     */    parse: function(input, startRule) {      var parseFunctions = {        "separator": parse_separator,        "comments": parse_comments,        "ws": parse_ws,        "identifier": parse_identifier,        "varIdentifier": parse_varIdentifier,        "keyword": parse_keyword,        "className": parse_className,        "string": parse_string,        "symbol": parse_symbol,        "number": parse_number,        "hex": parse_hex,        "float": parse_float,        "integer": parse_integer,        "literalArray": parse_literalArray,        "dynamicArray": parse_dynamicArray,        "dynamicDictionary": parse_dynamicDictionary,        "pseudoVariable": parse_pseudoVariable,        "literal": parse_literal,        "variable": parse_variable,        "classReference": parse_classReference,        "reference": parse_reference,        "keywordPair": parse_keywordPair,        "binarySelector": parse_binarySelector,        "keywordPattern": parse_keywordPattern,        "binaryPattern": parse_binaryPattern,        "unaryPattern": parse_unaryPattern,        "expression": parse_expression,        "expressionList": parse_expressionList,        "expressions": parse_expressions,        "assignment": parse_assignment,        "ret": parse_ret,        "temps": parse_temps,        "blockParamList": parse_blockParamList,        "subexpression": parse_subexpression,        "statements": parse_statements,        "sequence": parse_sequence,        "block": parse_block,        "operand": parse_operand,        "unaryMessage": parse_unaryMessage,        "unaryTail": parse_unaryTail,        "unarySend": parse_unarySend,        "binaryMessage": parse_binaryMessage,        "binaryTail": parse_binaryTail,        "binarySend": parse_binarySend,        "keywordMessage": parse_keywordMessage,        "keywordSend": parse_keywordSend,        "message": parse_message,        "cascade": parse_cascade,        "jsStatement": parse_jsStatement,        "method": parse_method      };            if (startRule !== undefined) {        if (parseFunctions[startRule] === undefined) {          throw new Error("Invalid rule name: " + quote(startRule) + ".");        }      } else {        startRule = "method";      }            var pos = { offset: 0, line: 1, column: 1, seenCR: false };      var reportFailures = 0;      var rightmostFailuresPos = { offset: 0, line: 1, column: 1, seenCR: false };      var rightmostFailuresExpected = [];      var cache = {};            function padLeft(input, padding, length) {        var result = input;                var padLength = length - input.length;        for (var i = 0; i < padLength; i++) {          result = padding + result;        }                return result;      }            function escape(ch) {        var charCode = ch.charCodeAt(0);        var escapeChar;        var length;                if (charCode <= 0xFF) {          escapeChar = 'x';          length = 2;        } else {          escapeChar = 'u';          length = 4;        }                return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length);      }            function clone(object) {        var result = {};        for (var key in object) {          result[key] = object[key];        }        return result;      }            function advance(pos, n) {        var endOffset = pos.offset + n;                for (var offset = pos.offset; offset < endOffset; offset++) {          var ch = input.charAt(offset);          if (ch === "\n") {            if (!pos.seenCR) { pos.line++; }            pos.column = 1;            pos.seenCR = false;          } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {            pos.line++;            pos.column = 1;            pos.seenCR = true;          } else {            pos.column++;            pos.seenCR = false;          }        }                pos.offset += n;      }            function matchFailed(failure) {        if (pos.offset < rightmostFailuresPos.offset) {          return;        }                if (pos.offset > rightmostFailuresPos.offset) {          rightmostFailuresPos = clone(pos);          rightmostFailuresExpected = [];        }                rightmostFailuresExpected.push(failure);      }            function parse_separator() {        var cacheKey = "separator@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1;                if (/^[ \t\x0B\f\xA0\uFEFF\n\r\u2028\u2029]/.test(input.charAt(pos.offset))) {          result1 = input.charAt(pos.offset);          advance(pos, 1);        } else {          result1 = null;          if (reportFailures === 0) {            matchFailed("[ \\t\\x0B\\f\\xA0\\uFEFF\\n\\r\\u2028\\u2029]");          }        }        if (result1 !== null) {          result0 = [];          while (result1 !== null) {            result0.push(result1);            if (/^[ \t\x0B\f\xA0\uFEFF\n\r\u2028\u2029]/.test(input.charAt(pos.offset))) {              result1 = input.charAt(pos.offset);              advance(pos, 1);            } else {              result1 = null;              if (reportFailures === 0) {                matchFailed("[ \\t\\x0B\\f\\xA0\\uFEFF\\n\\r\\u2028\\u2029]");              }            }          }        } else {          result0 = null;        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_comments() {        var cacheKey = "comments@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3;        var pos0;                pos0 = clone(pos);        if (/^["]/.test(input.charAt(pos.offset))) {          result1 = input.charAt(pos.offset);          advance(pos, 1);        } else {          result1 = null;          if (reportFailures === 0) {            matchFailed("[\"]");          }        }        if (result1 !== null) {          result2 = [];          if (/^[^"]/.test(input.charAt(pos.offset))) {            result3 = input.charAt(pos.offset);            advance(pos, 1);          } else {            result3 = null;            if (reportFailures === 0) {              matchFailed("[^\"]");            }          }          while (result3 !== null) {            result2.push(result3);            if (/^[^"]/.test(input.charAt(pos.offset))) {              result3 = input.charAt(pos.offset);              advance(pos, 1);            } else {              result3 = null;              if (reportFailures === 0) {                matchFailed("[^\"]");              }            }          }          if (result2 !== null) {            if (/^["]/.test(input.charAt(pos.offset))) {              result3 = input.charAt(pos.offset);              advance(pos, 1);            } else {              result3 = null;              if (reportFailures === 0) {                matchFailed("[\"]");              }            }            if (result3 !== null) {              result1 = [result1, result2, result3];            } else {              result1 = null;              pos = clone(pos0);            }          } else {            result1 = null;            pos = clone(pos0);          }        } else {          result1 = null;          pos = clone(pos0);        }        if (result1 !== null) {          result0 = [];          while (result1 !== null) {            result0.push(result1);            pos0 = clone(pos);            if (/^["]/.test(input.charAt(pos.offset))) {              result1 = input.charAt(pos.offset);              advance(pos, 1);            } else {              result1 = null;              if (reportFailures === 0) {                matchFailed("[\"]");              }            }            if (result1 !== null) {              result2 = [];              if (/^[^"]/.test(input.charAt(pos.offset))) {                result3 = input.charAt(pos.offset);                advance(pos, 1);              } else {                result3 = null;                if (reportFailures === 0) {                  matchFailed("[^\"]");                }              }              while (result3 !== null) {                result2.push(result3);                if (/^[^"]/.test(input.charAt(pos.offset))) {                  result3 = input.charAt(pos.offset);                  advance(pos, 1);                } else {                  result3 = null;                  if (reportFailures === 0) {                    matchFailed("[^\"]");                  }                }              }              if (result2 !== null) {                if (/^["]/.test(input.charAt(pos.offset))) {                  result3 = input.charAt(pos.offset);                  advance(pos, 1);                } else {                  result3 = null;                  if (reportFailures === 0) {                    matchFailed("[\"]");                  }                }                if (result3 !== null) {                  result1 = [result1, result2, result3];                } else {                  result1 = null;                  pos = clone(pos0);                }              } else {                result1 = null;                pos = clone(pos0);              }            } else {              result1 = null;              pos = clone(pos0);            }          }        } else {          result0 = null;        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_ws() {        var cacheKey = "ws@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1;                result0 = [];        result1 = parse_separator();        if (result1 === null) {          result1 = parse_comments();        }        while (result1 !== null) {          result0.push(result1);          result1 = parse_separator();          if (result1 === null) {            result1 = parse_comments();          }        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_identifier() {        var cacheKey = "identifier@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        if (/^[a-zA-Z]/.test(input.charAt(pos.offset))) {          result0 = input.charAt(pos.offset);          advance(pos, 1);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("[a-zA-Z]");          }        }        if (result0 !== null) {          result1 = [];          if (/^[a-zA-Z0-9]/.test(input.charAt(pos.offset))) {            result2 = input.charAt(pos.offset);            advance(pos, 1);          } else {            result2 = null;            if (reportFailures === 0) {              matchFailed("[a-zA-Z0-9]");            }          }          while (result2 !== null) {            result1.push(result2);            if (/^[a-zA-Z0-9]/.test(input.charAt(pos.offset))) {              result2 = input.charAt(pos.offset);              advance(pos, 1);            } else {              result2 = null;              if (reportFailures === 0) {                matchFailed("[a-zA-Z0-9]");              }            }          }          if (result1 !== null) {            result0 = [result0, result1];          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, first, others) {return first + others.join("")})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_varIdentifier() {        var cacheKey = "varIdentifier@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        if (/^[a-z]/.test(input.charAt(pos.offset))) {          result0 = input.charAt(pos.offset);          advance(pos, 1);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("[a-z]");          }        }        if (result0 !== null) {          result1 = [];          if (/^[a-zA-Z0-9]/.test(input.charAt(pos.offset))) {            result2 = input.charAt(pos.offset);            advance(pos, 1);          } else {            result2 = null;            if (reportFailures === 0) {              matchFailed("[a-zA-Z0-9]");            }          }          while (result2 !== null) {            result1.push(result2);            if (/^[a-zA-Z0-9]/.test(input.charAt(pos.offset))) {              result2 = input.charAt(pos.offset);              advance(pos, 1);            } else {              result2 = null;              if (reportFailures === 0) {                matchFailed("[a-zA-Z0-9]");              }            }          }          if (result1 !== null) {            result0 = [result0, result1];          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, first, others) {return first + others.join("")})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_keyword() {        var cacheKey = "keyword@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_identifier();        if (result0 !== null) {          if (/^[:]/.test(input.charAt(pos.offset))) {            result1 = input.charAt(pos.offset);            advance(pos, 1);          } else {            result1 = null;            if (reportFailures === 0) {              matchFailed("[:]");            }          }          if (result1 !== null) {            result0 = [result0, result1];          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, first, last) {return first + last})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_className() {        var cacheKey = "className@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        if (/^[A-Z]/.test(input.charAt(pos.offset))) {          result0 = input.charAt(pos.offset);          advance(pos, 1);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("[A-Z]");          }        }        if (result0 !== null) {          result1 = [];          if (/^[a-zA-Z0-9]/.test(input.charAt(pos.offset))) {            result2 = input.charAt(pos.offset);            advance(pos, 1);          } else {            result2 = null;            if (reportFailures === 0) {              matchFailed("[a-zA-Z0-9]");            }          }          while (result2 !== null) {            result1.push(result2);            if (/^[a-zA-Z0-9]/.test(input.charAt(pos.offset))) {              result2 = input.charAt(pos.offset);              advance(pos, 1);            } else {              result2 = null;              if (reportFailures === 0) {                matchFailed("[a-zA-Z0-9]");              }            }          }          if (result1 !== null) {            result0 = [result0, result1];          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, first, others) {return first + others.join("")})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_string() {        var cacheKey = "string@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2;        var pos0, pos1, pos2;                pos0 = clone(pos);        pos1 = clone(pos);        if (/^[']/.test(input.charAt(pos.offset))) {          result0 = input.charAt(pos.offset);          advance(pos, 1);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("[']");          }        }        if (result0 !== null) {          result1 = [];          pos2 = clone(pos);          if (input.substr(pos.offset, 2) === "''") {            result2 = "''";            advance(pos, 2);          } else {            result2 = null;            if (reportFailures === 0) {              matchFailed("\"''\"");            }          }          if (result2 !== null) {            result2 = (function(offset, line, column) {return "'"})(pos2.offset, pos2.line, pos2.column);          }          if (result2 === null) {            pos = clone(pos2);          }          if (result2 === null) {            if (/^[^']/.test(input.charAt(pos.offset))) {              result2 = input.charAt(pos.offset);              advance(pos, 1);            } else {              result2 = null;              if (reportFailures === 0) {                matchFailed("[^']");              }            }          }          while (result2 !== null) {            result1.push(result2);            pos2 = clone(pos);            if (input.substr(pos.offset, 2) === "''") {              result2 = "''";              advance(pos, 2);            } else {              result2 = null;              if (reportFailures === 0) {                matchFailed("\"''\"");              }            }            if (result2 !== null) {              result2 = (function(offset, line, column) {return "'"})(pos2.offset, pos2.line, pos2.column);            }            if (result2 === null) {              pos = clone(pos2);            }            if (result2 === null) {              if (/^[^']/.test(input.charAt(pos.offset))) {                result2 = input.charAt(pos.offset);                advance(pos, 1);              } else {                result2 = null;                if (reportFailures === 0) {                  matchFailed("[^']");                }              }            }          }          if (result1 !== null) {            if (/^[']/.test(input.charAt(pos.offset))) {              result2 = input.charAt(pos.offset);              advance(pos, 1);            } else {              result2 = null;              if (reportFailures === 0) {                matchFailed("[']");              }            }            if (result2 !== null) {              result0 = [result0, result1, result2];            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, val) {                             return smalltalk.ValueNode._new()                                    ._value_(val.join("").replace(/\"/ig, '"'))                         })(pos0.offset, pos0.line, pos0.column, result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_symbol() {        var cacheKey = "symbol@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3;        var pos0, pos1, pos2;                pos0 = clone(pos);        pos1 = clone(pos);        if (input.charCodeAt(pos.offset) === 35) {          result0 = "#";          advance(pos, 1);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("\"#\"");          }        }        if (result0 !== null) {          result1 = [];          pos2 = clone(pos);          if (/^[a-zA-Z0-9:]/.test(input.charAt(pos.offset))) {            result3 = input.charAt(pos.offset);            advance(pos, 1);          } else {            result3 = null;            if (reportFailures === 0) {              matchFailed("[a-zA-Z0-9:]");            }          }          if (result3 !== null) {            result2 = [];            while (result3 !== null) {              result2.push(result3);              if (/^[a-zA-Z0-9:]/.test(input.charAt(pos.offset))) {                result3 = input.charAt(pos.offset);                advance(pos, 1);              } else {                result3 = null;                if (reportFailures === 0) {                  matchFailed("[a-zA-Z0-9:]");                }              }            }          } else {            result2 = null;          }          if (result2 !== null) {            result2 = (function(offset, line, column, digits) {return digits.join("")})(pos2.offset, pos2.line, pos2.column, result2);          }          if (result2 === null) {            pos = clone(pos2);          }          if (result2 === null) {            pos2 = clone(pos);            result2 = parse_string();            if (result2 !== null) {              result2 = (function(offset, line, column, node) {return node._value()})(pos2.offset, pos2.line, pos2.column, result2);            }            if (result2 === null) {              pos = clone(pos2);            }          }          while (result2 !== null) {            result1.push(result2);            pos2 = clone(pos);            if (/^[a-zA-Z0-9:]/.test(input.charAt(pos.offset))) {              result3 = input.charAt(pos.offset);              advance(pos, 1);            } else {              result3 = null;              if (reportFailures === 0) {                matchFailed("[a-zA-Z0-9:]");              }            }            if (result3 !== null) {              result2 = [];              while (result3 !== null) {                result2.push(result3);                if (/^[a-zA-Z0-9:]/.test(input.charAt(pos.offset))) {                  result3 = input.charAt(pos.offset);                  advance(pos, 1);                } else {                  result3 = null;                  if (reportFailures === 0) {                    matchFailed("[a-zA-Z0-9:]");                  }                }              }            } else {              result2 = null;            }            if (result2 !== null) {              result2 = (function(offset, line, column, digits) {return digits.join("")})(pos2.offset, pos2.line, pos2.column, result2);            }            if (result2 === null) {              pos = clone(pos2);            }            if (result2 === null) {              pos2 = clone(pos);              result2 = parse_string();              if (result2 !== null) {                result2 = (function(offset, line, column, node) {return node._value()})(pos2.offset, pos2.line, pos2.column, result2);              }              if (result2 === null) {                pos = clone(pos2);              }            }          }          if (result1 !== null) {            result0 = [result0, result1];          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, val) {                              return smalltalk.ValueNode._new()                                     ._value_(smalltalk.symbolFor(val.join("").replace(/\"/ig, '"')))                          })(pos0.offset, pos0.line, pos0.column, result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_number() {        var cacheKey = "number@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0;        var pos0;                pos0 = clone(pos);        result0 = parse_hex();        if (result0 === null) {          result0 = parse_float();          if (result0 === null) {            result0 = parse_integer();          }        }        if (result0 !== null) {          result0 = (function(offset, line, column, n) {                             return smalltalk.ValueNode._new()                                    ._value_(n)                         })(pos0.offset, pos0.line, pos0.column, result0);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_hex() {        var cacheKey = "hex@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        if (/^[\-]/.test(input.charAt(pos.offset))) {          result0 = input.charAt(pos.offset);          advance(pos, 1);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("[\\-]");          }        }        result0 = result0 !== null ? result0 : "";        if (result0 !== null) {          if (input.substr(pos.offset, 3) === "16r") {            result1 = "16r";            advance(pos, 3);          } else {            result1 = null;            if (reportFailures === 0) {              matchFailed("\"16r\"");            }          }          if (result1 !== null) {            if (/^[0-9a-fA-F]/.test(input.charAt(pos.offset))) {              result3 = input.charAt(pos.offset);              advance(pos, 1);            } else {              result3 = null;              if (reportFailures === 0) {                matchFailed("[0-9a-fA-F]");              }            }            if (result3 !== null) {              result2 = [];              while (result3 !== null) {                result2.push(result3);                if (/^[0-9a-fA-F]/.test(input.charAt(pos.offset))) {                  result3 = input.charAt(pos.offset);                  advance(pos, 1);                } else {                  result3 = null;                  if (reportFailures === 0) {                    matchFailed("[0-9a-fA-F]");                  }                }              }            } else {              result2 = null;            }            if (result2 !== null) {              result0 = [result0, result1, result2];            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, neg, num) {return parseInt((neg + num.join("")), 16)})(pos0.offset, pos0.line, pos0.column, result0[0], result0[2]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_float() {        var cacheKey = "float@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3, result4;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        if (/^[\-]/.test(input.charAt(pos.offset))) {          result0 = input.charAt(pos.offset);          advance(pos, 1);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("[\\-]");          }        }        result0 = result0 !== null ? result0 : "";        if (result0 !== null) {          if (/^[0-9]/.test(input.charAt(pos.offset))) {            result2 = input.charAt(pos.offset);            advance(pos, 1);          } else {            result2 = null;            if (reportFailures === 0) {              matchFailed("[0-9]");            }          }          if (result2 !== null) {            result1 = [];            while (result2 !== null) {              result1.push(result2);              if (/^[0-9]/.test(input.charAt(pos.offset))) {                result2 = input.charAt(pos.offset);                advance(pos, 1);              } else {                result2 = null;                if (reportFailures === 0) {                  matchFailed("[0-9]");                }              }            }          } else {            result1 = null;          }          if (result1 !== null) {            if (input.charCodeAt(pos.offset) === 46) {              result2 = ".";              advance(pos, 1);            } else {              result2 = null;              if (reportFailures === 0) {                matchFailed("\".\"");              }            }            if (result2 !== null) {              if (/^[0-9]/.test(input.charAt(pos.offset))) {                result4 = input.charAt(pos.offset);                advance(pos, 1);              } else {                result4 = null;                if (reportFailures === 0) {                  matchFailed("[0-9]");                }              }              if (result4 !== null) {                result3 = [];                while (result4 !== null) {                  result3.push(result4);                  if (/^[0-9]/.test(input.charAt(pos.offset))) {                    result4 = input.charAt(pos.offset);                    advance(pos, 1);                  } else {                    result4 = null;                    if (reportFailures === 0) {                      matchFailed("[0-9]");                    }                  }                }              } else {                result3 = null;              }              if (result3 !== null) {                result0 = [result0, result1, result2, result3];              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, neg, int, dec) {return parseFloat((neg + int.join("") + "." + dec.join("")), 10)})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1], result0[3]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_integer() {        var cacheKey = "integer@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        if (/^[\-]/.test(input.charAt(pos.offset))) {          result0 = input.charAt(pos.offset);          advance(pos, 1);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("[\\-]");          }        }        result0 = result0 !== null ? result0 : "";        if (result0 !== null) {          if (/^[0-9]/.test(input.charAt(pos.offset))) {            result2 = input.charAt(pos.offset);            advance(pos, 1);          } else {            result2 = null;            if (reportFailures === 0) {              matchFailed("[0-9]");            }          }          if (result2 !== null) {            result1 = [];            while (result2 !== null) {              result1.push(result2);              if (/^[0-9]/.test(input.charAt(pos.offset))) {                result2 = input.charAt(pos.offset);                advance(pos, 1);              } else {                result2 = null;                if (reportFailures === 0) {                  matchFailed("[0-9]");                }              }            }          } else {            result1 = null;          }          if (result1 !== null) {            result0 = [result0, result1];          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, neg, digits) {return (parseInt(neg+digits.join(""), 10))})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_literalArray() {        var cacheKey = "literalArray@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3, result4;        var pos0, pos1, pos2, pos3;                pos0 = clone(pos);        pos1 = clone(pos);        if (input.substr(pos.offset, 2) === "#(") {          result0 = "#(";          advance(pos, 2);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("\"#(\"");          }        }        if (result0 !== null) {          result1 = parse_ws();          if (result1 !== null) {            result2 = [];            pos2 = clone(pos);            pos3 = clone(pos);            result3 = parse_literal();            if (result3 !== null) {              result4 = parse_ws();              if (result4 !== null) {                result3 = [result3, result4];              } else {                result3 = null;                pos = clone(pos3);              }            } else {              result3 = null;              pos = clone(pos3);            }            if (result3 !== null) {              result3 = (function(offset, line, column, lit) {return lit._value()})(pos2.offset, pos2.line, pos2.column, result3[0]);            }            if (result3 === null) {              pos = clone(pos2);            }            while (result3 !== null) {              result2.push(result3);              pos2 = clone(pos);              pos3 = clone(pos);              result3 = parse_literal();              if (result3 !== null) {                result4 = parse_ws();                if (result4 !== null) {                  result3 = [result3, result4];                } else {                  result3 = null;                  pos = clone(pos3);                }              } else {                result3 = null;                pos = clone(pos3);              }              if (result3 !== null) {                result3 = (function(offset, line, column, lit) {return lit._value()})(pos2.offset, pos2.line, pos2.column, result3[0]);              }              if (result3 === null) {                pos = clone(pos2);              }            }            if (result2 !== null) {              result3 = parse_ws();              if (result3 !== null) {                if (input.charCodeAt(pos.offset) === 41) {                  result4 = ")";                  advance(pos, 1);                } else {                  result4 = null;                  if (reportFailures === 0) {                    matchFailed("\")\"");                  }                }                if (result4 !== null) {                  result0 = [result0, result1, result2, result3, result4];                } else {                  result0 = null;                  pos = clone(pos1);                }              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, lits) {                             return smalltalk.ValueNode._new()                                    ._value_(lits)                         })(pos0.offset, pos0.line, pos0.column, result0[2]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_dynamicArray() {        var cacheKey = "dynamicArray@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3, result4, result5;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        if (input.charCodeAt(pos.offset) === 123) {          result0 = "{";          advance(pos, 1);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("\"{\"");          }        }        if (result0 !== null) {          result1 = parse_ws();          if (result1 !== null) {            result2 = parse_expressions();            result2 = result2 !== null ? result2 : "";            if (result2 !== null) {              result3 = parse_ws();              if (result3 !== null) {                if (input.charCodeAt(pos.offset) === 46) {                  result4 = ".";                  advance(pos, 1);                } else {                  result4 = null;                  if (reportFailures === 0) {                    matchFailed("\".\"");                  }                }                result4 = result4 !== null ? result4 : "";                if (result4 !== null) {                  if (input.charCodeAt(pos.offset) === 125) {                    result5 = "}";                    advance(pos, 1);                  } else {                    result5 = null;                    if (reportFailures === 0) {                      matchFailed("\"}\"");                    }                  }                  if (result5 !== null) {                    result0 = [result0, result1, result2, result3, result4, result5];                  } else {                    result0 = null;                    pos = clone(pos1);                  }                } else {                  result0 = null;                  pos = clone(pos1);                }              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, expressions) {                             return smalltalk.DynamicArrayNode._new()                                    ._nodes_(expressions)                         })(pos0.offset, pos0.line, pos0.column, result0[2]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_dynamicDictionary() {        var cacheKey = "dynamicDictionary@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3, result4;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        if (input.substr(pos.offset, 2) === "#{") {          result0 = "#{";          advance(pos, 2);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("\"#{\"");          }        }        if (result0 !== null) {          result1 = parse_ws();          if (result1 !== null) {            result2 = parse_expressions();            result2 = result2 !== null ? result2 : "";            if (result2 !== null) {              result3 = parse_ws();              if (result3 !== null) {                if (input.charCodeAt(pos.offset) === 125) {                  result4 = "}";                  advance(pos, 1);                } else {                  result4 = null;                  if (reportFailures === 0) {                    matchFailed("\"}\"");                  }                }                if (result4 !== null) {                  result0 = [result0, result1, result2, result3, result4];                } else {                  result0 = null;                  pos = clone(pos1);                }              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, expressions) {                                return smalltalk.DynamicDictionaryNode._new()                                       ._nodes_(expressions)                            })(pos0.offset, pos0.line, pos0.column, result0[2]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_pseudoVariable() {        var cacheKey = "pseudoVariable@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        if (input.substr(pos.offset, 4) === "true") {          result0 = "true";          advance(pos, 4);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("\"true\"");          }        }        if (result0 !== null) {          result0 = (function(offset, line, column) {return true})(pos1.offset, pos1.line, pos1.column);        }        if (result0 === null) {          pos = clone(pos1);        }        if (result0 === null) {          pos1 = clone(pos);          if (input.substr(pos.offset, 5) === "false") {            result0 = "false";            advance(pos, 5);          } else {            result0 = null;            if (reportFailures === 0) {              matchFailed("\"false\"");            }          }          if (result0 !== null) {            result0 = (function(offset, line, column) {return false})(pos1.offset, pos1.line, pos1.column);          }          if (result0 === null) {            pos = clone(pos1);          }          if (result0 === null) {            pos1 = clone(pos);            if (input.substr(pos.offset, 3) === "nil") {              result0 = "nil";              advance(pos, 3);            } else {              result0 = null;              if (reportFailures === 0) {                matchFailed("\"nil\"");              }            }            if (result0 !== null) {              result0 = (function(offset, line, column) {return nil})(pos1.offset, pos1.line, pos1.column);            }            if (result0 === null) {              pos = clone(pos1);            }          }        }        if (result0 !== null) {          result0 = (function(offset, line, column, val) {                               return smalltalk.ValueNode._new()                                      ._value_(val)                           })(pos0.offset, pos0.line, pos0.column, result0);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_literal() {        var cacheKey = "literal@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0;                result0 = parse_pseudoVariable();        if (result0 === null) {          result0 = parse_number();          if (result0 === null) {            result0 = parse_literalArray();            if (result0 === null) {              result0 = parse_dynamicDictionary();              if (result0 === null) {                result0 = parse_dynamicArray();                if (result0 === null) {                  result0 = parse_string();                  if (result0 === null) {                    result0 = parse_symbol();                    if (result0 === null) {                      result0 = parse_block();                    }                  }                }              }            }          }        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_variable() {        var cacheKey = "variable@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0;        var pos0;                pos0 = clone(pos);        result0 = parse_varIdentifier();        if (result0 !== null) {          result0 = (function(offset, line, column, identifier) {                             return smalltalk.VariableNode._new()                                    ._value_(identifier)                         })(pos0.offset, pos0.line, pos0.column, result0);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_classReference() {        var cacheKey = "classReference@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0;        var pos0;                pos0 = clone(pos);        result0 = parse_className();        if (result0 !== null) {          result0 = (function(offset, line, column, className) {                             return smalltalk.ClassReferenceNode._new()                                    ._value_(className)                         })(pos0.offset, pos0.line, pos0.column, result0);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_reference() {        var cacheKey = "reference@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0;                result0 = parse_variable();        if (result0 === null) {          result0 = parse_classReference();        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_keywordPair() {        var cacheKey = "keywordPair@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_keyword();        if (result0 !== null) {          result1 = parse_ws();          if (result1 !== null) {            result2 = parse_binarySend();            if (result2 !== null) {              result3 = parse_ws();              if (result3 !== null) {                result0 = [result0, result1, result2, result3];              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, key, arg) {return {key:key, arg: arg}})(pos0.offset, pos0.line, pos0.column, result0[0], result0[2]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_binarySelector() {        var cacheKey = "binarySelector@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1;        var pos0;                pos0 = clone(pos);        if (/^[\\+*\/=><,@%~|&\-]/.test(input.charAt(pos.offset))) {          result1 = input.charAt(pos.offset);          advance(pos, 1);        } else {          result1 = null;          if (reportFailures === 0) {            matchFailed("[\\\\+*\\/=><,@%~|&\\-]");          }        }        if (result1 !== null) {          result0 = [];          while (result1 !== null) {            result0.push(result1);            if (/^[\\+*\/=><,@%~|&\-]/.test(input.charAt(pos.offset))) {              result1 = input.charAt(pos.offset);              advance(pos, 1);            } else {              result1 = null;              if (reportFailures === 0) {                matchFailed("[\\\\+*\\/=><,@%~|&\\-]");              }            }          }        } else {          result0 = null;        }        if (result0 !== null) {          result0 = (function(offset, line, column, bin) {return bin.join("").replace(/\\/g, '\\\\')})(pos0.offset, pos0.line, pos0.column, result0);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_keywordPattern() {        var cacheKey = "keywordPattern@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3, result4;        var pos0, pos1, pos2;                pos0 = clone(pos);        pos1 = clone(pos);        pos2 = clone(pos);        result1 = parse_ws();        if (result1 !== null) {          result2 = parse_keyword();          if (result2 !== null) {            result3 = parse_ws();            if (result3 !== null) {              result4 = parse_identifier();              if (result4 !== null) {                result1 = [result1, result2, result3, result4];              } else {                result1 = null;                pos = clone(pos2);              }            } else {              result1 = null;              pos = clone(pos2);            }          } else {            result1 = null;            pos = clone(pos2);          }        } else {          result1 = null;          pos = clone(pos2);        }        if (result1 !== null) {          result1 = (function(offset, line, column, key, arg) {return {key:key, arg: arg}})(pos1.offset, pos1.line, pos1.column, result1[1], result1[3]);        }        if (result1 === null) {          pos = clone(pos1);        }        if (result1 !== null) {          result0 = [];          while (result1 !== null) {            result0.push(result1);            pos1 = clone(pos);            pos2 = clone(pos);            result1 = parse_ws();            if (result1 !== null) {              result2 = parse_keyword();              if (result2 !== null) {                result3 = parse_ws();                if (result3 !== null) {                  result4 = parse_identifier();                  if (result4 !== null) {                    result1 = [result1, result2, result3, result4];                  } else {                    result1 = null;                    pos = clone(pos2);                  }                } else {                  result1 = null;                  pos = clone(pos2);                }              } else {                result1 = null;                pos = clone(pos2);              }            } else {              result1 = null;              pos = clone(pos2);            }            if (result1 !== null) {              result1 = (function(offset, line, column, key, arg) {return {key:key, arg: arg}})(pos1.offset, pos1.line, pos1.column, result1[1], result1[3]);            }            if (result1 === null) {              pos = clone(pos1);            }          }        } else {          result0 = null;        }        if (result0 !== null) {          result0 = (function(offset, line, column, pairs) {                             var keywords = [];                             var params = [];                             for(var i=0;i<pairs.length;i++){                                 keywords.push(pairs[i].key);                             }                             for(var i=0;i<pairs.length;i++){                                 params.push(pairs[i].arg);                             }                             return [keywords.join(""), params]                         })(pos0.offset, pos0.line, pos0.column, result0);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_binaryPattern() {        var cacheKey = "binaryPattern@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_ws();        if (result0 !== null) {          result1 = parse_binarySelector();          if (result1 !== null) {            result2 = parse_ws();            if (result2 !== null) {              result3 = parse_identifier();              if (result3 !== null) {                result0 = [result0, result1, result2, result3];              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, selector, arg) {return [selector, [arg]]})(pos0.offset, pos0.line, pos0.column, result0[1], result0[3]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_unaryPattern() {        var cacheKey = "unaryPattern@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_ws();        if (result0 !== null) {          result1 = parse_identifier();          if (result1 !== null) {            result0 = [result0, result1];          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, selector) {return [selector, []]})(pos0.offset, pos0.line, pos0.column, result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_expression() {        var cacheKey = "expression@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0;                result0 = parse_assignment();        if (result0 === null) {          result0 = parse_cascade();          if (result0 === null) {            result0 = parse_keywordSend();            if (result0 === null) {              result0 = parse_binarySend();              if (result0 === null) {                result0 = parse_jsStatement();              }            }          }        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_expressionList() {        var cacheKey = "expressionList@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_ws();        if (result0 !== null) {          if (input.charCodeAt(pos.offset) === 46) {            result1 = ".";            advance(pos, 1);          } else {            result1 = null;            if (reportFailures === 0) {              matchFailed("\".\"");            }          }          if (result1 !== null) {            result2 = parse_ws();            if (result2 !== null) {              result3 = parse_expression();              if (result3 !== null) {                result0 = [result0, result1, result2, result3];              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, expression) {return expression})(pos0.offset, pos0.line, pos0.column, result0[3]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_expressions() {        var cacheKey = "expressions@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_expression();        if (result0 !== null) {          result1 = [];          result2 = parse_expressionList();          while (result2 !== null) {            result1.push(result2);            result2 = parse_expressionList();          }          if (result1 !== null) {            result0 = [result0, result1];          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, first, others) {                             var result = [first];                             for(var i=0;i<others.length;i++) {                                 result.push(others[i]);                             }                             return result;                         })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_assignment() {        var cacheKey = "assignment@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3, result4;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_variable();        if (result0 !== null) {          result1 = parse_ws();          if (result1 !== null) {            if (input.substr(pos.offset, 2) === ":=") {              result2 = ":=";              advance(pos, 2);            } else {              result2 = null;              if (reportFailures === 0) {                matchFailed("\":=\"");              }            }            if (result2 !== null) {              result3 = parse_ws();              if (result3 !== null) {                result4 = parse_expression();                if (result4 !== null) {                  result0 = [result0, result1, result2, result3, result4];                } else {                  result0 = null;                  pos = clone(pos1);                }              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, variable, expression) {                             return smalltalk.AssignmentNode._new()                                    ._left_(variable)                                    ._right_(expression)                         })(pos0.offset, pos0.line, pos0.column, result0[0], result0[4]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_ret() {        var cacheKey = "ret@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3, result4;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        if (input.charCodeAt(pos.offset) === 94) {          result0 = "^";          advance(pos, 1);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("\"^\"");          }        }        if (result0 !== null) {          result1 = parse_ws();          if (result1 !== null) {            result2 = parse_expression();            if (result2 !== null) {              result3 = parse_ws();              if (result3 !== null) {                if (input.charCodeAt(pos.offset) === 46) {                  result4 = ".";                  advance(pos, 1);                } else {                  result4 = null;                  if (reportFailures === 0) {                    matchFailed("\".\"");                  }                }                result4 = result4 !== null ? result4 : "";                if (result4 !== null) {                  result0 = [result0, result1, result2, result3, result4];                } else {                  result0 = null;                  pos = clone(pos1);                }              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, expression) {                             return smalltalk.ReturnNode._new()                                    ._nodes_([expression])                         })(pos0.offset, pos0.line, pos0.column, result0[2]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_temps() {        var cacheKey = "temps@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3, result4;        var pos0, pos1, pos2, pos3;                pos0 = clone(pos);        pos1 = clone(pos);        if (input.charCodeAt(pos.offset) === 124) {          result0 = "|";          advance(pos, 1);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("\"|\"");          }        }        if (result0 !== null) {          result1 = [];          pos2 = clone(pos);          pos3 = clone(pos);          result2 = parse_ws();          if (result2 !== null) {            result3 = parse_identifier();            if (result3 !== null) {              result4 = parse_ws();              if (result4 !== null) {                result2 = [result2, result3, result4];              } else {                result2 = null;                pos = clone(pos3);              }            } else {              result2 = null;              pos = clone(pos3);            }          } else {            result2 = null;            pos = clone(pos3);          }          if (result2 !== null) {            result2 = (function(offset, line, column, variable) {return variable})(pos2.offset, pos2.line, pos2.column, result2[1]);          }          if (result2 === null) {            pos = clone(pos2);          }          while (result2 !== null) {            result1.push(result2);            pos2 = clone(pos);            pos3 = clone(pos);            result2 = parse_ws();            if (result2 !== null) {              result3 = parse_identifier();              if (result3 !== null) {                result4 = parse_ws();                if (result4 !== null) {                  result2 = [result2, result3, result4];                } else {                  result2 = null;                  pos = clone(pos3);                }              } else {                result2 = null;                pos = clone(pos3);              }            } else {              result2 = null;              pos = clone(pos3);            }            if (result2 !== null) {              result2 = (function(offset, line, column, variable) {return variable})(pos2.offset, pos2.line, pos2.column, result2[1]);            }            if (result2 === null) {              pos = clone(pos2);            }          }          if (result1 !== null) {            if (input.charCodeAt(pos.offset) === 124) {              result2 = "|";              advance(pos, 1);            } else {              result2 = null;              if (reportFailures === 0) {                matchFailed("\"|\"");              }            }            if (result2 !== null) {              result0 = [result0, result1, result2];            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, vars) {return vars})(pos0.offset, pos0.line, pos0.column, result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_blockParamList() {        var cacheKey = "blockParamList@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3, result4;        var pos0, pos1, pos2, pos3;                pos0 = clone(pos);        pos1 = clone(pos);        pos2 = clone(pos);        pos3 = clone(pos);        result1 = parse_ws();        if (result1 !== null) {          if (input.charCodeAt(pos.offset) === 58) {            result2 = ":";            advance(pos, 1);          } else {            result2 = null;            if (reportFailures === 0) {              matchFailed("\":\"");            }          }          if (result2 !== null) {            result3 = parse_ws();            if (result3 !== null) {              result4 = parse_identifier();              if (result4 !== null) {                result1 = [result1, result2, result3, result4];              } else {                result1 = null;                pos = clone(pos3);              }            } else {              result1 = null;              pos = clone(pos3);            }          } else {            result1 = null;            pos = clone(pos3);          }        } else {          result1 = null;          pos = clone(pos3);        }        if (result1 !== null) {          result1 = (function(offset, line, column, param) {return param})(pos2.offset, pos2.line, pos2.column, result1[3]);        }        if (result1 === null) {          pos = clone(pos2);        }        if (result1 !== null) {          result0 = [];          while (result1 !== null) {            result0.push(result1);            pos2 = clone(pos);            pos3 = clone(pos);            result1 = parse_ws();            if (result1 !== null) {              if (input.charCodeAt(pos.offset) === 58) {                result2 = ":";                advance(pos, 1);              } else {                result2 = null;                if (reportFailures === 0) {                  matchFailed("\":\"");                }              }              if (result2 !== null) {                result3 = parse_ws();                if (result3 !== null) {                  result4 = parse_identifier();                  if (result4 !== null) {                    result1 = [result1, result2, result3, result4];                  } else {                    result1 = null;                    pos = clone(pos3);                  }                } else {                  result1 = null;                  pos = clone(pos3);                }              } else {                result1 = null;                pos = clone(pos3);              }            } else {              result1 = null;              pos = clone(pos3);            }            if (result1 !== null) {              result1 = (function(offset, line, column, param) {return param})(pos2.offset, pos2.line, pos2.column, result1[3]);            }            if (result1 === null) {              pos = clone(pos2);            }          }        } else {          result0 = null;        }        if (result0 !== null) {          result1 = parse_ws();          if (result1 !== null) {            if (input.charCodeAt(pos.offset) === 124) {              result2 = "|";              advance(pos, 1);            } else {              result2 = null;              if (reportFailures === 0) {                matchFailed("\"|\"");              }            }            if (result2 !== null) {              result0 = [result0, result1, result2];            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, params) {return params})(pos0.offset, pos0.line, pos0.column, result0[0]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_subexpression() {        var cacheKey = "subexpression@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3, result4;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        if (input.charCodeAt(pos.offset) === 40) {          result0 = "(";          advance(pos, 1);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("\"(\"");          }        }        if (result0 !== null) {          result1 = parse_ws();          if (result1 !== null) {            result2 = parse_expression();            if (result2 !== null) {              result3 = parse_ws();              if (result3 !== null) {                if (input.charCodeAt(pos.offset) === 41) {                  result4 = ")";                  advance(pos, 1);                } else {                  result4 = null;                  if (reportFailures === 0) {                    matchFailed("\")\"");                  }                }                if (result4 !== null) {                  result0 = [result0, result1, result2, result3, result4];                } else {                  result0 = null;                  pos = clone(pos1);                }              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, expression) {return expression})(pos0.offset, pos0.line, pos0.column, result0[2]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_statements() {        var cacheKey = "statements@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3, result4, result5, result6;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_ret();        if (result0 !== null) {          result1 = [];          if (/^[.]/.test(input.charAt(pos.offset))) {            result2 = input.charAt(pos.offset);            advance(pos, 1);          } else {            result2 = null;            if (reportFailures === 0) {              matchFailed("[.]");            }          }          while (result2 !== null) {            result1.push(result2);            if (/^[.]/.test(input.charAt(pos.offset))) {              result2 = input.charAt(pos.offset);              advance(pos, 1);            } else {              result2 = null;              if (reportFailures === 0) {                matchFailed("[.]");              }            }          }          if (result1 !== null) {            result0 = [result0, result1];          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, ret) {return [ret]})(pos0.offset, pos0.line, pos0.column, result0[0]);        }        if (result0 === null) {          pos = clone(pos0);        }        if (result0 === null) {          pos0 = clone(pos);          pos1 = clone(pos);          result0 = parse_expressions();          if (result0 !== null) {            result1 = parse_ws();            if (result1 !== null) {              if (/^[.]/.test(input.charAt(pos.offset))) {                result3 = input.charAt(pos.offset);                advance(pos, 1);              } else {                result3 = null;                if (reportFailures === 0) {                  matchFailed("[.]");                }              }              if (result3 !== null) {                result2 = [];                while (result3 !== null) {                  result2.push(result3);                  if (/^[.]/.test(input.charAt(pos.offset))) {                    result3 = input.charAt(pos.offset);                    advance(pos, 1);                  } else {                    result3 = null;                    if (reportFailures === 0) {                      matchFailed("[.]");                    }                  }                }              } else {                result2 = null;              }              if (result2 !== null) {                result3 = parse_ws();                if (result3 !== null) {                  result4 = parse_ret();                  if (result4 !== null) {                    result5 = [];                    if (/^[.]/.test(input.charAt(pos.offset))) {                      result6 = input.charAt(pos.offset);                      advance(pos, 1);                    } else {                      result6 = null;                      if (reportFailures === 0) {                        matchFailed("[.]");                      }                    }                    while (result6 !== null) {                      result5.push(result6);                      if (/^[.]/.test(input.charAt(pos.offset))) {                        result6 = input.charAt(pos.offset);                        advance(pos, 1);                      } else {                        result6 = null;                        if (reportFailures === 0) {                          matchFailed("[.]");                        }                      }                    }                    if (result5 !== null) {                      result0 = [result0, result1, result2, result3, result4, result5];                    } else {                      result0 = null;                      pos = clone(pos1);                    }                  } else {                    result0 = null;                    pos = clone(pos1);                  }                } else {                  result0 = null;                  pos = clone(pos1);                }              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }          if (result0 !== null) {            result0 = (function(offset, line, column, exps, ret) {                                 var expressions = exps;                                 expressions.push(ret);                                 return expressions                             })(pos0.offset, pos0.line, pos0.column, result0[0], result0[4]);          }          if (result0 === null) {            pos = clone(pos0);          }          if (result0 === null) {            pos0 = clone(pos);            pos1 = clone(pos);            result0 = parse_expressions();            result0 = result0 !== null ? result0 : "";            if (result0 !== null) {              result1 = [];              if (/^[.]/.test(input.charAt(pos.offset))) {                result2 = input.charAt(pos.offset);                advance(pos, 1);              } else {                result2 = null;                if (reportFailures === 0) {                  matchFailed("[.]");                }              }              while (result2 !== null) {                result1.push(result2);                if (/^[.]/.test(input.charAt(pos.offset))) {                  result2 = input.charAt(pos.offset);                  advance(pos, 1);                } else {                  result2 = null;                  if (reportFailures === 0) {                    matchFailed("[.]");                  }                }              }              if (result1 !== null) {                result0 = [result0, result1];              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }            if (result0 !== null) {              result0 = (function(offset, line, column, expressions) {                                   return expressions || []                               })(pos0.offset, pos0.line, pos0.column, result0[0]);            }            if (result0 === null) {              pos = clone(pos0);            }          }        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_sequence() {        var cacheKey = "sequence@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_temps();        result0 = result0 !== null ? result0 : "";        if (result0 !== null) {          result1 = parse_ws();          if (result1 !== null) {            result2 = parse_statements();            result2 = result2 !== null ? result2 : "";            if (result2 !== null) {              result3 = parse_ws();              if (result3 !== null) {                result0 = [result0, result1, result2, result3];              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, temps, statements) {                             return smalltalk.SequenceNode._new()                                    ._temps_(temps || [])                                    ._nodes_(statements || [])                         })(pos0.offset, pos0.line, pos0.column, result0[0], result0[2]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_block() {        var cacheKey = "block@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3, result4, result5, result6;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        if (input.charCodeAt(pos.offset) === 91) {          result0 = "[";          advance(pos, 1);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("\"[\"");          }        }        if (result0 !== null) {          result1 = parse_ws();          if (result1 !== null) {            result2 = parse_blockParamList();            result2 = result2 !== null ? result2 : "";            if (result2 !== null) {              result3 = parse_ws();              if (result3 !== null) {                result4 = parse_sequence();                result4 = result4 !== null ? result4 : "";                if (result4 !== null) {                  result5 = parse_ws();                  if (result5 !== null) {                    if (input.charCodeAt(pos.offset) === 93) {                      result6 = "]";                      advance(pos, 1);                    } else {                      result6 = null;                      if (reportFailures === 0) {                        matchFailed("\"]\"");                      }                    }                    if (result6 !== null) {                      result0 = [result0, result1, result2, result3, result4, result5, result6];                    } else {                      result0 = null;                      pos = clone(pos1);                    }                  } else {                    result0 = null;                    pos = clone(pos1);                  }                } else {                  result0 = null;                  pos = clone(pos1);                }              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, params, sequence) {                             return smalltalk.BlockNode._new()                                    ._parameters_(params || [])                                    ._nodes_([sequence._asBlockSequenceNode()])                         })(pos0.offset, pos0.line, pos0.column, result0[2], result0[4]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_operand() {        var cacheKey = "operand@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0;                result0 = parse_literal();        if (result0 === null) {          result0 = parse_reference();          if (result0 === null) {            result0 = parse_subexpression();          }        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_unaryMessage() {        var cacheKey = "unaryMessage@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2;        var pos0, pos1, pos2;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_ws();        if (result0 !== null) {          result1 = parse_identifier();          if (result1 !== null) {            pos2 = clone(pos);            reportFailures++;            if (/^[:]/.test(input.charAt(pos.offset))) {              result2 = input.charAt(pos.offset);              advance(pos, 1);            } else {              result2 = null;              if (reportFailures === 0) {                matchFailed("[:]");              }            }            reportFailures--;            if (result2 === null) {              result2 = "";            } else {              result2 = null;              pos = clone(pos2);            }            if (result2 !== null) {              result0 = [result0, result1, result2];            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, selector) {                             return smalltalk.SendNode._new()                                    ._selector_(selector)                         })(pos0.offset, pos0.line, pos0.column, result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_unaryTail() {        var cacheKey = "unaryTail@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_unaryMessage();        if (result0 !== null) {          result1 = parse_ws();          if (result1 !== null) {            result2 = parse_unaryTail();            result2 = result2 !== null ? result2 : "";            if (result2 !== null) {              result3 = parse_ws();              if (result3 !== null) {                result0 = [result0, result1, result2, result3];              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, message, tail) {                             if(tail) {                                 return tail._valueForReceiver_(message);                             }                             else {                                 return message;                             }                         })(pos0.offset, pos0.line, pos0.column, result0[0], result0[2]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_unarySend() {        var cacheKey = "unarySend@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_operand();        if (result0 !== null) {          result1 = parse_ws();          if (result1 !== null) {            result2 = parse_unaryTail();            result2 = result2 !== null ? result2 : "";            if (result2 !== null) {              result0 = [result0, result1, result2];            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, receiver, tail) {                             if(tail) {                                 return tail._valueForReceiver_(receiver);                             }                             else {                                 return receiver;                             }                         })(pos0.offset, pos0.line, pos0.column, result0[0], result0[2]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_binaryMessage() {        var cacheKey = "binaryMessage@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_ws();        if (result0 !== null) {          result1 = parse_binarySelector();          if (result1 !== null) {            result2 = parse_ws();            if (result2 !== null) {              result3 = parse_unarySend();              if (result3 === null) {                result3 = parse_operand();              }              if (result3 !== null) {                result0 = [result0, result1, result2, result3];              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, selector, arg) {                             return smalltalk.SendNode._new()                                    ._selector_(selector)                                    ._arguments_([arg])                         })(pos0.offset, pos0.line, pos0.column, result0[1], result0[3]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_binaryTail() {        var cacheKey = "binaryTail@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_binaryMessage();        if (result0 !== null) {          result1 = parse_binaryTail();          result1 = result1 !== null ? result1 : "";          if (result1 !== null) {            result0 = [result0, result1];          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, message, tail) {                             if(tail) {                                 return tail._valueForReceiver_(message);                              }                             else {                                 return message;                             }                         })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_binarySend() {        var cacheKey = "binarySend@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_unarySend();        if (result0 !== null) {          result1 = parse_binaryTail();          result1 = result1 !== null ? result1 : "";          if (result1 !== null) {            result0 = [result0, result1];          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, receiver, tail) {                             if(tail) {                                 return tail._valueForReceiver_(receiver);                             }                             else {                                 return receiver;                             }                         })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_keywordMessage() {        var cacheKey = "keywordMessage@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3;        var pos0, pos1, pos2, pos3;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_ws();        if (result0 !== null) {          pos2 = clone(pos);          pos3 = clone(pos);          result2 = parse_keywordPair();          if (result2 !== null) {            result3 = parse_ws();            if (result3 !== null) {              result2 = [result2, result3];            } else {              result2 = null;              pos = clone(pos3);            }          } else {            result2 = null;            pos = clone(pos3);          }          if (result2 !== null) {            result2 = (function(offset, line, column, pair) {return pair})(pos2.offset, pos2.line, pos2.column, result2[0]);          }          if (result2 === null) {            pos = clone(pos2);          }          if (result2 !== null) {            result1 = [];            while (result2 !== null) {              result1.push(result2);              pos2 = clone(pos);              pos3 = clone(pos);              result2 = parse_keywordPair();              if (result2 !== null) {                result3 = parse_ws();                if (result3 !== null) {                  result2 = [result2, result3];                } else {                  result2 = null;                  pos = clone(pos3);                }              } else {                result2 = null;                pos = clone(pos3);              }              if (result2 !== null) {                result2 = (function(offset, line, column, pair) {return pair})(pos2.offset, pos2.line, pos2.column, result2[0]);              }              if (result2 === null) {                pos = clone(pos2);              }            }          } else {            result1 = null;          }          if (result1 !== null) {            result0 = [result0, result1];          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, pairs) {                             var selector = [];                             var args = [];                              for(var i=0;i<pairs.length;i++) {                                  selector.push(pairs[i].key);                                  args.push(pairs[i].arg);                              }                              return smalltalk.SendNode._new()                                     ._selector_(selector.join(""))                                     ._arguments_(args)                         })(pos0.offset, pos0.line, pos0.column, result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_keywordSend() {        var cacheKey = "keywordSend@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_binarySend();        if (result0 !== null) {          result1 = parse_keywordMessage();          if (result1 !== null) {            result0 = [result0, result1];          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, receiver, tail) {                             return tail._valueForReceiver_(receiver);                         })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_message() {        var cacheKey = "message@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0;                result0 = parse_binaryMessage();        if (result0 === null) {          result0 = parse_unaryMessage();          if (result0 === null) {            result0 = parse_keywordMessage();          }        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_cascade() {        var cacheKey = "cascade@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3, result4, result5, result6, result7;        var pos0, pos1, pos2, pos3;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_ws();        if (result0 !== null) {          result1 = parse_keywordSend();          if (result1 === null) {            result1 = parse_binarySend();          }          if (result1 !== null) {            pos2 = clone(pos);            pos3 = clone(pos);            result3 = parse_ws();            if (result3 !== null) {              if (input.charCodeAt(pos.offset) === 59) {                result4 = ";";                advance(pos, 1);              } else {                result4 = null;                if (reportFailures === 0) {                  matchFailed("\";\"");                }              }              if (result4 !== null) {                result5 = parse_ws();                if (result5 !== null) {                  result6 = parse_message();                  if (result6 !== null) {                    result7 = parse_ws();                    if (result7 !== null) {                      result3 = [result3, result4, result5, result6, result7];                    } else {                      result3 = null;                      pos = clone(pos3);                    }                  } else {                    result3 = null;                    pos = clone(pos3);                  }                } else {                  result3 = null;                  pos = clone(pos3);                }              } else {                result3 = null;                pos = clone(pos3);              }            } else {              result3 = null;              pos = clone(pos3);            }            if (result3 !== null) {              result3 = (function(offset, line, column, mess) {return mess})(pos2.offset, pos2.line, pos2.column, result3[3]);            }            if (result3 === null) {              pos = clone(pos2);            }            if (result3 !== null) {              result2 = [];              while (result3 !== null) {                result2.push(result3);                pos2 = clone(pos);                pos3 = clone(pos);                result3 = parse_ws();                if (result3 !== null) {                  if (input.charCodeAt(pos.offset) === 59) {                    result4 = ";";                    advance(pos, 1);                  } else {                    result4 = null;                    if (reportFailures === 0) {                      matchFailed("\";\"");                    }                  }                  if (result4 !== null) {                    result5 = parse_ws();                    if (result5 !== null) {                      result6 = parse_message();                      if (result6 !== null) {                        result7 = parse_ws();                        if (result7 !== null) {                          result3 = [result3, result4, result5, result6, result7];                        } else {                          result3 = null;                          pos = clone(pos3);                        }                      } else {                        result3 = null;                        pos = clone(pos3);                      }                    } else {                      result3 = null;                      pos = clone(pos3);                    }                  } else {                    result3 = null;                    pos = clone(pos3);                  }                } else {                  result3 = null;                  pos = clone(pos3);                }                if (result3 !== null) {                  result3 = (function(offset, line, column, mess) {return mess})(pos2.offset, pos2.line, pos2.column, result3[3]);                }                if (result3 === null) {                  pos = clone(pos2);                }              }            } else {              result2 = null;            }            if (result2 !== null) {              result0 = [result0, result1, result2];            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, send, messages) {                             var cascade = [];                             cascade.push(send);                             for(var i=0;i<messages.length;i++) {                                 cascade.push(messages[i]);                             }                             return smalltalk.CascadeNode._new()                                    ._receiver_(send._receiver())                                    ._nodes_(cascade)                         })(pos0.offset, pos0.line, pos0.column, result0[1], result0[2]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_jsStatement() {        var cacheKey = "jsStatement@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2;        var pos0, pos1, pos2;                pos0 = clone(pos);        pos1 = clone(pos);        if (input.charCodeAt(pos.offset) === 60) {          result0 = "<";          advance(pos, 1);        } else {          result0 = null;          if (reportFailures === 0) {            matchFailed("\"<\"");          }        }        if (result0 !== null) {          result1 = [];          pos2 = clone(pos);          if (input.substr(pos.offset, 2) === ">>") {            result2 = ">>";            advance(pos, 2);          } else {            result2 = null;            if (reportFailures === 0) {              matchFailed("\">>\"");            }          }          if (result2 !== null) {            result2 = (function(offset, line, column) {return ">"})(pos2.offset, pos2.line, pos2.column);          }          if (result2 === null) {            pos = clone(pos2);          }          if (result2 === null) {            if (/^[^>]/.test(input.charAt(pos.offset))) {              result2 = input.charAt(pos.offset);              advance(pos, 1);            } else {              result2 = null;              if (reportFailures === 0) {                matchFailed("[^>]");              }            }          }          while (result2 !== null) {            result1.push(result2);            pos2 = clone(pos);            if (input.substr(pos.offset, 2) === ">>") {              result2 = ">>";              advance(pos, 2);            } else {              result2 = null;              if (reportFailures === 0) {                matchFailed("\">>\"");              }            }            if (result2 !== null) {              result2 = (function(offset, line, column) {return ">"})(pos2.offset, pos2.line, pos2.column);            }            if (result2 === null) {              pos = clone(pos2);            }            if (result2 === null) {              if (/^[^>]/.test(input.charAt(pos.offset))) {                result2 = input.charAt(pos.offset);                advance(pos, 1);              } else {                result2 = null;                if (reportFailures === 0) {                  matchFailed("[^>]");                }              }            }          }          if (result1 !== null) {            if (input.charCodeAt(pos.offset) === 62) {              result2 = ">";              advance(pos, 1);            } else {              result2 = null;              if (reportFailures === 0) {                matchFailed("\">\"");              }            }            if (result2 !== null) {              result0 = [result0, result1, result2];            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, val) {                             return smalltalk.JSStatementNode._new()                                    ._source_(val.join(""))                         })(pos0.offset, pos0.line, pos0.column, result0[1]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }            function parse_method() {        var cacheKey = "method@" + pos.offset;        var cachedResult = cache[cacheKey];        if (cachedResult) {          pos = clone(cachedResult.nextPos);          return cachedResult.result;        }                var result0, result1, result2, result3, result4;        var pos0, pos1;                pos0 = clone(pos);        pos1 = clone(pos);        result0 = parse_ws();        if (result0 !== null) {          result1 = parse_keywordPattern();          if (result1 === null) {            result1 = parse_binaryPattern();            if (result1 === null) {              result1 = parse_unaryPattern();            }          }          if (result1 !== null) {            result2 = parse_ws();            if (result2 !== null) {              result3 = parse_sequence();              result3 = result3 !== null ? result3 : "";              if (result3 !== null) {                result4 = parse_ws();                if (result4 !== null) {                  result0 = [result0, result1, result2, result3, result4];                } else {                  result0 = null;                  pos = clone(pos1);                }              } else {                result0 = null;                pos = clone(pos1);              }            } else {              result0 = null;              pos = clone(pos1);            }          } else {            result0 = null;            pos = clone(pos1);          }        } else {          result0 = null;          pos = clone(pos1);        }        if (result0 !== null) {          result0 = (function(offset, line, column, pattern, sequence) {                              return smalltalk.MethodNode._new()                                     ._selector_(pattern[0])                                     ._arguments_(pattern[1])                                     ._nodes_([sequence])                         })(pos0.offset, pos0.line, pos0.column, result0[1], result0[3]);        }        if (result0 === null) {          pos = clone(pos0);        }                cache[cacheKey] = {          nextPos: clone(pos),          result:  result0        };        return result0;      }                  function cleanupExpected(expected) {        expected.sort();                var lastExpected = null;        var cleanExpected = [];        for (var i = 0; i < expected.length; i++) {          if (expected[i] !== lastExpected) {            cleanExpected.push(expected[i]);            lastExpected = expected[i];          }        }        return cleanExpected;      }                        var result = parseFunctions[startRule]();            /*       * The parser is now in one of the following three states:       *       * 1. The parser successfully parsed the whole input.       *       *    - |result !== null|       *    - |pos.offset === input.length|       *    - |rightmostFailuresExpected| may or may not contain something       *       * 2. The parser successfully parsed only a part of the input.       *       *    - |result !== null|       *    - |pos.offset < input.length|       *    - |rightmostFailuresExpected| may or may not contain something       *       * 3. The parser did not successfully parse any part of the input.       *       *   - |result === null|       *   - |pos.offset === 0|       *   - |rightmostFailuresExpected| contains at least one failure       *       * All code following this comment (including called functions) must       * handle these states.       */      if (result === null || pos.offset !== input.length) {        var offset = Math.max(pos.offset, rightmostFailuresPos.offset);        var found = offset < input.length ? input.charAt(offset) : null;        var errorPosition = pos.offset > rightmostFailuresPos.offset ? pos : rightmostFailuresPos;                throw new this.SyntaxError(          cleanupExpected(rightmostFailuresExpected),          found,          offset,          errorPosition.line,          errorPosition.column        );      }            return result;    },        /* Returns the parser source code. */    toSource: function() { return this._source; }  };    /* Thrown when a parser encounters a syntax error. */    result.SyntaxError = function(expected, found, offset, line, column) {    function buildMessage(expected, found) {      var expectedHumanized, foundHumanized;            switch (expected.length) {        case 0:          expectedHumanized = "end of input";          break;        case 1:          expectedHumanized = expected[0];          break;        default:          expectedHumanized = expected.slice(0, expected.length - 1).join(", ")            + " or "            + expected[expected.length - 1];      }            foundHumanized = found ? quote(found) : "end of input";            return "Expected " + expectedHumanized + " but " + foundHumanized + " found.";    }        this.name = "SyntaxError";    this.expected = expected;    this.found = found;    this.message = buildMessage(expected, found);    this.offset = offset;    this.line = line;    this.column = column;  };    result.SyntaxError.prototype = Error.prototype;    return result;})();
 |