15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// This file is automatically generated by scheme2js, except for the 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// benchmark harness code at the beginning and end of the file. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/************* GENERATED FILE - DO NOT EDIT *************/ 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/************* GENERATED FILE - DO NOT EDIT *************/ 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/************* GENERATED FILE - DO NOT EDIT *************/ 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/************* GENERATED FILE - DO NOT EDIT *************/ 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/************* GENERATED FILE - DO NOT EDIT *************/ 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/************* GENERATED FILE - DO NOT EDIT *************/ 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/************* GENERATED FILE - DO NOT EDIT *************/ 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/************* GENERATED FILE - DO NOT EDIT *************/ 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * To use write/prints/... the default-output port has to be set first. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Simply setting SC_DEFAULT_OUT and SC_ERROR_OUT to the desired values 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * should do the trick. 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * In the following example the std-out and error-port are redirected to 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * a DIV. 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function initRuntime() { 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function escapeHTML(s) { 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = s; 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tmp = tmp.replace(/&/g, "&"); 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tmp = tmp.replace(/</g, "<"); 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tmp = tmp.replace(/>/g, ">"); 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tmp = tmp.replace(/ /g, " "); 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tmp = tmp.replace(/\n/g, "<br />"); 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tmp = tmp.replace(/\t/g, "  "); 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return tmp; 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) document.write("<div id='stdout'></div>"); 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SC_DEFAULT_OUT = new sc_GenericOutputPort( 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function(s) { 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var stdout = document.getElementById('stdout'); 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stdout.innerHTML = stdout.innerHTML + escapeHTML(s); 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }); 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SC_ERROR_OUT = SC_DEFAULT_OUT; 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_print_debug() { 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_print.apply(null, arguments); 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export *js*)) */ 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_JS_GLOBALS = this; 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var __sc_LINE=-1; 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var __sc_FILE=""; 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_alert() { 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var len = arguments.length; 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var s = ""; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var i; 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for( i = 0; i < len; i++ ) { 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) s += sc_toDisplayString(arguments[ i ]); 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return alert( s ); 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_typeof( x ) { 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return typeof x; 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_error() { 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var a = [sc_jsstring2symbol("*error*")]; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < arguments.length; i++) { 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a[i+1] = arguments[i]; 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw a; 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (prefix "throw "))) 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_raise(obj) { 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw obj; 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export with-handler-lambda)) */ 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_withHandlerLambda(handler, body) { 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) try { 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return body(); 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } catch(e) { 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!e._internalException) 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return handler(e); 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw e; 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_properties = new Object(); 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_putpropBang(sym, key, val) { 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ht = sc_properties[sym]; 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!ht) { 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ht = new Object(); 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_properties[sym] = ht; 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ht[key] = val; 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_getprop(sym, key) { 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ht = sc_properties[sym]; 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (ht) { 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (key in ht) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ht[key]; 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_rempropBang(sym, key) { 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ht = sc_properties[sym]; 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (ht) 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete ht[key]; 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_any2String(o) { 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return jsstring2string(sc_toDisplayString(o)); 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 2 2 "===")) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isEqv(o1, o2) { 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (o1 === o2); 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 2 2 "===")) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isEq(o1, o2) { 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (o1 === o2); 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isNumber(n) { 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (typeof n === "number"); 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isComplex(n) { 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_isNumber(n); 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isReal(n) { 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_isNumber(n); 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isRational(n) { 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_isReal(n); 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isInteger(n) { 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (parseInt(n) === n); 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ", false"))) 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// we don't have exact numbers... 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isExact(n) { 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ", true")) 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isInexact(n) { 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export = =fx =fl) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 2 2 "==="))) 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_equal(x) { 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 1; i < arguments.length; i++) 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (x !== arguments[i]) 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export < <fx <fl) 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 2 2 "<"))) 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_less(x) { 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 1; i < arguments.length; i++) { 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (x >= arguments[i]) 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) x = arguments[i]; 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export > >fx >fl) 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 2 2 ">"))) 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_greater(x, y) { 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 1; i < arguments.length; i++) { 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (x <= arguments[i]) 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) x = arguments[i]; 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export <= <=fx <=fl) 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 2 2 "<="))) 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_lessEqual(x, y) { 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 1; i < arguments.length; i++) { 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (x > arguments[i]) 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) x = arguments[i]; 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export >= >=fl >=fx) 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 2 2 ">="))) 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_greaterEqual(x, y) { 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 1; i < arguments.length; i++) { 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (x < arguments[i]) 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) x = arguments[i]; 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix "=== 0"))) 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isZero(x) { 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (x === 0); 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix "> 0"))) 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isPositive(x) { 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (x > 0); 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix "< 0"))) 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isNegative(x) { 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (x < 0); 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix "%2===1"))) 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isOdd(x) { 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (x % 2 === 1); 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix "%2===0"))) 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isEven(x) { 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (x % 2 === 0); 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_max = Math.max; 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_min = Math.min; 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export + +fx +fl) 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 0 #f "+" "0"))) 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_plus() { 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sum = 0; 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < arguments.length; i++) 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sum += arguments[i]; 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sum; 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export * *fx *fl) 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 0 #f "*" "1"))) 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_multi() { 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var product = 1; 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < arguments.length; i++) 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) product *= arguments[i]; 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return product; 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export - -fx -fl) 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (minus))) 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_minus(x) { 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (arguments.length === 1) 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return -x; 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else { 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = x; 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 1; i < arguments.length; i++) 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res -= arguments[i]; 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export / /fl) 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (div))) 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_div(x) { 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (arguments.length === 1) 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 1/x; 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else { 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = x; 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 1; i < arguments.length; i++) 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res /= arguments[i]; 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_abs = Math.abs; 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export quotient /fx) 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 "parseInt(" x "/" y ")"))) 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_quotient(x, y) { 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return parseInt(x / y); 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 2 2 "%"))) 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_remainder(x, y) { 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return x % y; 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (modulo))) 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_modulo(x, y) { 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var remainder = x % y; 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // if they don't have the same sign 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((remainder * y) < 0) 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return remainder + y; 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return remainder; 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_euclid_gcd(a, b) { 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var temp; 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (a === 0) return b; 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (b === 0) return a; 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (a < 0) {a = -a;}; 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (b < 0) {b = -b;}; 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (b > a) {temp = a; a = b; b = temp;}; 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a %= b; 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if(a === 0) {return b;}; 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) b %= a; 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if(b === 0) {return a;}; 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return b; 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_gcd() { 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var gcd = 0; 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < arguments.length; i++) 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) gcd = sc_euclid_gcd(gcd, arguments[i]); 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return gcd; 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_lcm() { 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var lcm = 1; 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < arguments.length; i++) { 4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var f = Math.round(arguments[i] / sc_euclid_gcd(arguments[i], lcm)); 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) lcm *= Math.abs(f); 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return lcm; 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// LIMITATION: numerator and denominator don't make sense in floating point world. 4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//var SC_MAX_DECIMALS = 1000000 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// function sc_numerator(x) { 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// var rounded = Math.round(x * SC_MAX_DECIMALS); 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// return Math.round(rounded / sc_euclid_gcd(rounded, SC_MAX_DECIMALS)); 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// } 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// function sc_denominator(x) { 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// var rounded = Math.round(x * SC_MAX_DECIMALS); 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// return Math.round(SC_MAX_DECIMALS / sc_euclid_gcd(rounded, SC_MAX_DECIMALS)); 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// } 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_floor = Math.floor; 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_ceiling = Math.ceil; 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_truncate = parseInt; 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_round = Math.round; 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// LIMITATION: sc_rationalize doesn't make sense in a floating point world. 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_exp = Math.exp; 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_log = Math.log; 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_sin = Math.sin; 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_cos = Math.cos; 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_tan = Math.tan; 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_asin = Math.asin; 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_acos = Math.acos; 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_atan = Math.atan; 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_sqrt = Math.sqrt; 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_expt = Math.pow; 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// LIMITATION: we don't have complex numbers. 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// LIMITATION: the following functions are hence not implemented. 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// LIMITATION: make-rectangular, make-polar, real-part, imag-part, magnitude, angle 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// LIMITATION: 2 argument atan 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (id))) 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_exact2inexact(x) { 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return x; 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (id))) 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_inexact2exact(x) { 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return x; 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_number2jsstring(x, radix) { 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (radix) 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return x.toString(radix); 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return x.toString(); 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_jsstring2number(s, radix) { 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (s === "") return false; 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (radix) { 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var t = parseInt(s, radix); 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!t && t !== 0) return false; 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // verify that each char is in range. (parseInt ignores leading 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // white and trailing chars) 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var allowedChars = "01234567890abcdefghijklmnopqrstuvwxyz".substring(0, radix+1); 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((new RegExp("^["+allowedChars+"]*$", "i")).test(s)) 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return t; 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else return false; 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var t = +s; // does not ignore trailing chars. 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!t && t !== 0) return false; 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // simply verify that first char is not whitespace. 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var c = s.charAt(0); 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // if +c is 0, but the char is not "0", then we have a whitespace. 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (+c === 0 && c !== "0") return false; 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return t; 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (not))) 5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_not(b) { 5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return b === false; 5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isBoolean(b) { 5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (b === true) || (b === false); 5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_Pair(car, cdr) { 5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.car = car; 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.cdr = cdr; 5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Pair.prototype.toString = function() { 5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_toDisplayString(this); 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Pair.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) { 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var current = this; 5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = "("; 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while(true) { 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += writeOrDisplay(current.car); 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (sc_isPair(current.cdr)) { 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += " "; 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) current = current.cdr; 5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (current.cdr !== null) { 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += " . " + writeOrDisplay(current.cdr); 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else // current.cdr == null 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += ")"; 5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Pair.prototype.sc_toDisplayString = function() { 5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.sc_toWriteOrDisplayString(sc_toDisplayString); 5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Pair.prototype.sc_toWriteString = function() { 5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.sc_toWriteOrDisplayString(sc_toWriteString); 5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// sc_Pair.prototype.sc_toWriteCircleString in IO.js 5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix " instanceof sc_Pair"))) 5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isPair(p) { 5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (p instanceof sc_Pair); 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isPairEqual(p1, p2, comp) { 5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (comp(p1.car, p2.car) && comp(p1.cdr, p2.cdr)); 5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 "new sc_Pair(" car ", " cdr ")"))) 5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cons(car, cdr) { 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Pair(car, cdr); 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export cons*)) */ 5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_consStar() { 5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = arguments[arguments.length - 1]; 5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = arguments.length-2; i >= 0; i--) 5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = new sc_Pair(arguments[i], res); 5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".car"))) 5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_car(p) { 5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return p.car; 5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".cdr"))) 6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cdr(p) { 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return p.cdr; 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 p ".car = " val))) 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_setCarBang(p, val) { 6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.car = val; 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 p ".cdr = " val))) 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_setCdrBang(p, val) { 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.cdr = val; 6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".car.car"))) 6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_caar(p) { return p.car.car; } 6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".cdr.car"))) 6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cadr(p) { return p.cdr.car; } 6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".car.cdr"))) 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cdar(p) { return p.car.cdr; } 6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".cdr.cdr"))) 6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cddr(p) { return p.cdr.cdr; } 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".car.car.car"))) 6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_caaar(p) { return p.car.car.car; } 6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".car.cdr.car"))) 6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cadar(p) { return p.car.cdr.car; } 6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".cdr.car.car"))) 6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_caadr(p) { return p.cdr.car.car; } 6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".cdr.cdr.car"))) 6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_caddr(p) { return p.cdr.cdr.car; } 6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".car.car.cdr"))) 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cdaar(p) { return p.car.car.cdr; } 6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".cdr.car.cdr"))) 6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cdadr(p) { return p.cdr.car.cdr; } 6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".car.cdr.cdr"))) 6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cddar(p) { return p.car.cdr.cdr; } 6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".cdr.cdr.cdr"))) 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cdddr(p) { return p.cdr.cdr.cdr; } 6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".car.car.car.car"))) 6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_caaaar(p) { return p.car.car.car.car; } 6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".car.cdr.car.car"))) 6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_caadar(p) { return p.car.cdr.car.car; } 6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".cdr.car.car.car"))) 6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_caaadr(p) { return p.cdr.car.car.car; } 6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".cdr.cdr.car.car"))) 6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_caaddr(p) { return p.cdr.cdr.car.car; } 6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".car.car.car.cdr"))) 6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cdaaar(p) { return p.car.car.car.cdr; } 6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".car.cdr.car.cdr"))) 6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cdadar(p) { return p.car.cdr.car.cdr; } 6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".cdr.car.car.cdr"))) 6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cdaadr(p) { return p.cdr.car.car.cdr; } 6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".cdr.cdr.car.cdr"))) 7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cdaddr(p) { return p.cdr.cdr.car.cdr; } 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".car.car.cdr.car"))) 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cadaar(p) { return p.car.car.cdr.car; } 7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".car.cdr.cdr.car"))) 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_caddar(p) { return p.car.cdr.cdr.car; } 7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".cdr.car.cdr.car"))) 7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cadadr(p) { return p.cdr.car.cdr.car; } 7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".cdr.cdr.cdr.car"))) 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cadddr(p) { return p.cdr.cdr.cdr.car; } 7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".car.car.cdr.cdr"))) 7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cddaar(p) { return p.car.car.cdr.cdr; } 7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".car.cdr.cdr.cdr"))) 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cdddar(p) { return p.car.cdr.cdr.cdr; } 7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".cdr.car.cdr.cdr"))) 7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cddadr(p) { return p.cdr.car.cdr.cdr; } 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".cdr.cdr.cdr.cdr"))) 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_cddddr(p) { return p.cdr.cdr.cdr.cdr; } 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_lastPair(l) { 7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!sc_isPair(l)) sc_error("sc_lastPair: pair expected"); 7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = l; 7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var cdr = l.cdr; 7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (sc_isPair(cdr)) { 7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = cdr; 7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cdr = res.cdr; 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix " === null"))) 7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isNull(o) { 7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (o === null); 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isList(o) { 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rabbit; 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var turtle; 7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rabbit = o; 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var turtle = o; 7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (rabbit === null || 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (rabbit instanceof sc_Pair && rabbit.cdr === null)) 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; // end of list 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if ((rabbit instanceof sc_Pair) && 7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (rabbit.cdr instanceof sc_Pair)) { 7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rabbit = rabbit.cdr.cdr; 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) turtle = turtle.cdr; 7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (rabbit === turtle) return false; // cycle 7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; // not pair 7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_list() { 7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = null; 7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var a = arguments; 7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = a.length-1; i >= 0; i--) 7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = new sc_Pair(a[i], res); 7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_iota(num, init) { 7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = null; 7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!init) init = 0; 7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = num - 1; i >= 0; i--) 7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = new sc_Pair(i + init, res); 7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_makeList(nbEls, fill) { 7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = null; 7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < nbEls; i++) 8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = new sc_Pair(fill, res); 8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_length(l) { 8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = 0; 8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l !== null) { 8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res++; 8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l = l.cdr; 8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_remq(o, l) { 8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var dummy = { cdr : null }; 8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tail = dummy; 8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l !== null) { 8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (l.car !== o) { 8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tail.cdr = sc_cons(l.car, null); 8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tail = tail.cdr; 8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l = l.cdr; 8245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return dummy.cdr; 8265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 8295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_remqBang(o, l) { 8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var dummy = { cdr : null }; 8315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tail = dummy; 8325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var needsAssig = true; 8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l !== null) { 8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (l.car === o) { 8355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) needsAssig = true; 8365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 8375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (needsAssig) { 8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tail.cdr = l; 8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) needsAssig = false; 8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tail = l; 8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l = l.cdr; 8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tail.cdr = null; 8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return dummy.cdr; 8475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_delete(o, l) { 8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var dummy = { cdr : null }; 8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tail = dummy; 8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l !== null) { 8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!sc_isEqual(l.car, o)) { 8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tail.cdr = sc_cons(l.car, null); 8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tail = tail.cdr; 8575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l = l.cdr; 8595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return dummy.cdr; 8615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_deleteBang(o, l) { 8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var dummy = { cdr : null }; 8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tail = dummy; 8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var needsAssig = true; 8685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l !== null) { 8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (sc_isEqual(l.car, o)) { 8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) needsAssig = true; 8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (needsAssig) { 8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tail.cdr = l; 8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) needsAssig = false; 8755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tail = l; 8775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l = l.cdr; 8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tail.cdr = null; 8815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return dummy.cdr; 8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_reverseAppendBang(l1, l2) { 8855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = l2; 8865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l1 !== null) { 8875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = res; 8885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = l1; 8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l1 = l1.cdr; 8905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res.cdr = tmp; 8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_dualAppend(l1, l2) { 8965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (l1 === null) return l2; 8975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (l2 === null) return l1; 8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rev = sc_reverse(l1); 8995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_reverseAppendBang(rev, l2); 9005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_append() { 9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (arguments.length === 0) 9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return null; 9065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = arguments[arguments.length - 1]; 9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = arguments.length - 2; i >= 0; i--) 9085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = sc_dualAppend(arguments[i], res); 9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 9105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_dualAppendBang(l1, l2) { 9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (l1 === null) return l2; 9145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (l2 === null) return l1; 9155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = l1; 9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (tmp.cdr !== null) tmp=tmp.cdr; 9175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tmp.cdr = l2; 9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return l1; 9195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 9225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_appendBang() { 9235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = null; 9245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < arguments.length; i++) 9255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = sc_dualAppendBang(res, arguments[i]); 9265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 9275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_reverse(l1) { 9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = null; 9325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l1 !== null) { 9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = sc_cons(l1.car, res); 9345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l1 = l1.cdr; 9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_reverseBang(l) { 9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_reverseAppendBang(l, null); 9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_listTail(l, k) { 9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = l; 9475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < k; i++) { 9485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = res.cdr; 9495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 9515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 9545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_listRef(l, k) { 9555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_listTail(l, k).car; 9565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* // unoptimized generic versions 9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_memX(o, l, comp) { 9605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l != null) { 9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (comp(l.car, o)) 9625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return l; 9635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l = l.cdr; 9645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 9665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_memq(o, l) { return sc_memX(o, l, sc_isEq); } 9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_memv(o, l) { return sc_memX(o, l, sc_isEqv); } 9695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_member(o, l) { return sc_memX(o, l, sc_isEqual); } 9705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 9715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* optimized versions */ 9735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 9745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_memq(o, l) { 9755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l !== null) { 9765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (l.car === o) 9775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return l; 9785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l = l.cdr; 9795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 9815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 9835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_memv(o, l) { 9845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l !== null) { 9855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (l.car === o) 9865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return l; 9875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l = l.cdr; 9885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 9905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 9925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_member(o, l) { 9935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l !== null) { 9945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (sc_isEqual(l.car,o)) 9955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return l; 9965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l = l.cdr; 9975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 9995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* // generic unoptimized versions 10025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_assX(o, al, comp) { 10035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (al != null) { 10045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (comp(al.car.car, o)) 10055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return al.car; 10065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) al = al.cdr; 10075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 10085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 10095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_assq(o, al) { return sc_assX(o, al, sc_isEq); } 10115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_assv(o, al) { return sc_assX(o, al, sc_isEqv); } 10125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_assoc(o, al) { return sc_assX(o, al, sc_isEqual); } 10135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 10145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// optimized versions 10155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 10165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_assq(o, al) { 10175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (al !== null) { 10185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (al.car.car === o) 10195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return al.car; 10205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) al = al.cdr; 10215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 10225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 10235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 10255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_assv(o, al) { 10265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (al !== null) { 10275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (al.car.car === o) 10285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return al.car; 10295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) al = al.cdr; 10305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 10315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 10325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 10345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_assoc(o, al) { 10355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (al !== null) { 10365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (sc_isEqual(al.car.car, o)) 10375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return al.car; 10385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) al = al.cdr; 10395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 10405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 10415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* can be used for mutable strings and characters */ 10445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharStringEqual(cs1, cs2) { return cs1.val === cs2.val; } 10455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharStringLess(cs1, cs2) { return cs1.val < cs2.val; } 10465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharStringGreater(cs1, cs2) { return cs1.val > cs2.val; } 10475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharStringLessEqual(cs1, cs2) { return cs1.val <= cs2.val; } 10485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharStringGreaterEqual(cs1, cs2) { return cs1.val >= cs2.val; } 10495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharStringCIEqual(cs1, cs2) 10505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { return cs1.val.toLowerCase() === cs2.val.toLowerCase(); } 10515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharStringCILess(cs1, cs2) 10525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { return cs1.val.toLowerCase() < cs2.val.toLowerCase(); } 10535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharStringCIGreater(cs1, cs2) 10545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { return cs1.val.toLowerCase() > cs2.val.toLowerCase(); } 10555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharStringCILessEqual(cs1, cs2) 10565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { return cs1.val.toLowerCase() <= cs2.val.toLowerCase(); } 10575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharStringCIGreaterEqual(cs1, cs2) 10585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { return cs1.val.toLowerCase() >= cs2.val.toLowerCase(); } 10595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_Char(c) { 10645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var cached = sc_Char.lazy[c]; 10655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (cached) 10665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return cached; 10675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.val = c; 10685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_Char.lazy[c] = this; 10695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // add return, so FF does not complain. 10705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return undefined; 10715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Char.lazy = new Object(); 10735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// thanks to Eric 10745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Char.char2readable = { 10755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\000": "#\\null", 10765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\007": "#\\bell", 10775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\010": "#\\backspace", 10785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\011": "#\\tab", 10795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\012": "#\\newline", 10805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\014": "#\\page", 10815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\015": "#\\return", 10825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\033": "#\\escape", 10835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\040": "#\\space", 10845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\177": "#\\delete", 10855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* poeticless names */ 10875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\001": "#\\soh", 10885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\002": "#\\stx", 10895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\003": "#\\etx", 10905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\004": "#\\eot", 10915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\005": "#\\enq", 10925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\006": "#\\ack", 10935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\013": "#\\vt", 10955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\016": "#\\so", 10965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\017": "#\\si", 10975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\020": "#\\dle", 10995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\021": "#\\dc1", 11005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\022": "#\\dc2", 11015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\023": "#\\dc3", 11025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\024": "#\\dc4", 11035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\025": "#\\nak", 11045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\026": "#\\syn", 11055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\027": "#\\etb", 11065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\030": "#\\can", 11085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\031": "#\\em", 11095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\032": "#\\sub", 11105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\033": "#\\esc", 11115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\034": "#\\fs", 11125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\035": "#\\gs", 11135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\036": "#\\rs", 11145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "\037": "#\\us"}; 11155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Char.readable2char = { 11175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "null": "\000", 11185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "bell": "\007", 11195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "backspace": "\010", 11205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "tab": "\011", 11215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "newline": "\012", 11225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "page": "\014", 11235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "return": "\015", 11245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "escape": "\033", 11255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "space": "\040", 11265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "delete": "\000", 11275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "soh": "\001", 11285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "stx": "\002", 11295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "etx": "\003", 11305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "eot": "\004", 11315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "enq": "\005", 11325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "ack": "\006", 11335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "bel": "\007", 11345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "bs": "\010", 11355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "ht": "\011", 11365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "nl": "\012", 11375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "vt": "\013", 11385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "np": "\014", 11395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "cr": "\015", 11405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "so": "\016", 11415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "si": "\017", 11425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "dle": "\020", 11435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "dc1": "\021", 11445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "dc2": "\022", 11455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "dc3": "\023", 11465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "dc4": "\024", 11475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "nak": "\025", 11485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "syn": "\026", 11495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "etb": "\027", 11505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "can": "\030", 11515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "em": "\031", 11525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "sub": "\032", 11535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "esc": "\033", 11545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "fs": "\034", 11555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "gs": "\035", 11565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "rs": "\036", 11575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "us": "\037", 11585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "sp": "\040", 11595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "del": "\177"}; 11605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Char.prototype.toString = function() { 11625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.val; 11635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 11645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// sc_toDisplayString == toString 11655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Char.prototype.sc_toWriteString = function() { 11665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var entry = sc_Char.char2readable[this.val]; 11675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (entry) 11685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return entry; 11695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 11705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "#\\" + this.val; 11715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 11725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 11745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 11755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix "instanceof sc_Char"))) 11765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 11775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isChar(c) { 11785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (c instanceof sc_Char); 11795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export char=?) 11825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 11835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 c1 ".val === " c2 ".val"))) 11845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 11855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_isCharEqual = sc_isCharStringEqual; 11865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export char<?) 11875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 11885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 c1 ".val < " c2 ".val"))) 11895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 11905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_isCharLess = sc_isCharStringLess; 11915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export char>?) 11925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 11935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 c1 ".val > " c2 ".val"))) 11945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 11955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_isCharGreater = sc_isCharStringGreater; 11965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export char<=?) 11975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 11985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 c1 ".val <= " c2 ".val"))) 11995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_isCharLessEqual = sc_isCharStringLessEqual; 12015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export char>=?) 12025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 12035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 c1 ".val >= " c2 ".val"))) 12045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_isCharGreaterEqual = sc_isCharStringGreaterEqual; 12065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export char-ci=?) 12075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 12085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 c1 ".val.toLowerCase() === " c2 ".val.toLowerCase()"))) 12095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_isCharCIEqual = sc_isCharStringCIEqual; 12115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export char-ci<?) 12125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 12135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 c1 ".val.toLowerCase() < " c2 ".val.toLowerCase()"))) 12145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_isCharCILess = sc_isCharStringCILess; 12165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export char-ci>?) 12175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 12185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 c1 ".val.toLowerCase() > " c2 ".val.toLowerCase()"))) 12195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_isCharCIGreater = sc_isCharStringCIGreater; 12215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export char-ci<=?) 12225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 12235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 c1 ".val.toLowerCase() <= " c2 ".val.toLowerCase()"))) 12245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_isCharCILessEqual = sc_isCharStringCILessEqual; 12265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export char-ci>=?) 12275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 12285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 c1 ".val.toLowerCase() >= " c2 ".val.toLowerCase()"))) 12295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_isCharCIGreaterEqual = sc_isCharStringCIGreaterEqual; 12315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var SC_NUMBER_CLASS = "0123456789"; 12335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var SC_WHITESPACE_CLASS = ' \r\n\t\f'; 12345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var SC_LOWER_CLASS = 'abcdefghijklmnopqrstuvwxyz'; 12355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var SC_UPPER_CLASS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 12365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharOfClass(c, cl) { return (cl.indexOf(c) != -1); } 12385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 12395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 12405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharAlphabetic(c) 12425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { return sc_isCharOfClass(c.val, SC_LOWER_CLASS) || 12435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_isCharOfClass(c.val, SC_UPPER_CLASS); } 12445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 12455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 12465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 1 "SC_NUMBER_CLASS.indexOf(" c ".val) != -1"))) 12475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharNumeric(c) 12495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { return sc_isCharOfClass(c.val, SC_NUMBER_CLASS); } 12505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 12515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 12525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharWhitespace(c) { 12545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = c.val; 12555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return tmp === " " || tmp === "\r" || tmp === "\n" || tmp === "\t" || tmp === "\f"; 12565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 12585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 12595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 1 "SC_UPPER_CLASS.indexOf(" c ".val) != -1"))) 12605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharUpperCase(c) 12625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { return sc_isCharOfClass(c.val, SC_UPPER_CLASS); } 12635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 12645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 12655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 1 "SC_LOWER_CLASS.indexOf(" c ".val) != -1"))) 12665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharLowerCase(c) 12685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { return sc_isCharOfClass(c.val, SC_LOWER_CLASS); } 12695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 12715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".val.charCodeAt(0)"))) 12725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_char2integer(c) 12745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { return c.val.charCodeAt(0); } 12755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 12765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 1 "new sc_Char(String.fromCharCode(" n "))"))) 12775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_integer2char(n) 12795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { return new sc_Char(String.fromCharCode(n)); } 12805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 12825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 1 "new sc_Char(" c ".val.toUpperCase())"))) 12835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_charUpcase(c) 12855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { return new sc_Char(c.val.toUpperCase()); } 12865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 12875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 1 "new sc_Char(" c ".val.toLowerCase())"))) 12885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 12895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_charDowncase(c) 12905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { return new sc_Char(c.val.toLowerCase()); } 12915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_makeJSStringOfLength(k, c) { 12935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var fill; 12945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (c === undefined) 12955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fill = " "; 12965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 12975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fill = c; 12985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = ""; 12995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var len = 1; 13005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // every round doubles the size of fill. 13015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (k >= len) { 13025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (k & len) 13035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = res.concat(fill); 13045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fill = fill.concat(fill); 13055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) len *= 2; 13065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 13075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 13085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_makejsString(k, c) { 13115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var fill; 13125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (c) 13135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fill = c.val; 13145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 13155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fill = " "; 13165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_makeJSStringOfLength(k, fill); 13175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_jsstring2list(s) { 13205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = null; 13215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = s.length - 1; i >= 0; i--) 13225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = sc_cons(new sc_Char(s.charAt(i)), res); 13235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 13245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_list2jsstring(l) { 13275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var a = new Array(); 13285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while(l !== null) { 13295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a.push(l.car.val); 13305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l = l.cdr; 13315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 13325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "".concat.apply("", a); 13335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_Vector = Array; 13365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Vector.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) { 13385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.length === 0) return "#()"; 13395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = "#(" + writeOrDisplay(this[0]); 13415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 1; i < this.length; i++) 13425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += " " + writeOrDisplay(this[i]); 13435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += ")"; 13445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 13455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 13465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Vector.prototype.sc_toDisplayString = function() { 13475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.sc_toWriteOrDisplayString(sc_toDisplayString); 13485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 13495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Vector.prototype.sc_toWriteString = function() { 13505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.sc_toWriteOrDisplayString(sc_toWriteString); 13515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 13525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export vector? array?) 13545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 13555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix " instanceof sc_Vector"))) 13565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 13575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isVector(v) { 13585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (v instanceof sc_Vector); 13595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// only applies to vectors 13625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isVectorEqual(v1, v2, comp) { 13635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (v1.length !== v2.length) return false; 13645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < v1.length; i++) 13655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!comp(v1[i], v2[i])) return false; 13665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 13675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export make-vector make-array)) */ 13705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_makeVector(size, fill) { 13715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var a = new sc_Vector(size); 13725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (fill !== undefined) 13735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_vectorFillBang(a, fill); 13745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 13755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export vector array) 13785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (vector))) 13795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 13805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_vector() { 13815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var a = new sc_Vector(); 13825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < arguments.length; i++) 13835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a.push(arguments[i]); 13845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 13855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export vector-length array-length) 13885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".length"))) 13895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 13905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_vectorLength(v) { 13915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return v.length; 13925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export vector-ref array-ref) 13955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 v "[" pos "]"))) 13965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 13975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_vectorRef(v, pos) { 13985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return v[pos]; 13995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export vector-set! array-set!) 14025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 3 v "[" pos "] = " val))) 14035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 14045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_vectorSetBang(v, pos, val) { 14055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) v[pos] = val; 14065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export vector->list array->list)) */ 14095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_vector2list(a) { 14105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = null; 14115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = a.length-1; i >= 0; i--) 14125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = sc_cons(a[i], res); 14135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 14145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export list->vector list->array)) */ 14175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_list2vector(l) { 14185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var a = new sc_Vector(); 14195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while(l !== null) { 14205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a.push(l.car); 14215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l = l.cdr; 14225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 14235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 14245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export vector-fill! array-fill!)) */ 14275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_vectorFillBang(a, fill) { 14285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < a.length; i++) 14295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a[i] = fill; 14305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 14345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_copyVector(a, len) { 14355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (len <= a.length) 14365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.slice(0, len); 14375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else { 14385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = a.concat(); 14395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tmp.length = len; 14405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return tmp; 14415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 14425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 14455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 3 a ".slice(" start "," end ")"))) 14465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 14475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_vectorCopy(a, start, end) { 14485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.slice(start, end); 14495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 14525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_vectorCopyBang(target, tstart, source, sstart, send) { 14535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!sstart) sstart = 0; 14545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!send) send = source.length; 14555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // if target == source we don't want to overwrite not yet copied elements. 14575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (tstart <= sstart) { 14585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = tstart, j = sstart; j < send; i++, j++) { 14595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) target[i] = source[j]; 14605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 14615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 14625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var diff = send - sstart; 14635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = tstart + diff - 1, j = send - 1; 14645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) j >= sstart; 14655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) i--, j--) { 14665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) target[i] = source[j]; 14675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 14685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 14695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return target; 14705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 14735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 14745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 1 "typeof " o " === 'function'"))) 14755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 14765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isProcedure(o) { 14775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (typeof o === "function"); 14785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 14815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_apply(proc) { 14825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var args = new Array(); 14835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // first part of arguments are not in list-form. 14845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 1; i < arguments.length - 1; i++) 14855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) args.push(arguments[i]); 14865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l = arguments[arguments.length - 1]; 14875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l !== null) { 14885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) args.push(l.car); 14895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l = l.cdr; 14905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 14915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return proc.apply(null, args); 14925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 14955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_map(proc, l1) { 14965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (l1 === undefined) 14975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return null; 14985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // else 14995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nbApplyArgs = arguments.length - 1; 15005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var applyArgs = new Array(nbApplyArgs); 15015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var revres = null; 15025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l1 !== null) { 15035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < nbApplyArgs; i++) { 15045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) applyArgs[i] = arguments[i + 1].car; 15055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) arguments[i + 1] = arguments[i + 1].cdr; 15065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) revres = sc_cons(proc.apply(null, applyArgs), revres); 15085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_reverseAppendBang(revres, null); 15105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 15135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_mapBang(proc, l1) { 15145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (l1 === undefined) 15155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return null; 15165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // else 15175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l1_orig = l1; 15185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nbApplyArgs = arguments.length - 1; 15195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var applyArgs = new Array(nbApplyArgs); 15205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l1 !== null) { 15215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = l1; 15225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < nbApplyArgs; i++) { 15235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) applyArgs[i] = arguments[i + 1].car; 15245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) arguments[i + 1] = arguments[i + 1].cdr; 15255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tmp.car = proc.apply(null, applyArgs); 15275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return l1_orig; 15295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 15325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_forEach(proc, l1) { 15335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (l1 === undefined) 15345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return undefined; 15355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // else 15365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nbApplyArgs = arguments.length - 1; 15375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var applyArgs = new Array(nbApplyArgs); 15385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l1 !== null) { 15395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < nbApplyArgs; i++) { 15405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) applyArgs[i] = arguments[i + 1].car; 15415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) arguments[i + 1] = arguments[i + 1].cdr; 15425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) proc.apply(null, applyArgs); 15445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // add return so FF does not complain. 15465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return undefined; 15475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 15505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_filter(proc, l1) { 15515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var dummy = { cdr : null }; 15525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tail = dummy; 15535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l1 !== null) { 15545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (proc(l1.car) !== false) { 15555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tail.cdr = sc_cons(l1.car, null); 15565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tail = tail.cdr; 15575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l1 = l1.cdr; 15595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return dummy.cdr; 15615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 15645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_filterBang(proc, l1) { 15655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var head = sc_cons("dummy", l1); 15665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var it = head; 15675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var next = l1; 15685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (next !== null) { 15695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (proc(next.car) !== false) { 15705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) it.cdr = next 15715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) it = next; 15725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) next = next.cdr; 15745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) it.cdr = null; 15765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return head.cdr; 15775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_filterMap1(proc, l1) { 15805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var revres = null; 15815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l1 !== null) { 15825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = proc(l1.car) 15835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (tmp !== false) revres = sc_cons(tmp, revres); 15845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l1 = l1.cdr; 15855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_reverseAppendBang(revres, null); 15875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_filterMap2(proc, l1, l2) { 15895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var revres = null; 15905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l1 !== null) { 15915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = proc(l1.car, l2.car); 15925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if(tmp !== false) revres = sc_cons(tmp, revres); 15935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l1 = l1.cdr; 15945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l2 = l2.cdr 15955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_reverseAppendBang(revres, null); 15975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 16005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_filterMap(proc, l1, l2, l3) { 16015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (l2 === undefined) 16025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_filterMap1(proc, l1); 16035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (l3 === undefined) 16045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_filterMap2(proc, l1, l2); 16055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // else 16065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nbApplyArgs = arguments.length - 1; 16075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var applyArgs = new Array(nbApplyArgs); 16085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var revres = null; 16095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l1 !== null) { 16105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < nbApplyArgs; i++) { 16115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) applyArgs[i] = arguments[i + 1].car; 16125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) arguments[i + 1] = arguments[i + 1].cdr; 16135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 16145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = proc.apply(null, applyArgs); 16155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if(tmp !== false) revres = sc_cons(tmp, revres); 16165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 16175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_reverseAppendBang(revres, null); 16185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 16215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_any(proc, l) { 16225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var revres = null; 16235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l !== null) { 16245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = proc(l.car); 16255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if(tmp !== false) return tmp; 16265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l = l.cdr; 16275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 16285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 16295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export any?) 16325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 "sc_any(" proc "," l ") !== false"))) 16335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 16345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_anyPred(proc, l) { 16355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_any(proc, l)!== false; 16365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 16395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_every(proc, l) { 16405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var revres = null; 16415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = true; 16425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (l !== null) { 16435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tmp = proc(l.car); 16445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (tmp === false) return false; 16455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) l = l.cdr; 16465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 16475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return tmp; 16485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export every?) 16515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 "sc_every(" proc "," l ") !== false"))) 16525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 16535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_everyPred(proc, l) { 16545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = sc_every(proc, l); 16555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (tmp !== false) return true; 16565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 16575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 16605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix "()"))) 16615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 16625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_force(o) { 16635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return o(); 16645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 16675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_makePromise(proc) { 16685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var isResultReady = false; 16695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var result = undefined; 16705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return function() { 16715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!isResultReady) { 16725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = proc(); 16735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!isResultReady) { 16745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) isResultReady = true; 16755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = tmp; 16765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 16775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 16785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 16795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 16805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_Values(values) { 16835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.values = values; 16845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 16875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (values))) 16885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 16895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_values() { 16905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (arguments.length === 1) 16915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return arguments[0]; 16925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 16935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Values(arguments); 16945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 16975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_callWithValues(producer, consumer) { 16985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var produced = producer(); 16995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (produced instanceof sc_Values) 17005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return consumer.apply(null, produced.values); 17015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 17025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return consumer(produced); 17035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 17065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_dynamicWind(before, thunk, after) { 17075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) before(); 17085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) try { 17095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = thunk(); 17105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 17115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } finally { 17125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) after(); 17135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// TODO: eval/scheme-report-environment/null-environment/interaction-environment 17185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// LIMITATION: 'load' doesn't exist without files. 17205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// LIMITATION: transcript-on/transcript-off doesn't exist without files. 17215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_Struct(name) { 17245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.name = name; 17255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Struct.prototype.sc_toDisplayString = function() { 17275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "#<struct" + sc_hash(this) + ">"; 17285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 17295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Struct.prototype.sc_toWriteString = sc_Struct.prototype.sc_toDisplayString; 17305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 17325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 1 "new sc_Struct(" name ")"))) 17335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 17345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_makeStruct(name) { 17355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Struct(name); 17365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 17395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 17405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix " instanceof sc_Struct"))) 17415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 17425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isStruct(o) { 17435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (o instanceof sc_Struct); 17445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 17475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 17485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 "(" 1 " instanceof sc_Struct) && ( " 1 ".name === " 0 ")"))) 17495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 17505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isStructNamed(name, s) { 17515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((s instanceof sc_Struct) && (s.name === name)); 17525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export struct-field) 17555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 3 0 "[" 2 "]"))) 17565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 17575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_getStructField(s, name, field) { 17585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s[field]; 17595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export struct-field-set!) 17625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 4 0 "[" 2 "] = " 3))) 17635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 17645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_setStructFieldBang(s, name, field, val) { 17655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) s[field] = val; 17665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 17695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (prefix "~"))) 17705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 17715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_bitNot(x) { 17725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ~x; 17735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 17765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 2 2 "&"))) 17775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 17785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_bitAnd(x, y) { 17795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return x & y; 17805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 17835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 2 2 "|"))) 17845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 17855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_bitOr(x, y) { 17865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return x | y; 17875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 17905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 2 2 "^"))) 17915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 17925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_bitXor(x, y) { 17935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return x ^ y; 17945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 17975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 2 2 "<<"))) 17985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 17995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_bitLsh(x, y) { 18005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return x << y; 18015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 18045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 2 2 ">>"))) 18055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 18065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_bitRsh(x, y) { 18075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return x >> y; 18085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 18115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 2 2 ">>>"))) 18125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 18135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_bitUrsh(x, y) { 18145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return x >>> y; 18155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export js-field js-property) 18185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 o "[" field "]"))) 18195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 18205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_jsField(o, field) { 18215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return o[field]; 18225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export js-field-set! js-property-set!) 18255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 3 o "[" field "] = " val))) 18265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 18275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_setJsFieldBang(o, field, val) { 18285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return o[field] = val; 18295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export js-field-delete! js-property-delete!) 18325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 "delete" o "[" field "]"))) 18335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 18345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_deleteJsFieldBang(o, field) { 18355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete o[field]; 18365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 18395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (jsCall))) 18405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 18415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_jsCall(o, fun) { 18425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var args = new Array(); 18435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 2; i < arguments.length; i++) 18445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) args[i-2] = arguments[i]; 18455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return fun.apply(o, args); 18465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 18495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (jsMethodCall))) 18505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 18515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_jsMethodCall(o, field) { 18525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var args = new Array(); 18535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 2; i < arguments.length; i++) 18545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) args[i-2] = arguments[i]; 18555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return o[field].apply(o, args); 18565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export new js-new) 18595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (jsNew))) 18605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 18615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_jsNew(c) { 18625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var evalStr = "new c("; 18635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) evalStr +=arguments.length > 1? "arguments[1]": ""; 18645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 2; i < arguments.length; i++) 18655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) evalStr += ", arguments[" + i + "]"; 18665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) evalStr +=")"; 18675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return eval(evalStr); 18685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ======================== RegExp ==================== 18715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 18725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_pregexp(re) { 18735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new RegExp(sc_string2jsstring(re)); 18745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 18775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_pregexpMatch(re, s) { 18785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var reg = (re instanceof RegExp) ? re : sc_pregexp(re); 18795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = reg.exec(sc_string2jsstring(s)); 18805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (tmp == null) return false; 18825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = null; 18845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = tmp.length-1; i >= 0; i--) { 18855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (tmp[i] !== null) { 18865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = sc_cons(sc_jsstring2string(tmp[i]), res); 18875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 18885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = sc_cons(false, res); 18895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 18905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 18915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 18925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 18955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_pregexpReplace(re, s1, s2) { 18965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var reg; 18975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var jss1 = sc_string2jsstring(s1); 18985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var jss2 = sc_string2jsstring(s2); 18995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (re instanceof RegExp) { 19015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (re.global) 19025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) reg = re; 19035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 19045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) reg = new RegExp(re.source); 19055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 19065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) reg = new RegExp(sc_string2jsstring(re)); 19075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 19085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return jss1.replace(reg, jss2); 19105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 19115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export pregexp-replace*)) */ 19135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_pregexpReplaceAll(re, s1, s2) { 19145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var reg; 19155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var jss1 = sc_string2jsstring(s1); 19165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var jss2 = sc_string2jsstring(s2); 19175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (re instanceof RegExp) { 19195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (re.global) 19205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) reg = re; 19215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 19225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) reg = new RegExp(re.source, "g"); 19235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 19245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) reg = new RegExp(sc_string2jsstring(re), "g"); 19255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 19265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return jss1.replace(reg, jss2); 19285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 19295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 19315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_pregexpSplit(re, s) { 19325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var reg = ((re instanceof RegExp) ? 19335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) re : 19345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) new RegExp(sc_string2jsstring(re))); 19355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var jss = sc_string2jsstring(s); 19365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = jss.split(reg); 19375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (tmp == null) return false; 19395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_vector2list(tmp); 19415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 19425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* =========================================================================== */ 19455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* Other library stuff */ 19465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* =========================================================================== */ 19475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 19495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 1 "Math.floor(Math.random()*" 'n ")"))) 19505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 19515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_random(n) { 19525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return Math.floor(Math.random()*n); 19535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 19545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export current-date) 19565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 0 "new Date()"))) 19575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 19585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_currentDate() { 19595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new Date(); 19605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 19615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_Hashtable() { 19635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 19645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Hashtable.prototype.toString = function() { 19655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "#{%hashtable}"; 19665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 19675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// sc_toWriteString == sc_toDisplayString == toString 19685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_HashtableElement(key, val) { 19705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.key = key; 19715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.val = val; 19725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 19735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 19755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 0 "new sc_Hashtable()"))) 19765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 19775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_makeHashtable() { 19785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Hashtable(); 19795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 19805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 19825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_hashtablePutBang(ht, key, val) { 19835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var hash = sc_hash(key); 19845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ht[hash] = new sc_HashtableElement(key, val); 19855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 19865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 19885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_hashtableGet(ht, key) { 19895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var hash = sc_hash(key); 19905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (hash in ht) 19915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ht[hash].val; 19925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 19935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 19945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 19955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 19975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_hashtableForEach(ht, f) { 19985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var v in ht) { 19995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (ht[v] instanceof sc_HashtableElement) 20005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) f(ht[v].key, ht[v].val); 20015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 20025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 20035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export hashtable-contains?) 20055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 "sc_hash(" 1 ") in " 0))) 20065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 20075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_hashtableContains(ht, key) { 20085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var hash = sc_hash(key); 20095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (hash in ht) 20105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 20115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 20125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 20135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 20145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var SC_HASH_COUNTER = 0; 20165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_hash(o) { 20185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (o === null) 20195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "null"; 20205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (o === undefined) 20215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "undefined"; 20225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (o === true) 20235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "true"; 20245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (o === false) 20255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "false"; 20265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (typeof o === "number") 20275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "num-" + o; 20285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (typeof o === "string") 20295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "jsstr-" + o; 20305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (o.sc_getHash) 20315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return o.sc_getHash(); 20325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 20335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_counterHash.call(o); 20345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 20355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_counterHash() { 20365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.sc_hash) { 20375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.sc_hash = "hash-" + SC_HASH_COUNTER; 20385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SC_HASH_COUNTER++; 20395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 20405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.sc_hash; 20415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 20425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_Trampoline(args, maxTailCalls) { 20445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this['__trampoline return__'] = true; 20455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.args = args; 20465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.MAX_TAIL_CALLs = maxTailCalls; 20475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 20485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// TODO: call/cc stuff 20495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Trampoline.prototype.restart = function() { 20505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var o = this; 20515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 20525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // set both globals. 20535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SC_TAIL_OBJECT.calls = o.MAX_TAIL_CALLs-1; 20545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var fun = o.args.callee; 20555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = fun.apply(SC_TAIL_OBJECT, o.args); 20565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (res instanceof sc_Trampoline) 20575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) o = res; 20585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 20595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 20605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 20615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 20625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export bind-exit-lambda)) */ 20645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_bindExitLambda(proc) { 20655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var escape_obj = new sc_BindExitException(); 20665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var escape = function(res) { 20675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) escape_obj.res = res; 20685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw escape_obj; 20695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 20705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) try { 20715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return proc(escape); 20725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } catch(e) { 20735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (e === escape_obj) { 20745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return e.res; 20755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 20765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw e; 20775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 20785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 20795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_BindExitException() { 20805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._internalException = true; 20815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 20825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var SC_SCM2JS_GLOBALS = new Object(); 20845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// default tail-call depth. 20865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// normally the program should set it again. but just in case... 20875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var SC_TAIL_OBJECT = new Object(); 20885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)SC_SCM2JS_GLOBALS.TAIL_OBJECT = SC_TAIL_OBJECT; 20895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ======================== I/O ======================= 20905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*------------------------------------------------------------------*/ 20925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_EOF() { 20945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 20955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var SC_EOF_OBJECT = new sc_EOF(); 20965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_Port() { 20985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 20995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* --------------- Input ports -------------------------------------*/ 21015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_InputPort() { 21035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 21045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_InputPort.prototype = new sc_Port(); 21055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_InputPort.prototype.peekChar = function() { 21075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!("peeked" in this)) 21085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.peeked = this.getNextChar(); 21095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.peeked; 21105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 21115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_InputPort.prototype.readChar = function() { 21125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = this.peekChar(); 21135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this.peeked; 21145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return tmp; 21155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 21165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_InputPort.prototype.isCharReady = function() { 21175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 21185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 21195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_InputPort.prototype.close = function() { 21205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // do nothing 21215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 21225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* .............. String port ..........................*/ 21245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_ErrorInputPort() { 21255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 21265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_ErrorInputPort.prototype = new sc_InputPort(); 21275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_ErrorInputPort.prototype.getNextChar = function() { 21285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw "can't read from error-port."; 21295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 21305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_ErrorInputPort.prototype.isCharReady = function() { 21315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 21325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 21335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* .............. String port ..........................*/ 21365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_StringInputPort(jsStr) { 21385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // we are going to do some charAts on the str. 21395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // instead of recreating all the time a String-object, we 21405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // create one in the beginning. (not sure, if this is really an optim) 21415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.str = new String(jsStr); 21425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.pos = 0; 21435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 21445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_StringInputPort.prototype = new sc_InputPort(); 21455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_StringInputPort.prototype.getNextChar = function() { 21465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.pos >= this.str.length) 21475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return SC_EOF_OBJECT; 21485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.str.charAt(this.pos++); 21495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 21505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* ------------- Read and other lib-funs -------------------------------*/ 21525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_Token(type, val, pos) { 21535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.type = type; 21545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.val = val; 21555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.pos = pos; 21565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 21575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.EOF = 0/*EOF*/; 21585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.OPEN_PAR = 1/*OPEN_PAR*/; 21595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.CLOSE_PAR = 2/*CLOSE_PAR*/; 21605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.OPEN_BRACE = 3/*OPEN_BRACE*/; 21615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.CLOSE_BRACE = 4/*CLOSE_BRACE*/; 21625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.OPEN_BRACKET = 5/*OPEN_BRACKET*/; 21635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.CLOSE_BRACKET = 6/*CLOSE_BRACKET*/; 21645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.WHITESPACE = 7/*WHITESPACE*/; 21655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.QUOTE = 8/*QUOTE*/; 21665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.ID = 9/*ID*/; 21675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.DOT = 10/*DOT*/; 21685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.STRING = 11/*STRING*/; 21695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.NUMBER = 12/*NUMBER*/; 21705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.ERROR = 13/*ERROR*/; 21715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.VECTOR_BEGIN = 14/*VECTOR_BEGIN*/; 21725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.TRUE = 15/*TRUE*/; 21735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.FALSE = 16/*FALSE*/; 21745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.UNSPECIFIED = 17/*UNSPECIFIED*/; 21755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.REFERENCE = 18/*REFERENCE*/; 21765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.STORE = 19/*STORE*/; 21775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Token.CHAR = 20/*CHAR*/; 21785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var SC_ID_CLASS = SC_LOWER_CLASS + SC_UPPER_CLASS + "!$%*+-./:<=>?@^_~"; 21805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_Tokenizer(port) { 21815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.port = port; 21825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 21835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Tokenizer.prototype.peekToken = function() { 21845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.peeked) 21855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.peeked; 21865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var newToken = this.nextToken(); 21875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.peeked = newToken; 21885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return newToken; 21895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 21905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Tokenizer.prototype.readToken = function() { 21915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = this.peekToken(); 21925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this.peeked; 21935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return tmp; 21945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 21955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Tokenizer.prototype.nextToken = function() { 21965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var port = this.port; 21975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function isNumberChar(c) { 21995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (c >= "0" && c <= "9"); 22005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 22015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function isIdOrNumberChar(c) { 22025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return SC_ID_CLASS.indexOf(c) != -1 || // ID-char 22035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (c >= "0" && c <= "9"); 22045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 22055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function isWhitespace(c) { 22065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return c === " " || c === "\r" || c === "\n" || c === "\t" || c === "\f"; 22075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 22085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function isWhitespaceOrEOF(c) { 22095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return isWhitespace(c) || c === SC_EOF_OBJECT; 22105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 22115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 22125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function readString() { 22135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = ""; 22145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 22155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var c = port.readChar(); 22165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (c) { 22175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case '"': 22185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(11/*STRING*/, res); 22195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "\\": 22205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = port.readChar(); 22215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (tmp) { 22225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case '0': res += "\0"; break; 22235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 'a': res += "\a"; break; 22245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 'b': res += "\b"; break; 22255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 'f': res += "\f"; break; 22265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 'n': res += "\n"; break; 22275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 'r': res += "\r"; break; 22285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 't': res += "\t"; break; 22295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 'v': res += "\v"; break; 22305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case '"': res += '"'; break; 22315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case '\\': res += '\\'; break; 22325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 'x': 22335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* hexa-number */ 22345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nb = 0; 22355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 22365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var hexC = port.peekChar(); 22375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (hexC >= '0' && hexC <= '9') { 22385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) port.readChar(); 22395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nb = nb * 16 + hexC.charCodeAt(0) - '0'.charCodeAt(0); 22405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (hexC >= 'a' && hexC <= 'f') { 22415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) port.readChar(); 22425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nb = nb * 16 + hexC.charCodeAt(0) - 'a'.charCodeAt(0); 22435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (hexC >= 'A' && hexC <= 'F') { 22445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) port.readChar(); 22455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nb = nb * 16 + hexC.charCodeAt(0) - 'A'.charCodeAt(0); 22465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 22475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // next char isn't part of hex. 22485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += String.fromCharCode(nb); 22495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 22505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 22515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 22525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 22535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 22545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (tmp === SC_EOF_OBJECT) { 22555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res); 22565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 22575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += tmp; 22585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 22595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 22605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 22615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (c === SC_EOF_OBJECT) { 22625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res); 22635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 22645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += c; 22655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 22665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 22675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 22685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function readIdOrNumber(firstChar) { 22695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = firstChar; 22705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (isIdOrNumberChar(port.peekChar())) 22715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += port.readChar(); 22725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isNaN(res)) 22735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(9/*ID*/, res); 22745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 22755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(12/*NUMBER*/, res - 0); 22765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 22775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 22785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function skipWhitespaceAndComments() { 22795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var done = false; 22805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (!done) { 22815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) done = true; 22825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (isWhitespace(port.peekChar())) 22835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) port.readChar(); 22845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (port.peekChar() === ';') { 22855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) port.readChar(); 22865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) done = false; 22875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 22885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) curChar = port.readChar(); 22895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (curChar === SC_EOF_OBJECT || 22905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) curChar === '\n') 22915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 22925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 22935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 22945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 22955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 22965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 22975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function readDot() { 22985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isWhitespace(port.peekChar())) 22995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(10/*DOT*/); 23005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 23015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return readIdOrNumber("."); 23025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 23035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 23045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function readSharp() { 23055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var c = port.readChar(); 23065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isWhitespace(c)) 23075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(13/*ERROR*/, "bad #-pattern0."); 23085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 23095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // reference 23105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isNumberChar(c)) { 23115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nb = c - 0; 23125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (isNumberChar(port.peekChar())) 23135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nb = nb*10 + (port.readChar() - 0); 23145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (port.readChar()) { 23155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case '#': 23165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(18/*REFERENCE*/, nb); 23175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case '=': 23185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(19/*STORE*/, nb); 23195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 23205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(13/*ERROR*/, "bad #-pattern1." + nb); 23215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 23225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 23235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 23245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (c === "(") 23255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(14/*VECTOR_BEGIN*/); 23265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 23275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (c === "\\") { // character 23285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = "" 23295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (!isWhitespaceOrEOF(port.peekChar())) 23305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tmp += port.readChar(); 23315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (tmp.length) { 23325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 0: // it's escaping a whitespace char: 23335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (sc_isEOFObject(port.peekChar)) 23345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(13/*ERROR*/, "bad #-pattern2."); 23355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 23365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(20/*CHAR*/, port.readChar()); 23375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 1: 23385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(20/*CHAR*/, tmp); 23395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 23405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var entry = sc_Char.readable2char[tmp.toLowerCase()]; 23415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (entry) 23425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(20/*CHAR*/, entry); 23435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 23445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(13/*ERROR*/, "unknown character description: #\\" + tmp); 23455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 23465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 23475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 23485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // some constants (#t, #f, #unspecified) 23495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res; 23505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var needing; 23515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (c) { 23525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 't': res = new sc_Token(15/*TRUE*/, true); needing = ""; break; 23535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 'f': res = new sc_Token(16/*FALSE*/, false); needing = ""; break; 23545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 'u': res = new sc_Token(17/*UNSPECIFIED*/, undefined); needing = "nspecified"; break; 23555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 23565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(13/*ERROR*/, "bad #-pattern3: " + c); 23575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 23585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while(true) { 23595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) c = port.peekChar(); 23605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((isWhitespaceOrEOF(c) || c === ')') && 23615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) needing == "") 23625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 23635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (isWhitespace(c) || needing == "") 23645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(13/*ERROR*/, "bad #-pattern4 " + c + " " + needing); 23655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (needing.charAt(0) == c) { 23665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) port.readChar(); // consume 23675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) needing = needing.slice(1); 23685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 23695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(13/*ERROR*/, "bad #-pattern5"); 23705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 23715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 23725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 23735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 23745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) skipWhitespaceAndComments(); 23755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var curChar = port.readChar(); 23765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (curChar === SC_EOF_OBJECT) 23775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(0/*EOF*/, curChar); 23785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (curChar) 23795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 23805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case " ": 23815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "\n": 23825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "\t": 23835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return readWhitespace(); 23845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "(": 23855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(1/*OPEN_PAR*/); 23865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case ")": 23875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(2/*CLOSE_PAR*/); 23885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "{": 23895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(3/*OPEN_BRACE*/); 23905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "}": 23915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(4/*CLOSE_BRACE*/); 23925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "[": 23935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(5/*OPEN_BRACKET*/); 23945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "]": 23955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(6/*CLOSE_BRACKET*/); 23965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "'": 23975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Token(8/*QUOTE*/); 23985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "#": 23995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return readSharp(); 24005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case ".": 24015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return readDot(); 24025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case '"': 24035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return readString(); 24045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 24055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isIdOrNumberChar(curChar)) 24065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return readIdOrNumber(curChar); 24075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw "unexpected character: " + curChar; 24085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 24095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 24105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_Reader(tokenizer) { 24125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.tokenizer = tokenizer; 24135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.backref = new Array(); 24145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 24155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Reader.prototype.read = function() { 24165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function readList(listBeginType) { 24175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function matchesPeer(open, close) { 24185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return open === 1/*OPEN_PAR*/ && close === 2/*CLOSE_PAR*/ 24195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || open === 3/*OPEN_BRACE*/ && close === 4/*CLOSE_BRACE*/ 24205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || open === 5/*OPEN_BRACKET*/ && close === 6/*CLOSE_BRACKET*/; 24215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 24225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = null; 24235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 24255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var token = tokenizer.peekToken(); 24265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (token.type) { 24285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 2/*CLOSE_PAR*/: 24295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 4/*CLOSE_BRACE*/: 24305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 6/*CLOSE_BRACKET*/: 24315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (matchesPeer(listBeginType, token.type)) { 24325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tokenizer.readToken(); // consume token 24335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_reverseBang(res); 24345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 24355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw "closing par doesn't match: " + listBeginType 24365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + " " + listEndType; 24375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 0/*EOF*/: 24395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw "unexpected end of file"; 24405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 10/*DOT*/: 24425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tokenizer.readToken(); // consume token 24435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var cdr = this.read(); 24445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var par = tokenizer.readToken(); 24455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!matchesPeer(listBeginType, par.type)) 24465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw "closing par doesn't match: " + listBeginType 24475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + " " + par.type; 24485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 24495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_reverseAppendBang(res, cdr); 24505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 24535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res = sc_cons(this.read(), res); 24545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 24555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 24565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 24575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function readQuote() { 24585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_cons("quote", sc_cons(this.read(), null)); 24595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 24605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function readVector() { 24615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // opening-parenthesis is already consumed 24625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var a = new Array(); 24635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 24645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var token = tokenizer.peekToken(); 24655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (token.type) { 24665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 2/*CLOSE_PAR*/: 24675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tokenizer.readToken(); 24685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 24695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 24715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a.push(this.read()); 24725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 24735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 24745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 24755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function storeRefence(nb) { 24775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = this.read(); 24785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.backref[nb] = tmp; 24795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return tmp; 24805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 24815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function readReference(nb) { 24835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (nb in this.backref) 24845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.backref[nb]; 24855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 24865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw "bad reference: " + nb; 24875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 24885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tokenizer = this.tokenizer; 24905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var token = tokenizer.readToken(); 24925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // handle error 24945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (token.type === 13/*ERROR*/) 24955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw token.val; 24965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (token.type) { 24985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 1/*OPEN_PAR*/: 24995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 3/*OPEN_BRACE*/: 25005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 5/*OPEN_BRACKET*/: 25015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return readList.call(this, token.type); 25025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 8/*QUOTE*/: 25035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return readQuote.call(this); 25045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 11/*STRING*/: 25055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_jsstring2string(token.val); 25065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 20/*CHAR*/: 25075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Char(token.val); 25085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 14/*VECTOR_BEGIN*/: 25095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return readVector.call(this); 25105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 18/*REFERENCE*/: 25115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return readReference.call(this, token.val); 25125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 19/*STORE*/: 25135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return storeRefence.call(this, token.val); 25145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 9/*ID*/: 25155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_jsstring2symbol(token.val); 25165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 0/*EOF*/: 25175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 12/*NUMBER*/: 25185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 15/*TRUE*/: 25195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 16/*FALSE*/: 25205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 17/*UNSPECIFIED*/: 25215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return token.val; 25225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 25235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw "unexpected token " + token.type + " " + token.val; 25245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 25255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 25265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 25275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 25285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_read(port) { 25295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (port === undefined) // we assume the port hasn't been given. 25305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) port = SC_DEFAULT_IN; // THREAD: shared var... 25315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var reader = new sc_Reader(new sc_Tokenizer(port)); 25325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return reader.read(); 25335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 25345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 25355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_readChar(port) { 25365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (port === undefined) // we assume the port hasn't been given. 25375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) port = SC_DEFAULT_IN; // THREAD: shared var... 25385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var t = port.readChar(); 25395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return t === SC_EOF_OBJECT? t: new sc_Char(t); 25405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 25415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 25425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_peekChar(port) { 25435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (port === undefined) // we assume the port hasn't been given. 25445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) port = SC_DEFAULT_IN; // THREAD: shared var... 25455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var t = port.peekChar(); 25465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return t === SC_EOF_OBJECT? t: new sc_Char(t); 25475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 25485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 25495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 25505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 25515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isCharReady(port) { 25525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (port === undefined) // we assume the port hasn't been given. 25535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) port = SC_DEFAULT_IN; // THREAD: shared var... 25545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return port.isCharReady(); 25555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 25565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 25575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".close()"))) 25585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 25595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_closeInputPort(p) { 25605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return p.close(); 25615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 25625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 25635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 25645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 25655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix " instanceof sc_InputPort"))) 25665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 25675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isInputPort(o) { 25685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (o instanceof sc_InputPort); 25695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 25705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 25715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export eof-object?) 25725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 25735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix " === SC_EOF_OBJECT"))) 25745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 25755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isEOFObject(o) { 25765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return o === SC_EOF_OBJECT; 25775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 25785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 25795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 25805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 0 "SC_DEFAULT_IN"))) 25815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 25825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_currentInputPort() { 25835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return SC_DEFAULT_IN; 25845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 25855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 25865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* ------------ file operations are not supported -----------*/ 25875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 25885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_callWithInputFile(s, proc) { 25895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw "can't open " + s; 25905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 25915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 25925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 25935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_callWithOutputFile(s, proc) { 25945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw "can't open " + s; 25955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 25965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 25975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 25985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_withInputFromFile(s, thunk) { 25995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw "can't open " + s; 26005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 26015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 26035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_withOutputToFile(s, thunk) { 26045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw "can't open " + s; 26055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 26065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 26085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_openInputFile(s) { 26095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw "can't open " + s; 26105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 26115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 26135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_openOutputFile(s) { 26145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw "can't open " + s; 26155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 26165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* ----------------------------------------------------------------------------*/ 26185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 26195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_basename(p) { 26205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var i = p.lastIndexOf('/'); 26215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if(i >= 0) 26235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return p.substring(i + 1, p.length); 26245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 26255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ''; 26265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 26275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 26295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_dirname(p) { 26305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var i = p.lastIndexOf('/'); 26315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if(i >= 0) 26335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return p.substring(0, i); 26345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 26355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ''; 26365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 26375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* ----------------------------------------------------------------------------*/ 26395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 26415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_withInputFromPort(p, thunk) { 26425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) try { 26435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = SC_DEFAULT_IN; // THREAD: shared var. 26445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SC_DEFAULT_IN = p; 26455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return thunk(); 26465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } finally { 26475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SC_DEFAULT_IN = tmp; 26485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 26495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 26505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 26525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_withInputFromString(s, thunk) { 26535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_withInputFromPort(new sc_StringInputPort(sc_string2jsstring(s)), thunk); 26545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 26555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 26575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_withOutputToPort(p, thunk) { 26585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) try { 26595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp = SC_DEFAULT_OUT; // THREAD: shared var. 26605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SC_DEFAULT_OUT = p; 26615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return thunk(); 26625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } finally { 26635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SC_DEFAULT_OUT = tmp; 26645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 26655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 26665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 26685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_withOutputToString(thunk) { 26695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var p = new sc_StringOutputPort(); 26705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_withOutputToPort(p, thunk); 26715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return p.close(); 26725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 26735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 26755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_withOutputToProcedure(proc, thunk) { 26765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var t = function(s) { proc(sc_jsstring2string(s)); }; 26775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_withOutputToPort(new sc_GenericOutputPort(t), thunk); 26785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 26795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 26815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 0 "new sc_StringOutputPort()"))) 26825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 26835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_openOutputString() { 26845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_StringOutputPort(); 26855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 26865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 26885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_openInputString(str) { 26895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_StringInputPort(sc_string2jsstring(str)); 26905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 26915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* ----------------------------------------------------------------------------*/ 26935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_OutputPort() { 26955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 26965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_OutputPort.prototype = new sc_Port(); 26975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_OutputPort.prototype.appendJSString = function(obj) { 26985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* do nothing */ 26995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 27005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_OutputPort.prototype.close = function() { 27015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* do nothing */ 27025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 27035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 27045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_StringOutputPort() { 27055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.res = ""; 27065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 27075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_StringOutputPort.prototype = new sc_OutputPort(); 27085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_StringOutputPort.prototype.appendJSString = function(s) { 27095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.res += s; 27105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 27115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_StringOutputPort.prototype.close = function() { 27125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_jsstring2string(this.res); 27135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 27145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 27155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 27165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_getOutputString(sp) { 27175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_jsstring2string(sp.res); 27185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 27195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 27205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 27215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_ErrorOutputPort() { 27225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 27235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_ErrorOutputPort.prototype = new sc_OutputPort(); 27245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_ErrorOutputPort.prototype.appendJSString = function(s) { 27255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw "don't write on ErrorPort!"; 27265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 27275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_ErrorOutputPort.prototype.close = function() { 27285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* do nothing */ 27295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 27305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 27315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_GenericOutputPort(appendJSString, close) { 27325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.appendJSString = appendJSString; 27335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (close) 27345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.close = close; 27355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 27365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_GenericOutputPort.prototype = new sc_OutputPort(); 27375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 27385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 27395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 27405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix " instanceof sc_OutputPort"))) 27415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 27425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isOutputPort(o) { 27435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (o instanceof sc_OutputPort); 27445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 27455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 27465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 27475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".close()"))) 27485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 27495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_closeOutputPort(p) { 27505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return p.close(); 27515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 27525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 27535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* ------------------ write ---------------------------------------------------*/ 27545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 27555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 27565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_write(o, p) { 27575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (p === undefined) // we assume not given 27585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p = SC_DEFAULT_OUT; 27595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString(sc_toWriteString(o)); 27605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 27615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 27625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_toWriteString(o) { 27635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (o === null) 27645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "()"; 27655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (o === true) 27665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "#t"; 27675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (o === false) 27685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "#f"; 27695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (o === undefined) 27705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "#unspecified"; 27715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (typeof o === 'function') 27725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "#<procedure " + sc_hash(o) + ">"; 27735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (o.sc_toWriteString) 27745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return o.sc_toWriteString(); 27755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 27765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return o.toString(); 27775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 27785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 27795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_escapeWriteString(s) { 27805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = ""; 27815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var j = 0; 27825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (i = 0; i < s.length; i++) { 27835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (s.charAt(i)) { 27845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "\0": res += s.substring(j, i) + "\\0"; j = i + 1; break; 27855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "\b": res += s.substring(j, i) + "\\b"; j = i + 1; break; 27865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "\f": res += s.substring(j, i) + "\\f"; j = i + 1; break; 27875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "\n": res += s.substring(j, i) + "\\n"; j = i + 1; break; 27885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "\r": res += s.substring(j, i) + "\\r"; j = i + 1; break; 27895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "\t": res += s.substring(j, i) + "\\t"; j = i + 1; break; 27905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "\v": res += s.substring(j, i) + "\\v"; j = i + 1; break; 27915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case '"': res += s.substring(j, i) + '\\"'; j = i + 1; break; 27925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "\\": res += s.substring(j, i) + "\\\\"; j = i + 1; break; 27935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 27945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var c = s.charAt(i); 27955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ("\a" !== "a" && c == "\a") { 27965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += s.substring(j, i) + "\\a"; j = i + 1; continue; 27975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 27985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ("\v" !== "v" && c == "\v") { 27995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += s.substring(j, i) + "\\v"; j = i + 1; continue; 28005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 28015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) //if (s.charAt(i) < ' ' || s.charCodeAt(i) > 127) { 28025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // CARE: Manuel is this OK with HOP? 28035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (s.charAt(i) < ' ') { 28045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* non printable character and special chars */ 28055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += s.substring(j, i) + "\\x" + s.charCodeAt(i).toString(16); 28065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) j = i + 1; 28075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 28085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // else just let i increase... 28095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 28105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 28115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += s.substring(j, i); 28125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 28135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 28145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* ------------------ display ---------------------------------------------------*/ 28165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 28185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_display(o, p) { 28195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (p === undefined) // we assume not given 28205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p = SC_DEFAULT_OUT; 28215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString(sc_toDisplayString(o)); 28225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 28235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_toDisplayString(o) { 28255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (o === null) 28265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "()"; 28275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (o === true) 28285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "#t"; 28295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (o === false) 28305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "#f"; 28315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (o === undefined) 28325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "#unspecified"; 28335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (typeof o === 'function') 28345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "#<procedure " + sc_hash(o) + ">"; 28355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (o.sc_toDisplayString) 28365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return o.sc_toDisplayString(); 28375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 28385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return o.toString(); 28395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 28405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* ------------------ newline ---------------------------------------------------*/ 28425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 28445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_newline(p) { 28455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (p === undefined) // we assume not given 28465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p = SC_DEFAULT_OUT; 28475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString("\n"); 28485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 28495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* ------------------ write-char ---------------------------------------------------*/ 28515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 28535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_writeChar(c, p) { 28545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (p === undefined) // we assume not given 28555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p = SC_DEFAULT_OUT; 28565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString(c.val); 28575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 28585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* ------------------ write-circle ---------------------------------------------------*/ 28605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 28625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_writeCircle(o, p) { 28635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (p === undefined) // we assume not given 28645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p = SC_DEFAULT_OUT; 28655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString(sc_toWriteCircleString(o)); 28665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 28675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_toWriteCircleString(o) { 28695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var symb = sc_gensym("writeCircle"); 28705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nbPointer = new Object(); 28715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nbPointer.nb = 0; 28725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_prepWriteCircle(o, symb, nbPointer); 28735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_genToWriteCircleString(o, symb); 28745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 28755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_prepWriteCircle(o, symb, nbPointer) { 28775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // TODO sc_Struct 28785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (o instanceof sc_Pair || 28795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) o instanceof sc_Vector) { 28805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (o[symb] !== undefined) { 28815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // not the first visit. 28825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) o[symb]++; 28835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // unless there is already a number, assign one. 28845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!o[symb + "nb"]) o[symb + "nb"] = nbPointer.nb++; 28855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 28865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 28875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) o[symb] = 0; 28885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (o instanceof sc_Pair) { 28895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_prepWriteCircle(o.car, symb, nbPointer); 28905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_prepWriteCircle(o.cdr, symb, nbPointer); 28915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 28925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < o.length; i++) 28935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_prepWriteCircle(o[i], symb, nbPointer); 28945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 28955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 28965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 28975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_genToWriteCircleString(o, symb) { 28995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!(o instanceof sc_Pair || 29005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) o instanceof sc_Vector)) 29015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_toWriteString(o); 29025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return o.sc_toWriteCircleString(symb); 29035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 29045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Pair.prototype.sc_toWriteCircleString = function(symb, inList) { 29055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this[symb + "use"]) { // use-flag is set. Just use it. 29065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nb = this[symb + "nb"]; 29075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this[symb]-- === 0) { // if we are the last use. remove all fields. 29085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this[symb]; 29095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this[symb + "nb"]; 29105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this[symb + "use"]; 29115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 29125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (inList) 29135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return '. #' + nb + '#'; 29145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 29155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return '#' + nb + '#'; 29165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 29175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this[symb]-- === 0) { // if we are the last use. remove all fields. 29185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this[symb]; 29195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this[symb + "nb"]; 29205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this[symb + "use"]; 29215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 29225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = ""; 29245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this[symb] !== undefined) { // implies > 0 29265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this[symb + "use"] = true; 29275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (inList) 29285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += '. #' + this[symb + "nb"] + '='; 29295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 29305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += '#' + this[symb + "nb"] + '='; 29315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inList = false; 29325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 29335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!inList) 29355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += "("; 29365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // print car 29385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += sc_genToWriteCircleString(this.car, symb); 29395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (sc_isPair(this.cdr)) { 29415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += " " + this.cdr.sc_toWriteCircleString(symb, true); 29425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (this.cdr !== null) { 29435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += " . " + sc_genToWriteCircleString(this.cdr, symb); 29445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 29455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!inList) 29465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += ")"; 29475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 29485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 29495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sc_Vector.prototype.sc_toWriteCircleString = function(symb) { 29505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this[symb + "use"]) { // use-flag is set. Just use it. 29515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nb = this[symb + "nb"]; 29525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this[symb]-- === 0) { // if we are the last use. remove all fields. 29535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this[symb]; 29545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this[symb + "nb"]; 29555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this[symb + "use"]; 29565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 29575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return '#' + nb + '#'; 29585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 29595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this[symb]-- === 0) { // if we are the last use. remove all fields. 29605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this[symb]; 29615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this[symb + "nb"]; 29625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this[symb + "use"]; 29635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 29645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = ""; 29665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this[symb] !== undefined) { // implies > 0 29675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this[symb + "use"] = true; 29685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += '#' + this[symb + "nb"] + '='; 29695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 29705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += "#("; 29715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < this.length; i++) { 29725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += sc_genToWriteCircleString(this[i], symb); 29735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (i < this.length - 1) res += " "; 29745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 29755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += ")"; 29765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 29775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 29785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* ------------------ print ---------------------------------------------------*/ 29815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 29835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_print(s) { 29845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (arguments.length === 1) { 29855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_display(s); 29865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_newline(); 29875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 29885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else { 29895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < arguments.length; i++) 29905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_display(arguments[i]); 29915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_newline(); 29925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 29935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 29945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* ------------------ format ---------------------------------------------------*/ 29965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 29975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_format(s, args) { 29985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var len = s.length; 29995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var p = new sc_StringOutputPort(); 30005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var i = 0, j = 1; 30015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while( i < len ) { 30035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var i2 = s.indexOf("~", i); 30045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (i2 == -1) { 30065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString( s.substring( i, len ) ); 30075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return p.close(); 30085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 30095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (i2 > i) { 30105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (i2 == (len - 1)) { 30115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString(s.substring(i, len)); 30125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return p.close(); 30135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 30145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString(s.substring(i, i2)); 30155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) i = i2; 30165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 30175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 30185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch(s.charCodeAt(i2 + 1)) { 30205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 65: 30215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 97: 30225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // a 30235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_display(arguments[j], p); 30245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) i += 2; j++; 30255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 30265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 83: 30285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 115: 30295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // s 30305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_write(arguments[j], p); 30315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) i += 2; j++; 30325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 30335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 86: 30355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 118: 30365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // v 30375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_display(arguments[j], p); 30385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString("\n"); 30395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) i += 2; j++; 30405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 30415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 67: 30435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 99: 30445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // c 30455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString(String.fromCharCode(arguments[j])); 30465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) i += 2; j++; 30475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 30485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 88: 30505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 120: 30515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // x 30525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString(arguments[j].toString(6)); 30535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) i += 2; j++; 30545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 30555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 79: 30575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 111: 30585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // o 30595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString(arguments[j].toString(8)); 30605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) i += 2; j++; 30615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 30625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 66: 30645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 98: 30655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // b 30665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString(arguments[j].toString(2)); 30675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) i += 2; j++; 30685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 30695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 37: 30715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 110: 30725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // %, n 30735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString("\n"); 30745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) i += 2; break; 30755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 114: 30775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // r 30785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString("\r"); 30795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) i += 2; break; 30805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case 126: 30825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // ~ 30835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) p.appendJSString("~"); 30845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) i += 2; break; 30855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 30875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_error( "format: illegal ~" 30885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + String.fromCharCode(s.charCodeAt(i2 + 1)) 30895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + " sequence" ); 30905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ""; 30915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 30925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 30935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 30945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return p.close(); 30965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 30975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* ------------------ global ports ---------------------------------------------------*/ 30995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var SC_DEFAULT_IN = new sc_ErrorInputPort(); 31015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var SC_DEFAULT_OUT = new sc_ErrorOutputPort(); 31025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var SC_ERROR_OUT = new sc_ErrorOutputPort(); 31035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_SYMBOL_PREFIX = "\u1E9C"; 31055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_KEYWORD_PREFIX = "\u1E9D"; 31065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 31085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (id))) */ 31095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_jsstring2string(s) { 31105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s; 31115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 31125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 31145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (prefix "'\\u1E9C' +"))) 31155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 31165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_jsstring2symbol(s) { 31175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_SYMBOL_PREFIX + s; 31185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 31195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 31215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (id))) 31225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 31235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_string2jsstring(s) { 31245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s; 31255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 31265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 31285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (symbol2jsstring_immutable))) 31295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 31305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_symbol2jsstring(s) { 31315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s.slice(1); 31325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 31335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 31355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".slice(1)"))) 31365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 31375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_keyword2jsstring(k) { 31385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return k.slice(1); 31395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 31405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 31425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (prefix "'\\u1E9D' +"))) 31435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 31445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_jsstring2keyword(s) { 31455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_KEYWORD_PREFIX + s; 31465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 31475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 31495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 31505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 31515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isKeyword(s) { 31525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (typeof s === "string") && 31535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (s.charAt(0) === sc_KEYWORD_PREFIX); 31545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 31555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 31585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_gensym = function() { 31595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var counter = 1000; 31605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return function(sym) { 31615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) counter++; 31625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!sym) sym = sc_SYMBOL_PREFIX; 31635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sym + "s" + counter + "~" + "^sC-GeNsYm "; 31645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 31655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}(); 31665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 31695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 31705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 31715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isEqual(o1, o2) { 31725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((o1 === o2) || 31735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_isPair(o1) && sc_isPair(o2) 31745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && sc_isPairEqual(o1, o2, sc_isEqual)) || 31755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_isVector(o1) && sc_isVector(o2) 31765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && sc_isVectorEqual(o1, o2, sc_isEqual))); 31775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 31785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export number->symbol integer->symbol)) */ 31805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_number2symbol(x, radix) { 31815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_SYMBOL_PREFIX + sc_number2jsstring(x, radix); 31825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 31835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export number->string integer->string)) */ 31855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_number2string = sc_number2jsstring; 31865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 31885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_symbol2number(s, radix) { 31895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_jsstring2number(s.slice(1), radix); 31905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 31915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 31935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_string2number = sc_jsstring2number; 31945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 31965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (prefix "+" s))) 31975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ;; peephole will only apply if no radix is given. 31985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 31995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_string2integer(s, radix) { 32005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!radix) return +s; 32015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return parseInt(s, radix); 32025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 32035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 32055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (prefix "+"))) 32065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 32075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_string2real(s) { 32085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return +s; 32095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 32105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 32135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 32145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 32155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isSymbol(s) { 32165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (typeof s === "string") && 32175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (s.charAt(0) === sc_SYMBOL_PREFIX); 32185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 32195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 32215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (symbol2string_immutable))) 32225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 32235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_symbol2string(s) { 32245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s.slice(1); 32255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 32265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 32285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (prefix "'\\u1E9C' +"))) 32295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 32305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_string2symbol(s) { 32315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_SYMBOL_PREFIX + s; 32325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 32335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export symbol-append) 32355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (symbolAppend_immutable))) 32365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 32375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_symbolAppend() { 32385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var res = sc_SYMBOL_PREFIX; 32395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < arguments.length; i++) 32405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) res += arguments[i].slice(1); 32415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return res; 32425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 32435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 32455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".val"))) 32465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 32475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_char2string(c) { return c.val; } 32485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 32505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 1 "'\\u1E9C' + " c ".val"))) 32515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 32525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_char2symbol(c) { return sc_SYMBOL_PREFIX + c.val; } 32535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 32555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool)) 32565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 32575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isString(s) { 32585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (typeof s === "string") && 32595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (s.charAt(0) !== sc_SYMBOL_PREFIX); 32605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 32615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 32635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_makeString = sc_makejsString; 32645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 32675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_string() { 32685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < arguments.length; i++) 32695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) arguments[i] = arguments[i].val; 32705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "".concat.apply("", arguments); 32715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 32725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 32745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".length"))) 32755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 32765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_stringLength(s) { return s.length; } 32775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 32795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_stringRef(s, k) { 32805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new sc_Char(s.charAt(k)); 32815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 32825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* there's no stringSet in the immutable version 32845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_stringSet(s, k, c) 32855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 32865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export string=?) 32895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 32905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 str1 " === " str2))) 32915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 32925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isStringEqual(s1, s2) { 32935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s1 === s2; 32945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 32955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export string<?) 32965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 32975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 str1 " < " str2))) 32985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 32995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isStringLess(s1, s2) { 33005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s1 < s2; 33015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 33025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export string>?) 33035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 33045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 str1 " > " str2))) 33055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 33065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isStringGreater(s1, s2) { 33075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s1 > s2; 33085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 33095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export string<=?) 33105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 33115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 str1 " <= " str2))) 33125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 33135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isStringLessEqual(s1, s2) { 33145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s1 <= s2; 33155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 33165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export string>=?) 33175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 33185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 str1 " >= " str2))) 33195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 33205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isStringGreaterEqual(s1, s2) { 33215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s1 >= s2; 33225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 33235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export string-ci=?) 33245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 33255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 str1 ".toLowerCase() === " str2 ".toLowerCase()"))) 33265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 33275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isStringCIEqual(s1, s2) { 33285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s1.toLowerCase() === s2.toLowerCase(); 33295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 33305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export string-ci<?) 33315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 33325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 str1 ".toLowerCase() < " str2 ".toLowerCase()"))) 33335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 33345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isStringCILess(s1, s2) { 33355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s1.toLowerCase() < s2.toLowerCase(); 33365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 33375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export string-ci>?) 33385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 33395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 str1 ".toLowerCase() > " str2 ".toLowerCase()"))) 33405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 33415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isStringCIGreater(s1, s2) { 33425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s1.toLowerCase() > s2.toLowerCase(); 33435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 33445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export string-ci<=?) 33455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 33465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 str1 ".toLowerCase() <= " str2 ".toLowerCase()"))) 33475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 33485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isStringCILessEqual(s1, s2) { 33495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s1.toLowerCase() <= s2.toLowerCase(); 33505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 33515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export string-ci>=?) 33525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (type bool) 33535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 2 str1 ".toLowerCase() >= " str2 ".toLowerCase()"))) 33545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 33555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isStringCIGreaterEqual(s1, s2) { 33565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s1.toLowerCase() >= s2.toLowerCase(); 33575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 33585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 33605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (hole 3 s ".substring(" start ", " end ")"))) 33615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 33625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_substring(s, start, end) { 33635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s.substring(start, end); 33645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 33655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) 33675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 33685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_isSubstring_at(s1, s2, i) { 33695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s2 == s1.substring(i, i+ s2.length); 33705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 33715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 33735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (infix 0 #f "+" "''"))) 33745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 33755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_stringAppend() { 33765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "".concat.apply("", arguments); 33775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 33785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 33805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_string2list = sc_jsstring2list; 33815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t)) */ 33835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_list2string = sc_list2jsstring; 33845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 33865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (id))) 33875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 33885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_stringCopy(s) { 33895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return s; 33905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 33915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* there's no string-fill in the immutable version 33935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_stringFill(s, c) 33945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 33955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 33975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (postfix ".slice(1)"))) 33985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 33995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_keyword2string(o) { 34005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return o.slice(1); 34015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 34025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 34035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*** META ((export #t) 34045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (peephole (prefix "'\\u1E9D' +"))) 34055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 34065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function sc_string2keyword(o) { 34075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_KEYWORD_PREFIX + o; 34085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 34095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 34105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String.prototype.sc_toDisplayString = function() { 34115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.charAt(0) === sc_SYMBOL_PREFIX) 34125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // TODO: care for symbols with spaces (escape-chars symbols). 34135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.slice(1); 34145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (this.charAt(0) === sc_KEYWORD_PREFIX) 34155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ":" + this.slice(1); 34165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 34175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.toString(); 34185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 34195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 34205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String.prototype.sc_toWriteString = function() { 34215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.charAt(0) === sc_SYMBOL_PREFIX) 34225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // TODO: care for symbols with spaces (escape-chars symbols). 34235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.slice(1); 34245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (this.charAt(0) === sc_KEYWORD_PREFIX) 34255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ":" + this.slice(1); 34265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 34275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return '"' + sc_escapeWriteString(this) + '"'; 34285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 34295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* Exported Variables */ 34305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var BgL_testzd2boyerzd2; 34315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var BgL_nboyerzd2benchmarkzd2; 34325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var BgL_setupzd2boyerzd2; 34335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* End Exports */ 34345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 34355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var translate_term_nboyer; 34365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var translate_args_nboyer; 34375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var untranslate_term_nboyer; 34385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer; 34395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer; 34405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var translate_alist_nboyer; 34415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var apply_subst_nboyer; 34425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var apply_subst_lst_nboyer; 34435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var tautologyp_nboyer; 34445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var if_constructor_nboyer; 34455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var rewrite_count_nboyer; 34465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var rewrite_nboyer; 34475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var rewrite_args_nboyer; 34485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var unify_subst_nboyer; 34495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var one_way_unify1_nboyer; 34505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var false_term_nboyer; 34515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var true_term_nboyer; 34525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var trans_of_implies1_nboyer; 34535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var is_term_equal_nboyer; 34545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var is_term_member_nboyer; 34555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var const_nboyer; 34565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_const_3_nboyer; 34575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var sc_const_4_nboyer; 34585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 34595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_const_4_nboyer = (new sc_Pair("\u1E9Cimplies",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cu",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cu",(new sc_Pair("\u1E9Cw",null)))))),null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cw",null)))))),null))))))); 34605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_const_3_nboyer = sc_list((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccompile",(new sc_Pair("\u1E9Cform",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Ccodegen",(new sc_Pair((new sc_Pair("\u1E9Coptimize",(new sc_Pair("\u1E9Cform",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ceqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreaterp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clesseqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatereqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cboolean",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ciff",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ceven1",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Codd",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccountps-",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cpred",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccountps-loop",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cpred",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfact-",(new sc_Pair("\u1E9Ci",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfact-loop",(new sc_Pair("\u1E9Ci",(new sc_Pair((1),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdivides",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassume-true",(new sc_Pair("\u1E9Cvar",(new sc_Pair("\u1E9Calist",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cvar",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))),(new sc_Pair("\u1E9Calist",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassume-false",(new sc_Pair("\u1E9Cvar",(new sc_Pair("\u1E9Calist",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cvar",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))),(new sc_Pair("\u1E9Calist",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctautology-checker",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ctautologyp",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfalsify",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfalsify1",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cprime",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))),null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cprime1",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cx",null)))),null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair("\u1E9Cp",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))))),(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cb",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cc",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cplus-fringe",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Ca",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cpds",(new sc_Pair("\u1E9Cenvrn",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cpds",(new sc_Pair("\u1E9Cenvrn",null)))))))),(new sc_Pair("\u1E9Cenvrn",null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmc-flatten",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cb",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Cintersect",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ck",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Ck",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ck",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair("\u1E9Ck",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Csort-lp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus1",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair("\u1E9Ci",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cbase",null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ci",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cj",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cj",(new sc_Pair((1),null)))))),null)))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Ci",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus",(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Cbase",null)))))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Ca",null)))),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cw",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Cx",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cz",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cvalue",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cvalue",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnlistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csamefringe",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((1),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((1),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cz",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cw",(new sc_Pair((1),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatereqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((1),null)))))),(new sc_Pair(sc_list("\u1E9Cand", (new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))), (new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))), (new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Ca",null)))), (new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cb",null)))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cl",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair("\u1E9Cl",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdsort",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx1",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx2",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx3",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx4",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx5",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx6",(new sc_Pair("\u1E9Cx7",null)))))),null)))))),null)))))),null)))))),null)))))),null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((6),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cx7",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((2),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((2),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Cy",(new sc_Pair((2),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csigma",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Ci",null)))),null)))))),(new sc_Pair((2),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cz",null)))),null)))))),null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ci",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair("\u1E9Ca",null)))),null)))),(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair("\u1E9Cb",null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),(new sc_Pair("\u1E9Cz",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cassignedp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cb",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair((new sc_Pair("\u1E9Ccdr",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccdr",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cget",(new sc_Pair("\u1E9Cj",(new sc_Pair((new sc_Pair("\u1E9Cset",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cval",(new sc_Pair("\u1E9Cmem",null)))))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Ceqp",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair("\u1E9Cval",(new sc_Pair((new sc_Pair("\u1E9Cget",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Cmem",null)))))),null)))))))),null)))))))); 34615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (const_nboyer = (new sc_Pair((new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cc",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cd",null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cu",(new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cb",null)))),null)))))),null)))))))),null))))))))))); 34625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_nboyerzd2benchmarkzd2 = function() { 34635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var args = null; 34645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) { 34655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) args = sc_cons(arguments[sc_tmp], args); 34665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 34675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var n; 34685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((n = ((args === null)?(0):(args.car))), (BgL_setupzd2boyerzd2()), (BgL_runzd2benchmarkzd2(("nboyer"+(sc_number2string(n))), (1), function() { 34695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (BgL_testzd2boyerzd2(n)); 34705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, function(rewrites) { 34715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((sc_isNumber(rewrites))) 34725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (n) { 34735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case (0): 34745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (rewrites===(95024)); 34755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 34765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case (1): 34775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (rewrites===(591777)); 34785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 34795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case (2): 34805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (rewrites===(1813975)); 34815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 34825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case (3): 34835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (rewrites===(5375678)); 34845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 34855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case (4): 34865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (rewrites===(16445406)); 34875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 34885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case (5): 34895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (rewrites===(51507739)); 34905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 34915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 34925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 34935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 34945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 34955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 34965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 34975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }))); 34985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 34995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_setupzd2boyerzd2 = function() { 35005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 35015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 35025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_testzd2boyerzd2 = function() { 35035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 35045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 35055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) translate_term_nboyer = function(term) { 35065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var lst; 35075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), ((lst = (term.cdr)), ((lst === null)?null:(new sc_Pair((translate_term_nboyer((lst.car))), (translate_args_nboyer((lst.cdr)))))))))); 35085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 35095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) translate_args_nboyer = function(lst) { 35105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_lst_5; 35115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var term; 35125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((lst === null)?null:(new sc_Pair(((term = (lst.car)), (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr))))))), ((sc_lst_5 = (lst.cdr)), ((sc_lst_5 === null)?null:(new sc_Pair((translate_term_nboyer((sc_lst_5.car))), (translate_args_nboyer((sc_lst_5.cdr)))))))))); 35135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 35145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) untranslate_term_nboyer = function(term) { 35155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var optrOpnd; 35165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tail1131; 35175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var L1127; 35185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var falseHead1130; 35195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var symbol_record; 35205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!(term instanceof sc_Pair)) 35215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return term; 35225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 35235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 35245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (falseHead1130 = (new sc_Pair(null, null))); 35255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (L1127 = (term.cdr)); 35265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (tail1131 = falseHead1130); 35275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (!(L1127 === null)) { 35285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 35295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (tail1131.cdr = (new sc_Pair((untranslate_term_nboyer((L1127.car))), null))); 35305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (tail1131 = (tail1131.cdr)); 35315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (L1127 = (L1127.cdr)); 35325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 35335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 35345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (optrOpnd = (falseHead1130.cdr)); 35355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (new sc_Pair(((symbol_record = (term.car)), (symbol_record[(0)])), optrOpnd)); 35365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 35375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 35385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer = function(sym) { 35395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var r; 35405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var x; 35415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((x = (sc_assq(sym, BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer))), ((x!== false)?(x.cdr):((r = [sym, null]), (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = (new sc_Pair((new sc_Pair(sym, r)), BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer))), r))); 35425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 35435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null); 35445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) translate_alist_nboyer = function(alist) { 35455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_alist_6; 35465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var term; 35475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((alist === null)?null:(new sc_Pair((new sc_Pair((alist.car.car), ((term = (alist.car.cdr)), (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr))))))))), ((sc_alist_6 = (alist.cdr)), ((sc_alist_6 === null)?null:(new sc_Pair((new sc_Pair((sc_alist_6.car.car), (translate_term_nboyer((sc_alist_6.car.cdr))))), (translate_alist_nboyer((sc_alist_6.cdr)))))))))); 35485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 35495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) apply_subst_nboyer = function(alist, term) { 35505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var lst; 35515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var temp_temp; 35525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (!(term instanceof sc_Pair)?((temp_temp = (sc_assq(term, alist))), ((temp_temp!== false)?(temp_temp.cdr):term)):(new sc_Pair((term.car), ((lst = (term.cdr)), ((lst === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (lst.car))), (apply_subst_lst_nboyer(alist, (lst.cdr)))))))))); 35535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 35545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) apply_subst_lst_nboyer = function(alist, lst) { 35555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_lst_7; 35565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((lst === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (lst.car))), ((sc_lst_7 = (lst.cdr)), ((sc_lst_7 === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (sc_lst_7.car))), (apply_subst_lst_nboyer(alist, (sc_lst_7.cdr)))))))))); 35575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 35585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tautologyp_nboyer = function(sc_x_11, true_lst, false_lst) { 35595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp1125; 35605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var x; 35615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp1126; 35625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_x_8; 35635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_tmp1125_9; 35645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_tmp1126_10; 35655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_x_11; 35665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var true_lst; 35675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var false_lst; 35685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 35695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((((sc_tmp1126_10 = (is_term_equal_nboyer(sc_x_11, true_term_nboyer))), ((sc_tmp1126_10!== false)?sc_tmp1126_10:(is_term_member_nboyer(sc_x_11, true_lst))))!== false)) 35705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 35715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 35725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((((sc_tmp1125_9 = (is_term_equal_nboyer(sc_x_11, false_term_nboyer))), ((sc_tmp1125_9!== false)?sc_tmp1125_9:(is_term_member_nboyer(sc_x_11, false_lst))))!== false)) 35735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 35745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 35755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!(sc_x_11 instanceof sc_Pair)) 35765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 35775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 35785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (((sc_x_11.car)===if_constructor_nboyer)) 35795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((((sc_x_8 = (sc_x_11.cdr.car)), (tmp1126 = (is_term_equal_nboyer(sc_x_8, true_term_nboyer))), ((tmp1126!== false)?tmp1126:(is_term_member_nboyer(sc_x_8, true_lst))))!== false)) 35805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_x_11 = (sc_x_11.cdr.cdr.car)); 35815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 35825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((((x = (sc_x_11.cdr.car)), (tmp1125 = (is_term_equal_nboyer(x, false_term_nboyer))), ((tmp1125!== false)?tmp1125:(is_term_member_nboyer(x, false_lst))))!== false)) 35835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car)); 35845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 35855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (((tautologyp_nboyer((sc_x_11.cdr.cdr.car), (new sc_Pair((sc_x_11.cdr.car), true_lst)), false_lst))!== false)) 35865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 35875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (false_lst = (new sc_Pair((sc_x_11.cdr.car), false_lst))); 35885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car)); 35895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 35905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 35915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 35925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 35935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 35945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 35955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 35965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (if_constructor_nboyer = "\u1E9C*"); 35975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (rewrite_count_nboyer = (0)); 35985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rewrite_nboyer = function(term) { 35995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var term2; 36005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_term_12; 36015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var lst; 36025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var symbol_record; 36035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_lst_13; 36045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 36055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (++rewrite_count_nboyer); 36065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!(term instanceof sc_Pair)) 36075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return term; 36085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 36095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 36105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_term_12 = (new sc_Pair((term.car), ((sc_lst_13 = (term.cdr)), ((sc_lst_13 === null)?null:(new sc_Pair((rewrite_nboyer((sc_lst_13.car))), (rewrite_args_nboyer((sc_lst_13.cdr)))))))))); 36115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (lst = ((symbol_record = (term.car)), (symbol_record[(1)]))); 36125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 36135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((lst === null)) 36145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_term_12; 36155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 36165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((((term2 = ((lst.car).cdr.car)), (unify_subst_nboyer = null), (one_way_unify1_nboyer(sc_term_12, term2)))!== false)) 36175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (rewrite_nboyer((apply_subst_nboyer(unify_subst_nboyer, ((lst.car).cdr.cdr.car))))); 36185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 36195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (lst = (lst.cdr)); 36205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 36215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 36225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 36235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 36245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rewrite_args_nboyer = function(lst) { 36255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_lst_14; 36265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((lst === null)?null:(new sc_Pair((rewrite_nboyer((lst.car))), ((sc_lst_14 = (lst.cdr)), ((sc_lst_14 === null)?null:(new sc_Pair((rewrite_nboyer((sc_lst_14.car))), (rewrite_args_nboyer((sc_lst_14.cdr)))))))))); 36275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 36285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (unify_subst_nboyer = "\u1E9C*"); 36295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) one_way_unify1_nboyer = function(term1, term2) { 36305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var lst1; 36315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var lst2; 36325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var temp_temp; 36335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!(term2 instanceof sc_Pair)) 36345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 36355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (temp_temp = (sc_assq(term2, unify_subst_nboyer))); 36365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((temp_temp!== false)) 36375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (is_term_equal_nboyer(term1, (temp_temp.cdr))); 36385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 36395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((sc_isNumber(term2))) 36405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (sc_isEqual(term1, term2)); 36415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 36425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 36435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (unify_subst_nboyer = (new sc_Pair((new sc_Pair(term2, term1)), unify_subst_nboyer))); 36445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 36455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 36465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 36475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 36485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!(term1 instanceof sc_Pair)) 36495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 36505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 36515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (((term1.car)===(term2.car))) 36525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 36535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (lst1 = (term1.cdr)); 36545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (lst2 = (term2.cdr)); 36555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 36565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((lst1 === null)) 36575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (lst2 === null); 36585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 36595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((lst2 === null)) 36605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 36615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 36625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (((one_way_unify1_nboyer((lst1.car), (lst2.car)))!== false)) 36635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 36645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (lst1 = (lst1.cdr)); 36655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (lst2 = (lst2.cdr)); 36665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 36675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 36685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 36695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 36705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 36715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 36725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 36735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 36745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (false_term_nboyer = "\u1E9C*"); 36755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (true_term_nboyer = "\u1E9C*"); 36765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) trans_of_implies1_nboyer = function(n) { 36775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_n_15; 36785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((sc_isEqual(n, (1)))?(sc_list("\u1E9Cimplies", (0), (1))):(sc_list("\u1E9Cand", (sc_list("\u1E9Cimplies", (n-(1)), n)), ((sc_n_15 = (n-(1))), ((sc_isEqual(sc_n_15, (1)))?(sc_list("\u1E9Cimplies", (0), (1))):(sc_list("\u1E9Cand", (sc_list("\u1E9Cimplies", (sc_n_15-(1)), sc_n_15)), (trans_of_implies1_nboyer((sc_n_15-(1))))))))))); 36795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 36805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) is_term_equal_nboyer = function(x, y) { 36815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var lst1; 36825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var lst2; 36835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var r2; 36845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var r1; 36855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((x instanceof sc_Pair)) 36865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((y instanceof sc_Pair)) 36875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((((r1 = (x.car)), (r2 = (y.car)), (r1===r2))!== false)) 36885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 36895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (lst1 = (x.cdr)); 36905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (lst2 = (y.cdr)); 36915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 36925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((lst1 === null)) 36935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (lst2 === null); 36945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 36955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((lst2 === null)) 36965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 36975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 36985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (((is_term_equal_nboyer((lst1.car), (lst2.car)))!== false)) 36995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 37005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (lst1 = (lst1.cdr)); 37015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (lst2 = (lst2.cdr)); 37025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 37035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 37045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 37055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 37065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 37075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 37085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 37095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 37105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 37115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 37125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (sc_isEqual(x, y)); 37135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 37145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) is_term_member_nboyer = function(x, lst) { 37155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var x; 37165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var lst; 37175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 37185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((lst === null)) 37195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 37205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 37215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (((is_term_equal_nboyer(x, (lst.car)))!== false)) 37225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 37235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 37245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (lst = (lst.cdr)); 37255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 37265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 37275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_setupzd2boyerzd2 = function() { 37285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var symbol_record; 37295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var value; 37305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_symbolzd2record_16zd2; 37315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sym; 37325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_sym_17; 37335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var term; 37345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var lst; 37355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_term_18; 37365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_term_19; 37375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 37385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null); 37395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (if_constructor_nboyer = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer("\u1E9Cif"))); 37405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (false_term_nboyer = ((sc_term_19 = (new sc_Pair("\u1E9Cf",null))), (!(sc_term_19 instanceof sc_Pair)?sc_term_19:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_19.car))), (translate_args_nboyer((sc_term_19.cdr)))))))); 37415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (true_term_nboyer = ((sc_term_18 = (new sc_Pair("\u1E9Ct",null))), (!(sc_term_18 instanceof sc_Pair)?sc_term_18:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_18.car))), (translate_args_nboyer((sc_term_18.cdr)))))))); 37425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (lst = sc_const_3_nboyer); 37435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (!(lst === null)) { 37445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 37455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (term = (lst.car)); 37465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (((term instanceof sc_Pair)&&(((term.car)==="\u1E9Cequal")&&((term.cdr.car) instanceof sc_Pair)))) 37475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 37485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_sym_17 = ((term.cdr.car).car)); 37495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (value = (new sc_Pair((!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr)))))), ((sym = ((term.cdr.car).car)), (BgL_sc_symbolzd2record_16zd2 = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer(sym))), (BgL_sc_symbolzd2record_16zd2[(1)]))))); 37505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (symbol_record = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer(sc_sym_17))); 37515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (symbol_record[(1)] = value); 37525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 37535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 37545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_error("ADD-LEMMA did not like term: ", term)); 37555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (lst = (lst.cdr)); 37565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 37575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 37585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 37595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 37605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 37615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_testzd2boyerzd2 = function(n) { 37625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var optrOpnd; 37635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var term; 37645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_n_20; 37655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var answer; 37665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_term_21; 37675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_term_22; 37685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 37695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (rewrite_count_nboyer = (0)); 37705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (term = sc_const_4_nboyer); 37715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_n_20 = n); 37725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (!(sc_n_20=== 0)) { 37735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 37745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (term = (sc_list("\u1E9Cor", term, (new sc_Pair("\u1E9Cf",null))))); 37755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (--sc_n_20); 37765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 37775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 37785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_term_22 = term); 37795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!(sc_term_22 instanceof sc_Pair)) 37805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (optrOpnd = sc_term_22); 37815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 37825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (optrOpnd = (new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_22.car))), (translate_args_nboyer((sc_term_22.cdr)))))); 37835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_term_21 = (apply_subst_nboyer(((const_nboyer === null)?null:(new sc_Pair((new sc_Pair((const_nboyer.car.car), (translate_term_nboyer((const_nboyer.car.cdr))))), (translate_alist_nboyer((const_nboyer.cdr)))))), optrOpnd))); 37845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (answer = (tautologyp_nboyer((rewrite_nboyer(sc_term_21)), null, null))); 37855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_write(rewrite_count_nboyer)); 37865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_display(" rewrites")); 37875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_newline()); 37885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((answer!== false)) 37895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return rewrite_count_nboyer; 37905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 37915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 37925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 37935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 37945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 37955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* Exported Variables */ 37965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var BgL_parsezd2ze3nbzd2treesze3; 37975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var BgL_earleyzd2benchmarkzd2; 37985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var BgL_parsezd2ze3parsedzf3zc2; 37995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var test; 38005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var BgL_parsezd2ze3treesz31; 38015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var BgL_makezd2parserzd2; 38025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* End Exports */ 38035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 38045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var const_earley; 38055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 38065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (const_earley = (new sc_Pair((new sc_Pair("\u1E9Cs",(new sc_Pair((new sc_Pair("\u1E9Ca",null)),(new sc_Pair((new sc_Pair("\u1E9Cs",(new sc_Pair("\u1E9Cs",null)))),null)))))),null))); 38075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_makezd2parserzd2 = function(grammar, lexer) { 38085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var i; 38095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var parser_descr; 38105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var def_loop; 38115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nb_nts; 38125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var names; 38135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var steps; 38145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var predictors; 38155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var enders; 38165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var starters; 38175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nts; 38185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_names_1; 38195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_steps_2; 38205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_predictors_3; 38215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_enders_4; 38225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_starters_5; 38235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nb_confs; 38245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_defzd2loop_6zd2; 38255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_nbzd2nts_7zd2; 38265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_nts_8; 38275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_defzd2loop_9zd2; 38285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ind; 38295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 38305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ind = function(nt, sc_nts_10) { 38315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var i; 38325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 38335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (i = ((sc_nts_10.length)-(1))); 38345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 38355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((i>=(0))) 38365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((sc_isEqual((sc_nts_10[i]), nt))) 38375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return i; 38385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 38395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (--i); 38405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 38415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 38425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 38435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 38445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 38455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_nts_8 = ((BgL_sc_defzd2loop_9zd2 = function(defs, sc_nts_11) { 38465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rule_loop; 38475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var head; 38485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var def; 38495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, sc_nts_12) { 38505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nt; 38515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l; 38525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_nts_13; 38535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rule; 38545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((rules instanceof sc_Pair)) 38555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 38565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (rule = (rules.car)); 38575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = rule); 38585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_nts_13 = sc_nts_12); 38595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((l instanceof sc_Pair)) { 38605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 38615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (nt = (l.car)); 38625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (l.cdr)); 38635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_nts_13 = (((sc_member(nt, sc_nts_13))!== false)?sc_nts_13:(new sc_Pair(nt, sc_nts_13)))); 38645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 38655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 38665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (rule_loop((rules.cdr), sc_nts_13)); 38675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 38685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 38695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (BgL_sc_defzd2loop_9zd2((defs.cdr), sc_nts_12)); 38705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }), (rule_loop((def.cdr), (((sc_member(head, sc_nts_11))!== false)?sc_nts_11:(new sc_Pair(head, sc_nts_11)))))):(sc_list2vector((sc_reverse(sc_nts_11))))); 38715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }), (BgL_sc_defzd2loop_9zd2(grammar, null)))); 38725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_nbzd2nts_7zd2 = (sc_nts_8.length)); 38735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (nb_confs = (((BgL_sc_defzd2loop_6zd2 = function(defs, BgL_sc_nbzd2confs_14zd2) { 38745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rule_loop; 38755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var def; 38765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((defs instanceof sc_Pair)?((def = (defs.car)), (rule_loop = function(rules, BgL_sc_nbzd2confs_15zd2) { 38775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l; 38785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_nbzd2confs_16zd2; 38795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rule; 38805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((rules instanceof sc_Pair)) 38815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 38825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (rule = (rules.car)); 38835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = rule); 38845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_nbzd2confs_16zd2 = BgL_sc_nbzd2confs_15zd2); 38855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((l instanceof sc_Pair)) { 38865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 38875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (l.cdr)); 38885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (++BgL_sc_nbzd2confs_16zd2); 38895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 38905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 38915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (rule_loop((rules.cdr), (BgL_sc_nbzd2confs_16zd2+(1)))); 38925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 38935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 38945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (BgL_sc_defzd2loop_6zd2((defs.cdr), BgL_sc_nbzd2confs_15zd2)); 38955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }), (rule_loop((def.cdr), BgL_sc_nbzd2confs_14zd2))):BgL_sc_nbzd2confs_14zd2); 38965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }), (BgL_sc_defzd2loop_6zd2(grammar, (0))))+BgL_sc_nbzd2nts_7zd2)); 38975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_starters_5 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null))); 38985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_enders_4 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null))); 38995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_predictors_3 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null))); 39005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_steps_2 = (sc_makeVector(nb_confs, false))); 39015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_names_1 = (sc_makeVector(nb_confs, false))); 39025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (nts = sc_nts_8); 39035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (starters = sc_starters_5); 39045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (enders = sc_enders_4); 39055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (predictors = sc_predictors_3); 39065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (steps = sc_steps_2); 39075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (names = sc_names_1); 39085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (nb_nts = (sc_nts_8.length)); 39095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (i = (nb_nts-(1))); 39105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((i>=(0))) { 39115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 39125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_steps_2[i] = (i-nb_nts)); 39135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_names_1[i] = (sc_list((sc_nts_8[i]), (0)))); 39145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_enders_4[i] = (sc_list(i))); 39155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (--i); 39165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 39175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 39185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def_loop = function(defs, conf) { 39195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rule_loop; 39205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var head; 39215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var def; 39225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, conf, rule_num) { 39235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var i; 39245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_i_17; 39255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nt; 39265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l; 39275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_conf_18; 39285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_i_19; 39295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rule; 39305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((rules instanceof sc_Pair)) 39315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 39325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (rule = (rules.car)); 39335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (names[conf] = (sc_list(head, rule_num))); 39345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_i_19 = (ind(head, nts))); 39355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (starters[sc_i_19] = (new sc_Pair(conf, (starters[sc_i_19])))); 39365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = rule); 39375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_conf_18 = conf); 39385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((l instanceof sc_Pair)) { 39395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 39405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (nt = (l.car)); 39415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (steps[sc_conf_18] = (ind(nt, nts))); 39425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_i_17 = (ind(nt, nts))); 39435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (predictors[sc_i_17] = (new sc_Pair(sc_conf_18, (predictors[sc_i_17])))); 39445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (l.cdr)); 39455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (++sc_conf_18); 39465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 39475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 39485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (steps[sc_conf_18] = ((ind(head, nts))-nb_nts)); 39495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (i = (ind(head, nts))); 39505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (enders[i] = (new sc_Pair(sc_conf_18, (enders[i])))); 39515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (rule_loop((rules.cdr), (sc_conf_18+(1)), (rule_num+(1)))); 39525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 39535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 39545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (def_loop((defs.cdr), conf)); 39555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }), (rule_loop((def.cdr), conf, (1)))):undefined); 39565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 39575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (def_loop(grammar, (sc_nts_8.length))); 39585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (parser_descr = [lexer, sc_nts_8, sc_starters_5, sc_enders_4, sc_predictors_3, sc_steps_2, sc_names_1]); 39595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return function(input) { 39605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var optrOpnd; 39615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_optrOpnd_20; 39625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_optrOpnd_21; 39635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_optrOpnd_22; 39645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var loop1; 39655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_stateza2_23za2; 39665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var toks; 39675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_nbzd2nts_24zd2; 39685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_steps_25; 39695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_enders_26; 39705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var state_num; 39715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_statesza2_27za2; 39725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var states; 39735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var i; 39745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var conf; 39755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l; 39765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tok_nts; 39775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_i_28; 39785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_i_29; 39795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l1; 39805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l2; 39815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tok; 39825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tail1129; 39835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var L1125; 39845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var goal_enders; 39855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_statesza2_30za2; 39865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_nbzd2nts_31zd2; 39875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_nbzd2confs_32zd2; 39885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nb_toks; 39895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var goal_starters; 39905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_states_33; 39915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_nbzd2confs_34zd2; 39925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_nbzd2toks_35zd2; 39935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_toks_36; 39945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var falseHead1128; 39955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_names_37; 39965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_steps_38; 39975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_predictors_39; 39985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_enders_40; 39995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_starters_41; 40005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_nts_42; 40015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var lexer; 40025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_ind_43; 40035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var make_states; 40045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_confzd2setzd2getza2_44za2; 40055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var conf_set_merge_new_bang; 40065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var conf_set_adjoin; 40075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_confzd2setzd2adjoinza2_45za2; 40085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_confzd2setzd2adjoinza2za2_46z00; 40095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var conf_set_union; 40105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var forw; 40115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var is_parsed; 40125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var deriv_trees; 40135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_derivzd2treesza2_47z70; 40145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nb_deriv_trees; 40155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_nbzd2derivzd2treesza2_48za2; 40165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 40175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_ind_43 = function(nt, sc_nts_49) { 40185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var i; 40195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 40205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (i = ((sc_nts_49.length)-(1))); 40215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 40225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((i>=(0))) 40235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((sc_isEqual((sc_nts_49[i]), nt))) 40245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return i; 40255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 40265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (--i); 40275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 40285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 40295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 40305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 40315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 40325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) make_states = function(BgL_sc_nbzd2toks_50zd2, BgL_sc_nbzd2confs_51zd2) { 40335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var v; 40345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var i; 40355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_states_52; 40365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 40375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_states_52 = (sc_makeVector((BgL_sc_nbzd2toks_50zd2+(1)), false))); 40385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (i = BgL_sc_nbzd2toks_50zd2); 40395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((i>=(0))) { 40405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 40415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (v = (sc_makeVector((BgL_sc_nbzd2confs_51zd2+(1)), false))); 40425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (v[(0)] = (-1)); 40435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_states_52[i] = v); 40445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (--i); 40455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 40465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 40475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_states_52; 40485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 40495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 40505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_sc_confzd2setzd2getza2_44za2 = function(state, BgL_sc_statezd2num_53zd2, sc_conf_54) { 40515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var conf_set; 40525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_confzd2set_55zd2; 40535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((BgL_sc_confzd2set_55zd2 = (state[(sc_conf_54+(1))])), ((BgL_sc_confzd2set_55zd2!== false)?BgL_sc_confzd2set_55zd2:((conf_set = (sc_makeVector((BgL_sc_statezd2num_53zd2+(6)), false))), (conf_set[(1)] = (-3)), (conf_set[(2)] = (-1)), (conf_set[(3)] = (-1)), (conf_set[(4)] = (-1)), (state[(sc_conf_54+(1))] = conf_set), conf_set))); 40545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 40555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) conf_set_merge_new_bang = function(conf_set) { 40565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((conf_set[((conf_set[(1)])+(5))] = (conf_set[(4)])), (conf_set[(1)] = (conf_set[(3)])), (conf_set[(3)] = (-1)), (conf_set[(4)] = (-1))); 40575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 40585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) conf_set_adjoin = function(state, conf_set, sc_conf_56, i) { 40595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tail; 40605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((tail = (conf_set[(3)])), (conf_set[(i+(5))] = (-1)), (conf_set[(tail+(5))] = i), (conf_set[(3)] = i), ((tail<(0))?((conf_set[(0)] = (state[(0)])), (state[(0)] = sc_conf_56)):undefined)); 40615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 40625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_sc_confzd2setzd2adjoinza2_45za2 = function(sc_states_57, BgL_sc_statezd2num_58zd2, l, i) { 40635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var conf_set; 40645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_conf_59; 40655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l1; 40665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var state; 40675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 40685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (state = (sc_states_57[BgL_sc_statezd2num_58zd2])); 40695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l1 = l); 40705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((l1 instanceof sc_Pair)) { 40715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 40725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_conf_59 = (l1.car)); 40735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (conf_set = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_58zd2, sc_conf_59))); 40745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (((conf_set[(i+(5))])=== false)) 40755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 40765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (conf_set_adjoin(state, conf_set, sc_conf_59, i)); 40775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l1 = (l1.cdr)); 40785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 40795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 40805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l1 = (l1.cdr)); 40815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 40825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 40835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return undefined; 40845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 40855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 40865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_sc_confzd2setzd2adjoinza2za2_46z00 = function(sc_states_60, BgL_sc_statesza2_61za2, BgL_sc_statezd2num_62zd2, sc_conf_63, i) { 40875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_confzd2setza2_64z70; 40885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_stateza2_65za2; 40895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var conf_set; 40905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var state; 40915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((state = (sc_states_60[BgL_sc_statezd2num_62zd2])), ((((conf_set = (state[(sc_conf_63+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)?((BgL_sc_stateza2_65za2 = (BgL_sc_statesza2_61za2[BgL_sc_statezd2num_62zd2])), (BgL_sc_confzd2setza2_64z70 = (BgL_sc_confzd2setzd2getza2_44za2(BgL_sc_stateza2_65za2, BgL_sc_statezd2num_62zd2, sc_conf_63))), (((BgL_sc_confzd2setza2_64z70[(i+(5))])=== false)?(conf_set_adjoin(BgL_sc_stateza2_65za2, BgL_sc_confzd2setza2_64z70, sc_conf_63, i)):undefined), true):false)); 40925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 40935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) conf_set_union = function(state, conf_set, sc_conf_66, other_set) { 40945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var i; 40955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 40965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (i = (other_set[(2)])); 40975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((i>=(0))) { 40985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (((conf_set[(i+(5))])=== false)) 40995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (conf_set_adjoin(state, conf_set, sc_conf_66, i)); 41015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (i = (other_set[(i+(5))])); 41025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 41035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 41045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (i = (other_set[(i+(5))])); 41055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 41065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return undefined; 41075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 41085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 41095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) forw = function(sc_states_67, BgL_sc_statezd2num_68zd2, sc_starters_69, sc_enders_70, sc_predictors_71, sc_steps_72, sc_nts_73) { 41105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var next_set; 41115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var next; 41125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var conf_set; 41135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ender; 41145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l; 41155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var starter_set; 41165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var starter; 41175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_l_74; 41185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_loop1_75; 41195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var head; 41205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_confzd2set_76zd2; 41215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_statezd2num_77zd2; 41225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var state; 41235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_states_78; 41245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var preds; 41255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_confzd2set_79zd2; 41265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var step; 41275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_conf_80; 41285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_nbzd2nts_81zd2; 41295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_state_82; 41305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_state_82 = (sc_states_67[BgL_sc_statezd2num_68zd2])); 41325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_nbzd2nts_81zd2 = (sc_nts_73.length)); 41335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 41345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_conf_80 = (sc_state_82[(0)])); 41365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((sc_conf_80>=(0))) 41375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (step = (sc_steps_72[sc_conf_80])); 41395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_confzd2set_79zd2 = (sc_state_82[(sc_conf_80+(1))])); 41405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (head = (BgL_sc_confzd2set_79zd2[(4)])); 41415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_state_82[(0)] = (BgL_sc_confzd2set_79zd2[(0)])); 41425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (conf_set_merge_new_bang(BgL_sc_confzd2set_79zd2)); 41435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((step>=(0))) 41445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_l_74 = (sc_starters_69[step])); 41465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((sc_l_74 instanceof sc_Pair)) { 41475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (starter = (sc_l_74.car)); 41495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (starter_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, starter))); 41505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (((starter_set[(BgL_sc_statezd2num_68zd2+(5))])=== false)) 41515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (conf_set_adjoin(sc_state_82, starter_set, starter, BgL_sc_statezd2num_68zd2)); 41535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_l_74 = (sc_l_74.cdr)); 41545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 41555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 41565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_l_74 = (sc_l_74.cdr)); 41575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 41585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 41595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (sc_enders_70[step])); 41605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((l instanceof sc_Pair)) { 41615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (ender = (l.car)); 41635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((((conf_set = (sc_state_82[(ender+(1))])), ((conf_set!== false)?(conf_set[(BgL_sc_statezd2num_68zd2+(5))]):false))!== false)) 41645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (next = (sc_conf_80+(1))); 41665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (next_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, next))); 41675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (conf_set_union(sc_state_82, next_set, next, BgL_sc_confzd2set_79zd2)); 41685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (l.cdr)); 41695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 41705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 41715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (l.cdr)); 41725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 41735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 41745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 41755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 41765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (preds = (sc_predictors_71[(step+BgL_sc_nbzd2nts_81zd2)])); 41785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_states_78 = sc_states_67); 41795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (state = sc_state_82); 41805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_statezd2num_77zd2 = BgL_sc_statezd2num_68zd2); 41815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_confzd2set_76zd2 = BgL_sc_confzd2set_79zd2); 41825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_loop1_75 = function(l) { 41835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_state_83; 41845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_nextzd2set_84zd2; 41855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_next_85; 41865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var pred_set; 41875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var i; 41885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var pred; 41895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((l instanceof sc_Pair)) 41905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (pred = (l.car)); 41925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (i = head); 41935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((i>=(0))) { 41945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (pred_set = ((sc_state_83 = (sc_states_78[i])), (sc_state_83[(pred+(1))]))); 41965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((pred_set!== false)) 41975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_next_85 = (pred+(1))); 41995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_nextzd2set_84zd2 = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_77zd2, sc_next_85))); 42005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (conf_set_union(state, BgL_sc_nextzd2set_84zd2, sc_next_85, pred_set)); 42015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (i = (BgL_sc_confzd2set_76zd2[(i+(5))])); 42035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (sc_loop1_75((l.cdr))); 42065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 42085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return undefined; 42095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 42105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_loop1_75(preds)); 42115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 42145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return undefined; 42155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 42195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) is_parsed = function(nt, i, j, sc_nts_86, sc_enders_87, sc_states_88) { 42205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var conf_set; 42215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var state; 42225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_conf_89; 42235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l; 42245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_ntza2_90za2; 42255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 42265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_ntza2_90za2 = (sc_ind_43(nt, sc_nts_86))); 42275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((BgL_sc_ntza2_90za2!== false)) 42285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 42295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_nts_86.length); 42305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (sc_enders_87[BgL_sc_ntza2_90za2])); 42315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 42325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((l instanceof sc_Pair)) 42335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 42345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_conf_89 = (l.car)); 42355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((((state = (sc_states_88[j])), (conf_set = (state[(sc_conf_89+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)) 42365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 42375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 42385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (l.cdr)); 42395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 42415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 42425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 42455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 42465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 42485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) deriv_trees = function(sc_conf_91, i, j, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2) { 42495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_loop1_98; 42505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var prev; 42515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var name; 42525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((name = (sc_names_94[sc_conf_91])), ((name!== false)?((sc_conf_91<BgL_sc_nbzd2nts_97zd2)?(sc_list((sc_list(name, ((sc_toks_95[i]).car))))):(sc_list((sc_list(name))))):((prev = (sc_conf_91-(1))), (sc_loop1_98 = function(l1, l2) { 42535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var loop2; 42545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ender_set; 42555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var state; 42565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ender; 42575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l1; 42585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l2; 42595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 42605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((l1 instanceof sc_Pair)) 42615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 42625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (ender = (l1.car)); 42635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (ender_set = ((state = (sc_states_96[j])), (state[(ender+(1))]))); 42645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((ender_set!== false)) 42655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 42665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) loop2 = function(k, l2) { 42675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var loop3; 42685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ender_trees; 42695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var prev_trees; 42705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var conf_set; 42715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_state_99; 42725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var k; 42735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l2; 42745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 42755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((k>=(0))) 42765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (((k>=i)&&(((sc_state_99 = (sc_states_96[k])), (conf_set = (sc_state_99[(prev+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))) 42775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 42785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (prev_trees = (deriv_trees(prev, i, k, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2))); 42795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (ender_trees = (deriv_trees(ender, k, j, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2))); 42805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) loop3 = function(l3, l2) { 42815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l4; 42825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_l2_100; 42835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ender_tree; 42845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((l3 instanceof sc_Pair)) 42855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 42865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (ender_tree = (sc_list((l3.car)))); 42875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l4 = prev_trees); 42885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_l2_100 = l2); 42895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((l4 instanceof sc_Pair)) { 42905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 42915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_l2_100 = (new sc_Pair((sc_append((l4.car), ender_tree)), sc_l2_100))); 42925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l4 = (l4.cdr)); 42935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (loop3((l3.cdr), sc_l2_100)); 42965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 42975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 42985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (loop2((ender_set[(k+(5))]), l2)); 42995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 43005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (loop3(ender_trees, l2)); 43015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 43035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (k = (ender_set[(k+(5))])); 43045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 43055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (sc_loop1_98((l1.cdr), l2)); 43065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 43085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (loop2((ender_set[(2)]), l2)); 43095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 43115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l1 = (l1.cdr)); 43125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 43145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return l2; 43155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }), (sc_loop1_98((sc_enders_92[(sc_steps_93[prev])]), null))))); 43175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 43185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_sc_derivzd2treesza2_47z70 = function(nt, i, j, sc_nts_101, sc_enders_102, sc_steps_103, sc_names_104, sc_toks_105, sc_states_106) { 43195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var conf_set; 43205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var state; 43215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_conf_107; 43225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l; 43235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var trees; 43245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_nbzd2nts_108zd2; 43255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_ntza2_109za2; 43265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 43275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_ntza2_109za2 = (sc_ind_43(nt, sc_nts_101))); 43285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((BgL_sc_ntza2_109za2!== false)) 43295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 43305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_nbzd2nts_108zd2 = (sc_nts_101.length)); 43315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (sc_enders_102[BgL_sc_ntza2_109za2])); 43325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (trees = null); 43335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((l instanceof sc_Pair)) { 43345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 43355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_conf_107 = (l.car)); 43365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((((state = (sc_states_106[j])), (conf_set = (state[(sc_conf_107+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)) 43375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 43385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (l.cdr)); 43395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (trees = (sc_append((deriv_trees(sc_conf_107, i, j, sc_enders_102, sc_steps_103, sc_names_104, sc_toks_105, sc_states_106, BgL_sc_nbzd2nts_108zd2)), trees))); 43405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 43425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (l.cdr)); 43435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return trees; 43465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 43485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 43495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 43515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nb_deriv_trees = function(sc_conf_110, i, j, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2) { 43525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_loop1_116; 43535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tmp1124; 43545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var prev; 43555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((prev = (sc_conf_110-(1))), ((((tmp1124 = (sc_conf_110<BgL_sc_nbzd2nts_115zd2)), ((tmp1124!== false)?tmp1124:((sc_steps_112[prev])<(0))))!== false)?(1):((sc_loop1_116 = function(l, sc_n_118) { 43565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nb_ender_trees; 43575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nb_prev_trees; 43585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var conf_set; 43595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var state; 43605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var k; 43615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var n; 43625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ender_set; 43635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_state_117; 43645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ender; 43655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l; 43665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_n_118; 43675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 43685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((l instanceof sc_Pair)) 43695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 43705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (ender = (l.car)); 43715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (ender_set = ((sc_state_117 = (sc_states_114[j])), (sc_state_117[(ender+(1))]))); 43725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((ender_set!== false)) 43735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 43745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (k = (ender_set[(2)])); 43755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (n = sc_n_118); 43765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((k>=(0))) { 43775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (((k>=i)&&(((state = (sc_states_114[k])), (conf_set = (state[(prev+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))) 43785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 43795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (nb_prev_trees = (nb_deriv_trees(prev, i, k, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2))); 43805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (nb_ender_trees = (nb_deriv_trees(ender, k, j, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2))); 43815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (k = (ender_set[(k+(5))])); 43825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (n +=(nb_prev_trees*nb_ender_trees)); 43835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 43855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (k = (ender_set[(k+(5))])); 43865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (sc_loop1_116((l.cdr), n)); 43885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 43905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (l.cdr)); 43915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 43935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return sc_n_118; 43945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }), (sc_loop1_116((sc_enders_111[(sc_steps_112[prev])]), (0)))))); 43965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 43975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_sc_nbzd2derivzd2treesza2_48za2 = function(nt, i, j, sc_nts_119, sc_enders_120, sc_steps_121, sc_toks_122, sc_states_123) { 43985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var conf_set; 43995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var state; 44005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_conf_124; 44015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l; 44025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nb_trees; 44035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_nbzd2nts_125zd2; 44045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_ntza2_126za2; 44055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 44065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_ntza2_126za2 = (sc_ind_43(nt, sc_nts_119))); 44075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((BgL_sc_ntza2_126za2!== false)) 44085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 44095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_nbzd2nts_125zd2 = (sc_nts_119.length)); 44105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (sc_enders_120[BgL_sc_ntza2_126za2])); 44115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (nb_trees = (0)); 44125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((l instanceof sc_Pair)) { 44135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 44145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_conf_124 = (l.car)); 44155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((((state = (sc_states_123[j])), (conf_set = (state[(sc_conf_124+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)) 44165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 44175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (l.cdr)); 44185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (nb_trees = ((nb_deriv_trees(sc_conf_124, i, j, sc_enders_120, sc_steps_121, sc_toks_122, sc_states_123, BgL_sc_nbzd2nts_125zd2))+nb_trees)); 44195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 44205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 44215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (l.cdr)); 44225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 44235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 44245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return nb_trees; 44255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 44265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 44275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 44285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 44295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 44305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (lexer = (parser_descr[(0)])); 44315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_nts_42 = (parser_descr[(1)])); 44325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_starters_41 = (parser_descr[(2)])); 44335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_enders_40 = (parser_descr[(3)])); 44345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_predictors_39 = (parser_descr[(4)])); 44355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_steps_38 = (parser_descr[(5)])); 44365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_names_37 = (parser_descr[(6)])); 44375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (falseHead1128 = (new sc_Pair(null, null))); 44385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (L1125 = (lexer(input))); 44395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (tail1129 = falseHead1128); 44405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (!(L1125 === null)) { 44415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 44425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (tok = (L1125.car)); 44435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l1 = (tok.cdr)); 44445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l2 = null); 44455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((l1 instanceof sc_Pair)) { 44465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 44475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_i_29 = (sc_ind_43((l1.car), sc_nts_42))); 44485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((sc_i_29!== false)) 44495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 44505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l1 = (l1.cdr)); 44515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l2 = (new sc_Pair(sc_i_29, l2))); 44525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 44535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 44545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l1 = (l1.cdr)); 44555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 44565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 44575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_optrOpnd_22 = (new sc_Pair((tok.car), (sc_reverse(l2))))); 44585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_optrOpnd_21 = (new sc_Pair(sc_optrOpnd_22, null))); 44595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (tail1129.cdr = sc_optrOpnd_21); 44605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (tail1129 = (tail1129.cdr)); 44615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (L1125 = (L1125.cdr)); 44625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 44635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 44645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_optrOpnd_20 = (falseHead1128.cdr)); 44655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_toks_36 = (sc_list2vector(sc_optrOpnd_20))); 44665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_nbzd2toks_35zd2 = (sc_toks_36.length)); 44675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_nbzd2confs_34zd2 = (sc_steps_38.length)); 44685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_states_33 = (make_states(BgL_sc_nbzd2toks_35zd2, BgL_sc_nbzd2confs_34zd2))); 44695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (goal_starters = (sc_starters_41[(0)])); 44705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_confzd2setzd2adjoinza2_45za2(sc_states_33, (0), goal_starters, (0))); 44715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (forw(sc_states_33, (0), sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_nts_42)); 44725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_i_28 = (0)); 44735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((sc_i_28<BgL_sc_nbzd2toks_35zd2)) { 44745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 44755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (tok_nts = ((sc_toks_36[sc_i_28]).cdr)); 44765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_confzd2setzd2adjoinza2_45za2(sc_states_33, (sc_i_28+(1)), tok_nts, sc_i_28)); 44775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (forw(sc_states_33, (sc_i_28+(1)), sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_nts_42)); 44785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (++sc_i_28); 44795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 44805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 44815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (nb_toks = (sc_toks_36.length)); 44825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_nbzd2confs_32zd2 = (sc_steps_38.length)); 44835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_nbzd2nts_31zd2 = (sc_nts_42.length)); 44845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_statesza2_30za2 = (make_states(nb_toks, BgL_sc_nbzd2confs_32zd2))); 44855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (goal_enders = (sc_enders_40[(0)])); 44865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = goal_enders); 44875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((l instanceof sc_Pair)) { 44885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 44895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (conf = (l.car)); 44905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_33, BgL_sc_statesza2_30za2, nb_toks, conf, (0))); 44915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (l.cdr)); 44925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 44935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 44945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (i = nb_toks); 44955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((i>=(0))) { 44965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 44975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (states = sc_states_33); 44985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_statesza2_27za2 = BgL_sc_statesza2_30za2); 44995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (state_num = i); 45005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_enders_26 = sc_enders_40); 45015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_steps_25 = sc_steps_38); 45025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_nbzd2nts_24zd2 = BgL_sc_nbzd2nts_31zd2); 45035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (toks = sc_toks_36); 45045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_stateza2_23za2 = (BgL_sc_statesza2_30za2[i])); 45055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) loop1 = function() { 45065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_loop1_127; 45075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var prev; 45085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_statesza2_128za2; 45095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_states_129; 45105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var j; 45115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var i; 45125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_i_130; 45135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var head; 45145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var conf_set; 45155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_conf_131; 45165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 45175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_conf_131 = (BgL_sc_stateza2_23za2[(0)])); 45185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((sc_conf_131>=(0))) 45195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 45205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (conf_set = (BgL_sc_stateza2_23za2[(sc_conf_131+(1))])); 45215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (head = (conf_set[(4)])); 45225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_stateza2_23za2[(0)] = (conf_set[(0)])); 45235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (conf_set_merge_new_bang(conf_set)); 45245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_i_130 = head); 45255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((sc_i_130>=(0))) { 45265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 45275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (i = sc_i_130); 45285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (j = state_num); 45295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_states_129 = states); 45305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_statesza2_128za2 = BgL_sc_statesza2_27za2); 45315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (prev = (sc_conf_131-(1))); 45325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (((sc_conf_131>=BgL_sc_nbzd2nts_24zd2)&&((sc_steps_25[prev])>=(0)))) 45335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 45345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sc_loop1_127 = function(l) { 45355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var k; 45365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ender_set; 45375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var state; 45385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var ender; 45395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var l; 45405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (true) { 45415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((l instanceof sc_Pair)) 45425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 45435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (ender = (l.car)); 45445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (ender_set = ((state = (sc_states_129[j])), (state[(ender+(1))]))); 45455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((ender_set!== false)) 45465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 45475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (k = (ender_set[(2)])); 45485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while ((k>=(0))) { 45495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 45505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((k>=i)) 45515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (((BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, k, prev, i))!== false)) 45525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, j, ender, k)); 45535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (k = (ender_set[(k+(5))])); 45545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 45555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 45565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (sc_loop1_127((l.cdr))); 45575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 45585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 45595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (l = (l.cdr)); 45605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 45615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 45625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return undefined; 45635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 45645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 45655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_loop1_127((sc_enders_26[(sc_steps_25[prev])]))); 45665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 45675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (sc_i_130 = (conf_set[(sc_i_130+(5))])); 45685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 45695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 45705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (loop1()); 45715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 45725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 45735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return undefined; 45745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 45755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 45765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (loop1()); 45775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (--i); 45785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 45795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 45805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (optrOpnd = BgL_sc_statesza2_30za2); 45815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return [sc_nts_42, sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_names_37, sc_toks_36, optrOpnd, is_parsed, BgL_sc_derivzd2treesza2_47z70, BgL_sc_nbzd2derivzd2treesza2_48za2]; 45825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 45835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 45845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 45855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 45865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_parsezd2ze3parsedzf3zc2 = function(parse, nt, i, j) { 45875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var is_parsed; 45885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var states; 45895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var enders; 45905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nts; 45915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((nts = (parse[(0)])), (enders = (parse[(2)])), (states = (parse[(7)])), (is_parsed = (parse[(8)])), (is_parsed(nt, i, j, nts, enders, states))); 45925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 45935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_parsezd2ze3treesz31 = function(parse, nt, i, j) { 45945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_derivzd2treesza2_132z70; 45955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var states; 45965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var toks; 45975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var names; 45985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var steps; 45995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var enders; 46005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nts; 46015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((nts = (parse[(0)])), (enders = (parse[(2)])), (steps = (parse[(4)])), (names = (parse[(5)])), (toks = (parse[(6)])), (states = (parse[(7)])), (BgL_sc_derivzd2treesza2_132z70 = (parse[(9)])), (BgL_sc_derivzd2treesza2_132z70(nt, i, j, nts, enders, steps, names, toks, states))); 46025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 46035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_parsezd2ze3nbzd2treesze3 = function(parse, nt, i, j) { 46045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var BgL_sc_nbzd2derivzd2treesza2_133za2; 46055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var states; 46065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var toks; 46075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var steps; 46085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var enders; 46095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nts; 46105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((nts = (parse[(0)])), (enders = (parse[(2)])), (steps = (parse[(4)])), (toks = (parse[(6)])), (states = (parse[(7)])), (BgL_sc_nbzd2derivzd2treesza2_133za2 = (parse[(10)])), (BgL_sc_nbzd2derivzd2treesza2_133za2(nt, i, j, nts, enders, steps, toks, states))); 46115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 46125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) test = function(k) { 46135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var x; 46145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var p; 46155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((p = (BgL_makezd2parserzd2(const_earley, function(l) { 46165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var sc_x_134; 46175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var tail1134; 46185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var L1130; 46195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var falseHead1133; 46205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 46215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (falseHead1133 = (new sc_Pair(null, null))); 46225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (tail1134 = falseHead1133); 46235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (L1130 = l); 46245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (!(L1130 === null)) { 46255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 46265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (tail1134.cdr = (new sc_Pair(((sc_x_134 = (L1130.car)), (sc_list(sc_x_134, sc_x_134))), null))); 46275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (tail1134 = (tail1134.cdr)); 46285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (L1130 = (L1130.cdr)); 46295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 46305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 46315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (falseHead1133.cdr); 46325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 46335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }))), (x = (p((sc_vector2list((sc_makeVector(k, "\u1E9Ca"))))))), (sc_length((BgL_parsezd2ze3treesz31(x, "\u1E9Cs", (0), k))))); 46345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 46355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_earleyzd2benchmarkzd2 = function() { 46365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var args = null; 46375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) { 46385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) args = sc_cons(arguments[sc_tmp], args); 46395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 46405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var k; 46415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((k = ((args === null)?(7):(args.car))), (BgL_runzd2benchmarkzd2("earley", (1), function() { 46425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (test(k)); 46435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, function(result) { 46445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ((sc_display(result)), (sc_newline()), result == 132); 46455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }))); 46465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 46475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 46485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 46495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 46505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/************* END OF GENERATED CODE *************/ 46515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Invoke this function to run a benchmark. 46525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// The first argument is a string identifying the benchmark. 46535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// The second argument is the number of times to run the benchmark. 46545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// The third argument is a function that runs the benchmark. 46555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// The fourth argument is a unary function that warns if the result 46565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// returned by the benchmark is incorrect. 46575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 46585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Example: 46595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RunBenchmark("new Array()", 46605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 1, 46615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// function () { new Array(1000000); } 46625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// function (v) { 46635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// return (v instanceof Array) && (v.length == 1000000); 46645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// }); 46655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 46665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)SC_DEFAULT_OUT = new sc_GenericOutputPort(function(s) {}); 46675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)SC_ERROR_OUT = SC_DEFAULT_OUT; 46685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 46695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function RunBenchmark(name, count, run, warn) { 46705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var n = 0; n < count; ++n) { 46715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = run(); 46725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!warn(result)) { 46735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw new Error("Earley or Boyer did incorrect number of rewrites"); 46745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 46755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 46765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 46775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 46785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var BgL_runzd2benchmarkzd2 = RunBenchmark; 46795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 46805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)for (var i = 0; i < 4; ++i) { 46815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_earleyzd2benchmarkzd2(); 46825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BgL_nboyerzd2benchmarkzd2(); 46835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4684