1563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// This file is automatically generated by scheme2js, except for the 2563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// benchmark harness code at the beginning and end of the file. 3563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 4563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/************* GENERATED FILE - DO NOT EDIT *************/ 5563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/************* GENERATED FILE - DO NOT EDIT *************/ 6563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/************* GENERATED FILE - DO NOT EDIT *************/ 7563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/************* GENERATED FILE - DO NOT EDIT *************/ 8563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/************* GENERATED FILE - DO NOT EDIT *************/ 9563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/************* GENERATED FILE - DO NOT EDIT *************/ 10563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/************* GENERATED FILE - DO NOT EDIT *************/ 11563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/************* GENERATED FILE - DO NOT EDIT *************/ 12563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* 13563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * To use write/prints/... the default-output port has to be set first. 14563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * Simply setting SC_DEFAULT_OUT and SC_ERROR_OUT to the desired values 15563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * should do the trick. 16563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * In the following example the std-out and error-port are redirected to 17563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * a DIV. 18563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction initRuntime() { 19563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function escapeHTML(s) { 20563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = s; 21563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tmp = tmp.replace(/&/g, "&"); 22563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tmp = tmp.replace(/</g, "<"); 23563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tmp = tmp.replace(/>/g, ">"); 24563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tmp = tmp.replace(/ /g, " "); 25563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tmp = tmp.replace(/\n/g, "<br />"); 26563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tmp = tmp.replace(/\t/g, "  "); 27563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return tmp; 28563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 29563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 30563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 31563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark document.write("<div id='stdout'></div>"); 32563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SC_DEFAULT_OUT = new sc_GenericOutputPort( 33563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function(s) { 34563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var stdout = document.getElementById('stdout'); 35563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark stdout.innerHTML = stdout.innerHTML + escapeHTML(s); 36563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }); 37563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SC_ERROR_OUT = SC_DEFAULT_OUT; 38563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 39563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 40563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 41563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 42563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_print_debug() { 43563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_print.apply(null, arguments); 44563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 45563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export *js*)) */ 46563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_JS_GLOBALS = this; 47563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 48563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar __sc_LINE=-1; 49563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar __sc_FILE=""; 50563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 51563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 52563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_alert() { 53563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var len = arguments.length; 54563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var s = ""; 55563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var i; 56563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 57563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for( i = 0; i < len; i++ ) { 58563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark s += sc_toDisplayString(arguments[ i ]); 59563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 60563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 61563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return alert( s ); 62563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 63563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 64563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 65563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_typeof( x ) { 66563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return typeof x; 67563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 68563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 69563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 70563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_error() { 71563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var a = [sc_jsstring2symbol("*error*")]; 72563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < arguments.length; i++) { 73563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark a[i+1] = arguments[i]; 74563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 75563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw a; 76563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 77563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 78563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 79563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (prefix "throw "))) 80563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 81563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_raise(obj) { 82563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw obj; 83563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 84563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 85563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export with-handler-lambda)) */ 86563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_withHandlerLambda(handler, body) { 87563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark try { 88563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return body(); 89563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } catch(e) { 90563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!e._internalException) 91563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return handler(e); 92563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 93563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw e; 94563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 95563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 96563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 97563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_properties = new Object(); 98563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 99563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 100563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_putpropBang(sym, key, val) { 101563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ht = sc_properties[sym]; 102563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!ht) { 103563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ht = new Object(); 104563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_properties[sym] = ht; 105563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 106563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ht[key] = val; 107563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 108563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 109563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 110563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_getprop(sym, key) { 111563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ht = sc_properties[sym]; 112563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (ht) { 113563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (key in ht) 114563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ht[key]; 115563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 116563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 117563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else 118563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 119563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 120563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 121563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 122563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_rempropBang(sym, key) { 123563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ht = sc_properties[sym]; 124563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (ht) 125563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete ht[key]; 126563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 127563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 128563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 129563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_any2String(o) { 130563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return jsstring2string(sc_toDisplayString(o)); 131563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 132563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 133563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 134563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 2 2 "===")) 135563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 136563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 137563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isEqv(o1, o2) { 138563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (o1 === o2); 139563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 140563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 141563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 142563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 2 2 "===")) 143563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 144563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 145563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isEq(o1, o2) { 146563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (o1 === o2); 147563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 148563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 149563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 150563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 151563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 152563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isNumber(n) { 153563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (typeof n === "number"); 154563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 155563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 156563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 157563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 158563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 159563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isComplex(n) { 160563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_isNumber(n); 161563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 162563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 163563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 164563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 165563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 166563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isReal(n) { 167563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_isNumber(n); 168563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 169563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 170563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 171563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 172563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 173563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isRational(n) { 174563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_isReal(n); 175563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 176563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 177563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 178563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 179563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 180563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isInteger(n) { 181563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (parseInt(n) === n); 182563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 183563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 184563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 185563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 186563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ", false"))) 187563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 188563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// we don't have exact numbers... 189563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isExact(n) { 190563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 191563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 192563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 193563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 194563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ", true")) 195563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 196563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 197563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isInexact(n) { 198563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 199563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 200563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 201563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export = =fx =fl) 202563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 203563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 2 2 "==="))) 204563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 205563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_equal(x) { 206563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 1; i < arguments.length; i++) 207563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (x !== arguments[i]) 208563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 209563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 210563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 211563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 212563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export < <fx <fl) 213563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 214563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 2 2 "<"))) 215563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 216563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_less(x) { 217563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 1; i < arguments.length; i++) { 218563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (x >= arguments[i]) 219563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 220563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark x = arguments[i]; 221563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 222563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 223563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 224563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 225563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export > >fx >fl) 226563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 227563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 2 2 ">"))) 228563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 229563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_greater(x, y) { 230563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 1; i < arguments.length; i++) { 231563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (x <= arguments[i]) 232563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 233563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark x = arguments[i]; 234563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 235563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 236563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 237563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 238563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export <= <=fx <=fl) 239563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 240563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 2 2 "<="))) 241563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 242563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_lessEqual(x, y) { 243563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 1; i < arguments.length; i++) { 244563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (x > arguments[i]) 245563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 246563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark x = arguments[i]; 247563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 248563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 249563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 250563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 251563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export >= >=fl >=fx) 252563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 253563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 2 2 ">="))) 254563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 255563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_greaterEqual(x, y) { 256563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 1; i < arguments.length; i++) { 257563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (x < arguments[i]) 258563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 259563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark x = arguments[i]; 260563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 261563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 262563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 263563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 264563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 265563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 266563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix "=== 0"))) 267563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 268563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isZero(x) { 269563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (x === 0); 270563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 271563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 272563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 273563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 274563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix "> 0"))) 275563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 276563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isPositive(x) { 277563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (x > 0); 278563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 279563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 280563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 281563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 282563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix "< 0"))) 283563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 284563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isNegative(x) { 285563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (x < 0); 286563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 287563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 288563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 289563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 290563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix "%2===1"))) 291563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 292563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isOdd(x) { 293563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (x % 2 === 1); 294563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 295563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 296563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 297563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 298563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix "%2===0"))) 299563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 300563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isEven(x) { 301563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (x % 2 === 0); 302563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 303563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 304563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 305563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_max = Math.max; 306563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 307563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_min = Math.min; 308563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 309563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export + +fx +fl) 310563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 0 #f "+" "0"))) 311563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 312563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_plus() { 313563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sum = 0; 314563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < arguments.length; i++) 315563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sum += arguments[i]; 316563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sum; 317563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 318563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 319563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export * *fx *fl) 320563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 0 #f "*" "1"))) 321563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 322563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_multi() { 323563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var product = 1; 324563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < arguments.length; i++) 325563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark product *= arguments[i]; 326563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return product; 327563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 328563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 329563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export - -fx -fl) 330563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (minus))) 331563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 332563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_minus(x) { 333563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (arguments.length === 1) 334563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return -x; 335563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else { 336563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = x; 337563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 1; i < arguments.length; i++) 338563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res -= arguments[i]; 339563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 340563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 341563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 342563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 343563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export / /fl) 344563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (div))) 345563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 346563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_div(x) { 347563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (arguments.length === 1) 348563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return 1/x; 349563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else { 350563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = x; 351563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 1; i < arguments.length; i++) 352563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res /= arguments[i]; 353563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 354563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 355563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 356563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 357563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 358563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_abs = Math.abs; 359563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 360563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export quotient /fx) 361563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 "parseInt(" x "/" y ")"))) 362563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 363563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_quotient(x, y) { 364563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return parseInt(x / y); 365563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 366563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 367563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 368563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 2 2 "%"))) 369563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 370563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_remainder(x, y) { 371563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return x % y; 372563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 373563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 374563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 375563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (modulo))) 376563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 377563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_modulo(x, y) { 378563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var remainder = x % y; 379563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // if they don't have the same sign 380563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((remainder * y) < 0) 381563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return remainder + y; 382563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 383563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return remainder; 384563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 385563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 386563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_euclid_gcd(a, b) { 387563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var temp; 388563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (a === 0) return b; 389563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (b === 0) return a; 390563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (a < 0) {a = -a;}; 391563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (b < 0) {b = -b;}; 392563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (b > a) {temp = a; a = b; b = temp;}; 393563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 394563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark a %= b; 395563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if(a === 0) {return b;}; 396563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark b %= a; 397563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if(b === 0) {return a;}; 398563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 399563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return b; 400563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 401563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 402563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 403563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_gcd() { 404563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var gcd = 0; 405563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < arguments.length; i++) 406563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark gcd = sc_euclid_gcd(gcd, arguments[i]); 407563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return gcd; 408563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 409563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 410563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 411563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_lcm() { 412563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var lcm = 1; 413563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < arguments.length; i++) { 414563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var f = Math.round(arguments[i] / sc_euclid_gcd(arguments[i], lcm)); 415563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark lcm *= Math.abs(f); 416563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 417563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return lcm; 418563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 419563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 420563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// LIMITATION: numerator and denominator don't make sense in floating point world. 421563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark//var SC_MAX_DECIMALS = 1000000 422563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// 423563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// function sc_numerator(x) { 424563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// var rounded = Math.round(x * SC_MAX_DECIMALS); 425563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// return Math.round(rounded / sc_euclid_gcd(rounded, SC_MAX_DECIMALS)); 426563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// } 427563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 428563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// function sc_denominator(x) { 429563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// var rounded = Math.round(x * SC_MAX_DECIMALS); 430563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// return Math.round(SC_MAX_DECIMALS / sc_euclid_gcd(rounded, SC_MAX_DECIMALS)); 431563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// } 432563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 433563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 434563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_floor = Math.floor; 435563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 436563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_ceiling = Math.ceil; 437563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 438563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_truncate = parseInt; 439563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 440563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_round = Math.round; 441563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 442563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// LIMITATION: sc_rationalize doesn't make sense in a floating point world. 443563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 444563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 445563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_exp = Math.exp; 446563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 447563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_log = Math.log; 448563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 449563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_sin = Math.sin; 450563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 451563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_cos = Math.cos; 452563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 453563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_tan = Math.tan; 454563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 455563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_asin = Math.asin; 456563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 457563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_acos = Math.acos; 458563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 459563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_atan = Math.atan; 460563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 461563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 462563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_sqrt = Math.sqrt; 463563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 464563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_expt = Math.pow; 465563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 466563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// LIMITATION: we don't have complex numbers. 467563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// LIMITATION: the following functions are hence not implemented. 468563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// LIMITATION: make-rectangular, make-polar, real-part, imag-part, magnitude, angle 469563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// LIMITATION: 2 argument atan 470563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 471563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 472563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (id))) 473563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 474563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_exact2inexact(x) { 475563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return x; 476563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 477563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 478563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 479563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (id))) 480563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 481563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_inexact2exact(x) { 482563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return x; 483563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 484563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 485563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_number2jsstring(x, radix) { 486563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (radix) 487563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return x.toString(radix); 488563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 489563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return x.toString(); 490563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 491563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 492563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_jsstring2number(s, radix) { 493563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (s === "") return false; 494563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 495563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (radix) { 496563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var t = parseInt(s, radix); 497563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!t && t !== 0) return false; 498563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // verify that each char is in range. (parseInt ignores leading 499563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // white and trailing chars) 500563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var allowedChars = "01234567890abcdefghijklmnopqrstuvwxyz".substring(0, radix+1); 501563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((new RegExp("^["+allowedChars+"]*$", "i")).test(s)) 502563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return t; 503563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else return false; 504563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 505563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var t = +s; // does not ignore trailing chars. 506563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!t && t !== 0) return false; 507563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // simply verify that first char is not whitespace. 508563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var c = s.charAt(0); 509563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // if +c is 0, but the char is not "0", then we have a whitespace. 510563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (+c === 0 && c !== "0") return false; 511563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return t; 512563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 513563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 514563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 515563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 516563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 517563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (not))) 518563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 519563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_not(b) { 520563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return b === false; 521563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 522563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 523563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 524563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 525563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 526563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isBoolean(b) { 527563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (b === true) || (b === false); 528563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 529563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 530563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_Pair(car, cdr) { 531563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.car = car; 532563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.cdr = cdr; 533563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 534563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 535563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Pair.prototype.toString = function() { 536563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_toDisplayString(this); 537563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 538563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Pair.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) { 539563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var current = this; 540563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 541563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = "("; 542563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 543563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while(true) { 544563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += writeOrDisplay(current.car); 545563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (sc_isPair(current.cdr)) { 546563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += " "; 547563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark current = current.cdr; 548563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else if (current.cdr !== null) { 549563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += " . " + writeOrDisplay(current.cdr); 550563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 551563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else // current.cdr == null 552563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 553563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 554563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 555563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += ")"; 556563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 557563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 558563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 559563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Pair.prototype.sc_toDisplayString = function() { 560563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return this.sc_toWriteOrDisplayString(sc_toDisplayString); 561563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 562563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Pair.prototype.sc_toWriteString = function() { 563563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return this.sc_toWriteOrDisplayString(sc_toWriteString); 564563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 565563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// sc_Pair.prototype.sc_toWriteCircleString in IO.js 566563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 567563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 568563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 569563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix " instanceof sc_Pair"))) 570563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 571563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isPair(p) { 572563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (p instanceof sc_Pair); 573563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 574563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 575563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isPairEqual(p1, p2, comp) { 576563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (comp(p1.car, p2.car) && comp(p1.cdr, p2.cdr)); 577563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 578563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 579563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 580563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 "new sc_Pair(" car ", " cdr ")"))) 581563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 582563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cons(car, cdr) { 583563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Pair(car, cdr); 584563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 585563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 586563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export cons*)) */ 587563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_consStar() { 588563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = arguments[arguments.length - 1]; 589563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = arguments.length-2; i >= 0; i--) 590563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = new sc_Pair(arguments[i], res); 591563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 592563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 593563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 594563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 595563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".car"))) 596563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 597563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_car(p) { 598563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return p.car; 599563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 600563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 601563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 602563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".cdr"))) 603563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 604563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cdr(p) { 605563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return p.cdr; 606563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 607563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 608563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 609563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 p ".car = " val))) 610563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 611563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_setCarBang(p, val) { 612563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.car = val; 613563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 614563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 615563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 616563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 p ".cdr = " val))) 617563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 618563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_setCdrBang(p, val) { 619563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.cdr = val; 620563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 621563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 622563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 623563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".car.car"))) 624563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 625563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_caar(p) { return p.car.car; } 626563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 627563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".cdr.car"))) 628563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 629563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cadr(p) { return p.cdr.car; } 630563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 631563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".car.cdr"))) 632563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 633563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cdar(p) { return p.car.cdr; } 634563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 635563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".cdr.cdr"))) 636563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 637563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cddr(p) { return p.cdr.cdr; } 638563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 639563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".car.car.car"))) 640563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 641563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_caaar(p) { return p.car.car.car; } 642563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 643563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".car.cdr.car"))) 644563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 645563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cadar(p) { return p.car.cdr.car; } 646563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 647563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".cdr.car.car"))) 648563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 649563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_caadr(p) { return p.cdr.car.car; } 650563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 651563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".cdr.cdr.car"))) 652563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 653563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_caddr(p) { return p.cdr.cdr.car; } 654563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 655563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".car.car.cdr"))) 656563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 657563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cdaar(p) { return p.car.car.cdr; } 658563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 659563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".cdr.car.cdr"))) 660563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 661563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cdadr(p) { return p.cdr.car.cdr; } 662563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 663563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".car.cdr.cdr"))) 664563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 665563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cddar(p) { return p.car.cdr.cdr; } 666563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 667563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".cdr.cdr.cdr"))) 668563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 669563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cdddr(p) { return p.cdr.cdr.cdr; } 670563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 671563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".car.car.car.car"))) 672563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 673563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_caaaar(p) { return p.car.car.car.car; } 674563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 675563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".car.cdr.car.car"))) 676563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 677563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_caadar(p) { return p.car.cdr.car.car; } 678563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 679563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".cdr.car.car.car"))) 680563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 681563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_caaadr(p) { return p.cdr.car.car.car; } 682563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 683563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".cdr.cdr.car.car"))) 684563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 685563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_caaddr(p) { return p.cdr.cdr.car.car; } 686563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 687563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".car.car.car.cdr"))) 688563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 689563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cdaaar(p) { return p.car.car.car.cdr; } 690563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 691563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".car.cdr.car.cdr"))) 692563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 693563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cdadar(p) { return p.car.cdr.car.cdr; } 694563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 695563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".cdr.car.car.cdr"))) 696563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 697563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cdaadr(p) { return p.cdr.car.car.cdr; } 698563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 699563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".cdr.cdr.car.cdr"))) 700563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 701563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cdaddr(p) { return p.cdr.cdr.car.cdr; } 702563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 703563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".car.car.cdr.car"))) 704563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 705563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cadaar(p) { return p.car.car.cdr.car; } 706563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 707563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".car.cdr.cdr.car"))) 708563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 709563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_caddar(p) { return p.car.cdr.cdr.car; } 710563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 711563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".cdr.car.cdr.car"))) 712563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 713563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cadadr(p) { return p.cdr.car.cdr.car; } 714563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 715563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".cdr.cdr.cdr.car"))) 716563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 717563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cadddr(p) { return p.cdr.cdr.cdr.car; } 718563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 719563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".car.car.cdr.cdr"))) 720563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 721563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cddaar(p) { return p.car.car.cdr.cdr; } 722563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 723563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".car.cdr.cdr.cdr"))) 724563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 725563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cdddar(p) { return p.car.cdr.cdr.cdr; } 726563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 727563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".cdr.car.cdr.cdr"))) 728563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 729563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cddadr(p) { return p.cdr.car.cdr.cdr; } 730563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 731563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".cdr.cdr.cdr.cdr"))) 732563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 733563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_cddddr(p) { return p.cdr.cdr.cdr.cdr; } 734563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 735563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 736563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_lastPair(l) { 737563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!sc_isPair(l)) sc_error("sc_lastPair: pair expected"); 738563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = l; 739563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var cdr = l.cdr; 740563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (sc_isPair(cdr)) { 741563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = cdr; 742563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark cdr = res.cdr; 743563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 744563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 745563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 746563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 747563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 748563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 749563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix " === null"))) 750563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 751563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isNull(o) { 752563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (o === null); 753563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 754563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 755563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 756563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 757563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 758563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isList(o) { 759563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var rabbit; 760563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var turtle; 761563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 762563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var rabbit = o; 763563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var turtle = o; 764563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 765563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (rabbit === null || 766563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (rabbit instanceof sc_Pair && rabbit.cdr === null)) 767563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; // end of list 768563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if ((rabbit instanceof sc_Pair) && 769563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (rabbit.cdr instanceof sc_Pair)) { 770563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark rabbit = rabbit.cdr.cdr; 771563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark turtle = turtle.cdr; 772563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (rabbit === turtle) return false; // cycle 773563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else 774563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; // not pair 775563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 776563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 777563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 778563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 779563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_list() { 780563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = null; 781563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var a = arguments; 782563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = a.length-1; i >= 0; i--) 783563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = new sc_Pair(a[i], res); 784563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 785563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 786563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 787563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 788563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_iota(num, init) { 789563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = null; 790563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!init) init = 0; 791563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = num - 1; i >= 0; i--) 792563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = new sc_Pair(i + init, res); 793563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 794563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 795563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 796563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 797563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_makeList(nbEls, fill) { 798563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = null; 799563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < nbEls; i++) 800563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = new sc_Pair(fill, res); 801563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 802563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 803563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 804563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 805563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_length(l) { 806563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = 0; 807563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l !== null) { 808563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res++; 809563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l = l.cdr; 810563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 811563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 812563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 813563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 814563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 815563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_remq(o, l) { 816563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var dummy = { cdr : null }; 817563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tail = dummy; 818563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l !== null) { 819563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (l.car !== o) { 820563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tail.cdr = sc_cons(l.car, null); 821563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tail = tail.cdr; 822563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 823563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l = l.cdr; 824563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 825563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return dummy.cdr; 826563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 827563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 828563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 829563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_remqBang(o, l) { 830563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var dummy = { cdr : null }; 831563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tail = dummy; 832563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var needsAssig = true; 833563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l !== null) { 834563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (l.car === o) { 835563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark needsAssig = true; 836563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 837563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (needsAssig) { 838563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tail.cdr = l; 839563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark needsAssig = false; 840563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 841563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tail = l; 842563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 843563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l = l.cdr; 844563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 845563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tail.cdr = null; 846563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return dummy.cdr; 847563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 848563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 849563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 850563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_delete(o, l) { 851563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var dummy = { cdr : null }; 852563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tail = dummy; 853563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l !== null) { 854563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!sc_isEqual(l.car, o)) { 855563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tail.cdr = sc_cons(l.car, null); 856563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tail = tail.cdr; 857563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 858563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l = l.cdr; 859563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 860563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return dummy.cdr; 861563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 862563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 863563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 864563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_deleteBang(o, l) { 865563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var dummy = { cdr : null }; 866563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tail = dummy; 867563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var needsAssig = true; 868563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l !== null) { 869563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (sc_isEqual(l.car, o)) { 870563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark needsAssig = true; 871563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 872563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (needsAssig) { 873563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tail.cdr = l; 874563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark needsAssig = false; 875563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 876563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tail = l; 877563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 878563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l = l.cdr; 879563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 880563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tail.cdr = null; 881563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return dummy.cdr; 882563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 883563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 884563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_reverseAppendBang(l1, l2) { 885563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = l2; 886563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l1 !== null) { 887563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = res; 888563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = l1; 889563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l1 = l1.cdr; 890563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res.cdr = tmp; 891563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 892563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 893563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 894563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 895563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_dualAppend(l1, l2) { 896563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (l1 === null) return l2; 897563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (l2 === null) return l1; 898563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var rev = sc_reverse(l1); 899563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_reverseAppendBang(rev, l2); 900563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 901563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 902563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 903563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_append() { 904563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (arguments.length === 0) 905563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return null; 906563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = arguments[arguments.length - 1]; 907563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = arguments.length - 2; i >= 0; i--) 908563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = sc_dualAppend(arguments[i], res); 909563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 910563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 911563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 912563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_dualAppendBang(l1, l2) { 913563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (l1 === null) return l2; 914563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (l2 === null) return l1; 915563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = l1; 916563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (tmp.cdr !== null) tmp=tmp.cdr; 917563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tmp.cdr = l2; 918563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return l1; 919563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 920563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 921563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 922563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_appendBang() { 923563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = null; 924563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < arguments.length; i++) 925563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = sc_dualAppendBang(res, arguments[i]); 926563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 927563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 928563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 929563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 930563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_reverse(l1) { 931563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = null; 932563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l1 !== null) { 933563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = sc_cons(l1.car, res); 934563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l1 = l1.cdr; 935563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 936563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 937563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 938563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 939563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 940563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_reverseBang(l) { 941563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_reverseAppendBang(l, null); 942563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 943563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 944563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 945563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_listTail(l, k) { 946563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = l; 947563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < k; i++) { 948563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = res.cdr; 949563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 950563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 951563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 952563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 953563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 954563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_listRef(l, k) { 955563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_listTail(l, k).car; 956563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 957563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 958563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* // unoptimized generic versions 959563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_memX(o, l, comp) { 960563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l != null) { 961563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (comp(l.car, o)) 962563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return l; 963563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l = l.cdr; 964563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 965563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 966563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 967563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_memq(o, l) { return sc_memX(o, l, sc_isEq); } 968563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_memv(o, l) { return sc_memX(o, l, sc_isEqv); } 969563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_member(o, l) { return sc_memX(o, l, sc_isEqual); } 970563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 971563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 972563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* optimized versions */ 973563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 974563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_memq(o, l) { 975563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l !== null) { 976563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (l.car === o) 977563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return l; 978563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l = l.cdr; 979563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 980563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 981563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 982563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 983563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_memv(o, l) { 984563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l !== null) { 985563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (l.car === o) 986563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return l; 987563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l = l.cdr; 988563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 989563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 990563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 991563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 992563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_member(o, l) { 993563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l !== null) { 994563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (sc_isEqual(l.car,o)) 995563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return l; 996563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l = l.cdr; 997563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 998563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 999563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1000563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1001563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* // generic unoptimized versions 1002563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_assX(o, al, comp) { 1003563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (al != null) { 1004563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (comp(al.car.car, o)) 1005563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return al.car; 1006563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark al = al.cdr; 1007563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1008563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 1009563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1010563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_assq(o, al) { return sc_assX(o, al, sc_isEq); } 1011563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_assv(o, al) { return sc_assX(o, al, sc_isEqv); } 1012563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_assoc(o, al) { return sc_assX(o, al, sc_isEqual); } 1013563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1014563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// optimized versions 1015563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1016563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_assq(o, al) { 1017563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (al !== null) { 1018563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (al.car.car === o) 1019563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return al.car; 1020563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark al = al.cdr; 1021563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1022563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 1023563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1024563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1025563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_assv(o, al) { 1026563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (al !== null) { 1027563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (al.car.car === o) 1028563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return al.car; 1029563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark al = al.cdr; 1030563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1031563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 1032563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1033563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1034563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_assoc(o, al) { 1035563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (al !== null) { 1036563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (sc_isEqual(al.car.car, o)) 1037563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return al.car; 1038563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark al = al.cdr; 1039563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1040563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 1041563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1042563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1043563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* can be used for mutable strings and characters */ 1044563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharStringEqual(cs1, cs2) { return cs1.val === cs2.val; } 1045563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharStringLess(cs1, cs2) { return cs1.val < cs2.val; } 1046563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharStringGreater(cs1, cs2) { return cs1.val > cs2.val; } 1047563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharStringLessEqual(cs1, cs2) { return cs1.val <= cs2.val; } 1048563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharStringGreaterEqual(cs1, cs2) { return cs1.val >= cs2.val; } 1049563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharStringCIEqual(cs1, cs2) 1050563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { return cs1.val.toLowerCase() === cs2.val.toLowerCase(); } 1051563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharStringCILess(cs1, cs2) 1052563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { return cs1.val.toLowerCase() < cs2.val.toLowerCase(); } 1053563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharStringCIGreater(cs1, cs2) 1054563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { return cs1.val.toLowerCase() > cs2.val.toLowerCase(); } 1055563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharStringCILessEqual(cs1, cs2) 1056563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { return cs1.val.toLowerCase() <= cs2.val.toLowerCase(); } 1057563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharStringCIGreaterEqual(cs1, cs2) 1058563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { return cs1.val.toLowerCase() >= cs2.val.toLowerCase(); } 1059563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1060563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1061563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1062563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1063563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_Char(c) { 1064563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var cached = sc_Char.lazy[c]; 1065563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (cached) 1066563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return cached; 1067563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.val = c; 1068563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_Char.lazy[c] = this; 1069563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // add return, so FF does not complain. 1070563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return undefined; 1071563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1072563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Char.lazy = new Object(); 1073563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// thanks to Eric 1074563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Char.char2readable = { 1075563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\000": "#\\null", 1076563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\007": "#\\bell", 1077563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\010": "#\\backspace", 1078563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\011": "#\\tab", 1079563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\012": "#\\newline", 1080563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\014": "#\\page", 1081563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\015": "#\\return", 1082563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\033": "#\\escape", 1083563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\040": "#\\space", 1084563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\177": "#\\delete", 1085563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1086563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark /* poeticless names */ 1087563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\001": "#\\soh", 1088563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\002": "#\\stx", 1089563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\003": "#\\etx", 1090563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\004": "#\\eot", 1091563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\005": "#\\enq", 1092563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\006": "#\\ack", 1093563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1094563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\013": "#\\vt", 1095563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\016": "#\\so", 1096563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\017": "#\\si", 1097563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1098563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\020": "#\\dle", 1099563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\021": "#\\dc1", 1100563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\022": "#\\dc2", 1101563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\023": "#\\dc3", 1102563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\024": "#\\dc4", 1103563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\025": "#\\nak", 1104563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\026": "#\\syn", 1105563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\027": "#\\etb", 1106563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1107563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\030": "#\\can", 1108563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\031": "#\\em", 1109563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\032": "#\\sub", 1110563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\033": "#\\esc", 1111563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\034": "#\\fs", 1112563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\035": "#\\gs", 1113563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\036": "#\\rs", 1114563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "\037": "#\\us"}; 1115563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1116563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Char.readable2char = { 1117563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "null": "\000", 1118563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "bell": "\007", 1119563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "backspace": "\010", 1120563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "tab": "\011", 1121563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "newline": "\012", 1122563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "page": "\014", 1123563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "return": "\015", 1124563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "escape": "\033", 1125563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "space": "\040", 1126563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "delete": "\000", 1127563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "soh": "\001", 1128563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "stx": "\002", 1129563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "etx": "\003", 1130563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "eot": "\004", 1131563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "enq": "\005", 1132563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "ack": "\006", 1133563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "bel": "\007", 1134563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "bs": "\010", 1135563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "ht": "\011", 1136563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "nl": "\012", 1137563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "vt": "\013", 1138563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "np": "\014", 1139563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "cr": "\015", 1140563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "so": "\016", 1141563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "si": "\017", 1142563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "dle": "\020", 1143563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "dc1": "\021", 1144563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "dc2": "\022", 1145563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "dc3": "\023", 1146563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "dc4": "\024", 1147563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "nak": "\025", 1148563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "syn": "\026", 1149563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "etb": "\027", 1150563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "can": "\030", 1151563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "em": "\031", 1152563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "sub": "\032", 1153563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "esc": "\033", 1154563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "fs": "\034", 1155563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "gs": "\035", 1156563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "rs": "\036", 1157563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "us": "\037", 1158563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "sp": "\040", 1159563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "del": "\177"}; 1160563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1161563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Char.prototype.toString = function() { 1162563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return this.val; 1163563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 1164563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// sc_toDisplayString == toString 1165563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Char.prototype.sc_toWriteString = function() { 1166563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var entry = sc_Char.char2readable[this.val]; 1167563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (entry) 1168563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return entry; 1169563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 1170563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "#\\" + this.val; 1171563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 1172563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1173563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1174563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1175563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix "instanceof sc_Char"))) 1176563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1177563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isChar(c) { 1178563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (c instanceof sc_Char); 1179563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1180563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1181563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export char=?) 1182563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1183563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 c1 ".val === " c2 ".val"))) 1184563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1185563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_isCharEqual = sc_isCharStringEqual; 1186563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export char<?) 1187563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1188563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 c1 ".val < " c2 ".val"))) 1189563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1190563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_isCharLess = sc_isCharStringLess; 1191563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export char>?) 1192563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1193563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 c1 ".val > " c2 ".val"))) 1194563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1195563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_isCharGreater = sc_isCharStringGreater; 1196563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export char<=?) 1197563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1198563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 c1 ".val <= " c2 ".val"))) 1199563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1200563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_isCharLessEqual = sc_isCharStringLessEqual; 1201563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export char>=?) 1202563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1203563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 c1 ".val >= " c2 ".val"))) 1204563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1205563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_isCharGreaterEqual = sc_isCharStringGreaterEqual; 1206563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export char-ci=?) 1207563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1208563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 c1 ".val.toLowerCase() === " c2 ".val.toLowerCase()"))) 1209563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1210563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_isCharCIEqual = sc_isCharStringCIEqual; 1211563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export char-ci<?) 1212563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1213563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 c1 ".val.toLowerCase() < " c2 ".val.toLowerCase()"))) 1214563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1215563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_isCharCILess = sc_isCharStringCILess; 1216563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export char-ci>?) 1217563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1218563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 c1 ".val.toLowerCase() > " c2 ".val.toLowerCase()"))) 1219563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1220563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_isCharCIGreater = sc_isCharStringCIGreater; 1221563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export char-ci<=?) 1222563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1223563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 c1 ".val.toLowerCase() <= " c2 ".val.toLowerCase()"))) 1224563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1225563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_isCharCILessEqual = sc_isCharStringCILessEqual; 1226563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export char-ci>=?) 1227563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1228563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 c1 ".val.toLowerCase() >= " c2 ".val.toLowerCase()"))) 1229563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1230563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_isCharCIGreaterEqual = sc_isCharStringCIGreaterEqual; 1231563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1232563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar SC_NUMBER_CLASS = "0123456789"; 1233563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar SC_WHITESPACE_CLASS = ' \r\n\t\f'; 1234563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar SC_LOWER_CLASS = 'abcdefghijklmnopqrstuvwxyz'; 1235563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar SC_UPPER_CLASS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 1236563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1237563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharOfClass(c, cl) { return (cl.indexOf(c) != -1); } 1238563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1239563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 1240563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1241563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharAlphabetic(c) 1242563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { return sc_isCharOfClass(c.val, SC_LOWER_CLASS) || 1243563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_isCharOfClass(c.val, SC_UPPER_CLASS); } 1244563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1245563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1246563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 1 "SC_NUMBER_CLASS.indexOf(" c ".val) != -1"))) 1247563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1248563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharNumeric(c) 1249563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { return sc_isCharOfClass(c.val, SC_NUMBER_CLASS); } 1250563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1251563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 1252563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1253563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharWhitespace(c) { 1254563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = c.val; 1255563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return tmp === " " || tmp === "\r" || tmp === "\n" || tmp === "\t" || tmp === "\f"; 1256563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1257563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1258563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1259563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 1 "SC_UPPER_CLASS.indexOf(" c ".val) != -1"))) 1260563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1261563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharUpperCase(c) 1262563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { return sc_isCharOfClass(c.val, SC_UPPER_CLASS); } 1263563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1264563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1265563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 1 "SC_LOWER_CLASS.indexOf(" c ".val) != -1"))) 1266563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1267563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharLowerCase(c) 1268563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { return sc_isCharOfClass(c.val, SC_LOWER_CLASS); } 1269563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1270563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1271563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".val.charCodeAt(0)"))) 1272563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1273563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_char2integer(c) 1274563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { return c.val.charCodeAt(0); } 1275563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1276563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 1 "new sc_Char(String.fromCharCode(" n "))"))) 1277563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1278563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_integer2char(n) 1279563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { return new sc_Char(String.fromCharCode(n)); } 1280563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1281563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1282563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 1 "new sc_Char(" c ".val.toUpperCase())"))) 1283563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1284563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_charUpcase(c) 1285563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { return new sc_Char(c.val.toUpperCase()); } 1286563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1287563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 1 "new sc_Char(" c ".val.toLowerCase())"))) 1288563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1289563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_charDowncase(c) 1290563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { return new sc_Char(c.val.toLowerCase()); } 1291563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1292563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_makeJSStringOfLength(k, c) { 1293563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var fill; 1294563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (c === undefined) 1295563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark fill = " "; 1296563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 1297563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark fill = c; 1298563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = ""; 1299563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var len = 1; 1300563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // every round doubles the size of fill. 1301563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (k >= len) { 1302563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (k & len) 1303563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = res.concat(fill); 1304563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark fill = fill.concat(fill); 1305563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark len *= 2; 1306563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1307563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 1308563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1309563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1310563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_makejsString(k, c) { 1311563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var fill; 1312563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (c) 1313563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark fill = c.val; 1314563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 1315563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark fill = " "; 1316563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_makeJSStringOfLength(k, fill); 1317563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1318563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1319563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_jsstring2list(s) { 1320563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = null; 1321563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = s.length - 1; i >= 0; i--) 1322563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = sc_cons(new sc_Char(s.charAt(i)), res); 1323563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 1324563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1325563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1326563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_list2jsstring(l) { 1327563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var a = new Array(); 1328563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while(l !== null) { 1329563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark a.push(l.car.val); 1330563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l = l.cdr; 1331563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1332563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "".concat.apply("", a); 1333563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1334563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1335563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_Vector = Array; 1336563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1337563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Vector.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) { 1338563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (this.length === 0) return "#()"; 1339563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1340563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = "#(" + writeOrDisplay(this[0]); 1341563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 1; i < this.length; i++) 1342563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += " " + writeOrDisplay(this[i]); 1343563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += ")"; 1344563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 1345563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 1346563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Vector.prototype.sc_toDisplayString = function() { 1347563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return this.sc_toWriteOrDisplayString(sc_toDisplayString); 1348563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 1349563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Vector.prototype.sc_toWriteString = function() { 1350563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return this.sc_toWriteOrDisplayString(sc_toWriteString); 1351563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 1352563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1353563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export vector? array?) 1354563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1355563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix " instanceof sc_Vector"))) 1356563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1357563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isVector(v) { 1358563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (v instanceof sc_Vector); 1359563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1360563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1361563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// only applies to vectors 1362563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isVectorEqual(v1, v2, comp) { 1363563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (v1.length !== v2.length) return false; 1364563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < v1.length; i++) 1365563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!comp(v1[i], v2[i])) return false; 1366563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 1367563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1368563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1369563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export make-vector make-array)) */ 1370563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_makeVector(size, fill) { 1371563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var a = new sc_Vector(size); 1372563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (fill !== undefined) 1373563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_vectorFillBang(a, fill); 1374563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return a; 1375563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1376563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1377563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export vector array) 1378563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (vector))) 1379563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1380563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_vector() { 1381563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var a = new sc_Vector(); 1382563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < arguments.length; i++) 1383563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark a.push(arguments[i]); 1384563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return a; 1385563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1386563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1387563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export vector-length array-length) 1388563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".length"))) 1389563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1390563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_vectorLength(v) { 1391563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return v.length; 1392563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1393563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1394563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export vector-ref array-ref) 1395563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 v "[" pos "]"))) 1396563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1397563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_vectorRef(v, pos) { 1398563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return v[pos]; 1399563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1400563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1401563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export vector-set! array-set!) 1402563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 3 v "[" pos "] = " val))) 1403563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1404563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_vectorSetBang(v, pos, val) { 1405563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark v[pos] = val; 1406563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1407563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1408563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export vector->list array->list)) */ 1409563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_vector2list(a) { 1410563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = null; 1411563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = a.length-1; i >= 0; i--) 1412563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = sc_cons(a[i], res); 1413563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 1414563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1415563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1416563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export list->vector list->array)) */ 1417563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_list2vector(l) { 1418563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var a = new sc_Vector(); 1419563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while(l !== null) { 1420563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark a.push(l.car); 1421563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l = l.cdr; 1422563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1423563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return a; 1424563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1425563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1426563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export vector-fill! array-fill!)) */ 1427563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_vectorFillBang(a, fill) { 1428563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < a.length; i++) 1429563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark a[i] = fill; 1430563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1431563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1432563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1433563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1434563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_copyVector(a, len) { 1435563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (len <= a.length) 1436563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return a.slice(0, len); 1437563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else { 1438563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = a.concat(); 1439563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tmp.length = len; 1440563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return tmp; 1441563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1442563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1443563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1444563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1445563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 3 a ".slice(" start "," end ")"))) 1446563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1447563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_vectorCopy(a, start, end) { 1448563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return a.slice(start, end); 1449563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1450563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1451563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1452563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_vectorCopyBang(target, tstart, source, sstart, send) { 1453563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!sstart) sstart = 0; 1454563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!send) send = source.length; 1455563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1456563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // if target == source we don't want to overwrite not yet copied elements. 1457563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (tstart <= sstart) { 1458563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = tstart, j = sstart; j < send; i++, j++) { 1459563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark target[i] = source[j]; 1460563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1461563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 1462563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var diff = send - sstart; 1463563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = tstart + diff - 1, j = send - 1; 1464563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark j >= sstart; 1465563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark i--, j--) { 1466563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark target[i] = source[j]; 1467563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1468563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1469563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return target; 1470563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1471563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1472563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1473563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1474563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 1 "typeof " o " === 'function'"))) 1475563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1476563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isProcedure(o) { 1477563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (typeof o === "function"); 1478563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1479563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1480563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1481563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_apply(proc) { 1482563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var args = new Array(); 1483563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // first part of arguments are not in list-form. 1484563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 1; i < arguments.length - 1; i++) 1485563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark args.push(arguments[i]); 1486563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l = arguments[arguments.length - 1]; 1487563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l !== null) { 1488563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark args.push(l.car); 1489563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l = l.cdr; 1490563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1491563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return proc.apply(null, args); 1492563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1493563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1494563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1495563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_map(proc, l1) { 1496563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (l1 === undefined) 1497563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return null; 1498563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // else 1499563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nbApplyArgs = arguments.length - 1; 1500563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var applyArgs = new Array(nbApplyArgs); 1501563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var revres = null; 1502563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l1 !== null) { 1503563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < nbApplyArgs; i++) { 1504563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark applyArgs[i] = arguments[i + 1].car; 1505563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark arguments[i + 1] = arguments[i + 1].cdr; 1506563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1507563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark revres = sc_cons(proc.apply(null, applyArgs), revres); 1508563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1509563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_reverseAppendBang(revres, null); 1510563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1511563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1512563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1513563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_mapBang(proc, l1) { 1514563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (l1 === undefined) 1515563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return null; 1516563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // else 1517563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l1_orig = l1; 1518563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nbApplyArgs = arguments.length - 1; 1519563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var applyArgs = new Array(nbApplyArgs); 1520563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l1 !== null) { 1521563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = l1; 1522563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < nbApplyArgs; i++) { 1523563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark applyArgs[i] = arguments[i + 1].car; 1524563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark arguments[i + 1] = arguments[i + 1].cdr; 1525563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1526563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tmp.car = proc.apply(null, applyArgs); 1527563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1528563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return l1_orig; 1529563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1530563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1531563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1532563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_forEach(proc, l1) { 1533563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (l1 === undefined) 1534563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return undefined; 1535563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // else 1536563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nbApplyArgs = arguments.length - 1; 1537563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var applyArgs = new Array(nbApplyArgs); 1538563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l1 !== null) { 1539563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < nbApplyArgs; i++) { 1540563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark applyArgs[i] = arguments[i + 1].car; 1541563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark arguments[i + 1] = arguments[i + 1].cdr; 1542563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1543563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark proc.apply(null, applyArgs); 1544563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1545563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // add return so FF does not complain. 1546563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return undefined; 1547563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1548563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1549563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1550563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_filter(proc, l1) { 1551563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var dummy = { cdr : null }; 1552563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tail = dummy; 1553563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l1 !== null) { 1554563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (proc(l1.car) !== false) { 1555563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tail.cdr = sc_cons(l1.car, null); 1556563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tail = tail.cdr; 1557563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1558563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l1 = l1.cdr; 1559563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1560563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return dummy.cdr; 1561563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1562563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1563563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1564563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_filterBang(proc, l1) { 1565563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var head = sc_cons("dummy", l1); 1566563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var it = head; 1567563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var next = l1; 1568563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (next !== null) { 1569563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (proc(next.car) !== false) { 1570563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark it.cdr = next 1571563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark it = next; 1572563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1573563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark next = next.cdr; 1574563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1575563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark it.cdr = null; 1576563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return head.cdr; 1577563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1578563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1579563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_filterMap1(proc, l1) { 1580563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var revres = null; 1581563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l1 !== null) { 1582563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = proc(l1.car) 1583563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (tmp !== false) revres = sc_cons(tmp, revres); 1584563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l1 = l1.cdr; 1585563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1586563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_reverseAppendBang(revres, null); 1587563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1588563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_filterMap2(proc, l1, l2) { 1589563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var revres = null; 1590563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l1 !== null) { 1591563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = proc(l1.car, l2.car); 1592563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if(tmp !== false) revres = sc_cons(tmp, revres); 1593563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l1 = l1.cdr; 1594563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l2 = l2.cdr 1595563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1596563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_reverseAppendBang(revres, null); 1597563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1598563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1599563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1600563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_filterMap(proc, l1, l2, l3) { 1601563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (l2 === undefined) 1602563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_filterMap1(proc, l1); 1603563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (l3 === undefined) 1604563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_filterMap2(proc, l1, l2); 1605563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // else 1606563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nbApplyArgs = arguments.length - 1; 1607563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var applyArgs = new Array(nbApplyArgs); 1608563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var revres = null; 1609563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l1 !== null) { 1610563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < nbApplyArgs; i++) { 1611563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark applyArgs[i] = arguments[i + 1].car; 1612563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark arguments[i + 1] = arguments[i + 1].cdr; 1613563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1614563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = proc.apply(null, applyArgs); 1615563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if(tmp !== false) revres = sc_cons(tmp, revres); 1616563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1617563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_reverseAppendBang(revres, null); 1618563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1619563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1620563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1621563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_any(proc, l) { 1622563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var revres = null; 1623563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l !== null) { 1624563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = proc(l.car); 1625563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if(tmp !== false) return tmp; 1626563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l = l.cdr; 1627563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1628563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 1629563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1630563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1631563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export any?) 1632563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 "sc_any(" proc "," l ") !== false"))) 1633563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1634563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_anyPred(proc, l) { 1635563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_any(proc, l)!== false; 1636563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1637563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1638563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1639563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_every(proc, l) { 1640563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var revres = null; 1641563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = true; 1642563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (l !== null) { 1643563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tmp = proc(l.car); 1644563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (tmp === false) return false; 1645563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark l = l.cdr; 1646563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1647563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return tmp; 1648563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1649563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1650563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export every?) 1651563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 "sc_every(" proc "," l ") !== false"))) 1652563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1653563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_everyPred(proc, l) { 1654563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = sc_every(proc, l); 1655563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (tmp !== false) return true; 1656563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 1657563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1658563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1659563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1660563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix "()"))) 1661563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1662563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_force(o) { 1663563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return o(); 1664563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1665563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1666563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1667563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_makePromise(proc) { 1668563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var isResultReady = false; 1669563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var result = undefined; 1670563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return function() { 1671563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!isResultReady) { 1672563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = proc(); 1673563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!isResultReady) { 1674563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark isResultReady = true; 1675563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark result = tmp; 1676563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1677563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1678563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return result; 1679563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 1680563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1681563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1682563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_Values(values) { 1683563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.values = values; 1684563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1685563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1686563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1687563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (values))) 1688563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1689563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_values() { 1690563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (arguments.length === 1) 1691563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return arguments[0]; 1692563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 1693563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Values(arguments); 1694563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1695563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1696563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1697563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_callWithValues(producer, consumer) { 1698563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var produced = producer(); 1699563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (produced instanceof sc_Values) 1700563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return consumer.apply(null, produced.values); 1701563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 1702563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return consumer(produced); 1703563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1704563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1705563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1706563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_dynamicWind(before, thunk, after) { 1707563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark before(); 1708563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark try { 1709563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = thunk(); 1710563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 1711563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } finally { 1712563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark after(); 1713563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1714563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1715563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1716563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1717563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// TODO: eval/scheme-report-environment/null-environment/interaction-environment 1718563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1719563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// LIMITATION: 'load' doesn't exist without files. 1720563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// LIMITATION: transcript-on/transcript-off doesn't exist without files. 1721563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1722563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1723563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_Struct(name) { 1724563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.name = name; 1725563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1726563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Struct.prototype.sc_toDisplayString = function() { 1727563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "#<struct" + sc_hash(this) + ">"; 1728563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 1729563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Struct.prototype.sc_toWriteString = sc_Struct.prototype.sc_toDisplayString; 1730563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1731563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1732563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 1 "new sc_Struct(" name ")"))) 1733563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1734563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_makeStruct(name) { 1735563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Struct(name); 1736563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1737563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1738563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1739563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1740563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix " instanceof sc_Struct"))) 1741563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1742563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isStruct(o) { 1743563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (o instanceof sc_Struct); 1744563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1745563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1746563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1747563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 1748563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 "(" 1 " instanceof sc_Struct) && ( " 1 ".name === " 0 ")"))) 1749563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1750563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isStructNamed(name, s) { 1751563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ((s instanceof sc_Struct) && (s.name === name)); 1752563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1753563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1754563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export struct-field) 1755563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 3 0 "[" 2 "]"))) 1756563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1757563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_getStructField(s, name, field) { 1758563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s[field]; 1759563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1760563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1761563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export struct-field-set!) 1762563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 4 0 "[" 2 "] = " 3))) 1763563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1764563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_setStructFieldBang(s, name, field, val) { 1765563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark s[field] = val; 1766563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1767563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1768563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1769563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (prefix "~"))) 1770563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1771563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_bitNot(x) { 1772563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ~x; 1773563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1774563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1775563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1776563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 2 2 "&"))) 1777563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1778563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_bitAnd(x, y) { 1779563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return x & y; 1780563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1781563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1782563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1783563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 2 2 "|"))) 1784563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1785563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_bitOr(x, y) { 1786563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return x | y; 1787563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1788563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1789563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1790563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 2 2 "^"))) 1791563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1792563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_bitXor(x, y) { 1793563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return x ^ y; 1794563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1795563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1796563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1797563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 2 2 "<<"))) 1798563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1799563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_bitLsh(x, y) { 1800563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return x << y; 1801563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1802563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1803563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1804563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 2 2 ">>"))) 1805563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1806563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_bitRsh(x, y) { 1807563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return x >> y; 1808563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1809563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1810563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1811563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 2 2 ">>>"))) 1812563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1813563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_bitUrsh(x, y) { 1814563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return x >>> y; 1815563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1816563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1817563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export js-field js-property) 1818563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 o "[" field "]"))) 1819563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1820563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_jsField(o, field) { 1821563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return o[field]; 1822563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1823563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1824563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export js-field-set! js-property-set!) 1825563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 3 o "[" field "] = " val))) 1826563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1827563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_setJsFieldBang(o, field, val) { 1828563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return o[field] = val; 1829563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1830563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1831563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export js-field-delete! js-property-delete!) 1832563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 "delete" o "[" field "]"))) 1833563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1834563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_deleteJsFieldBang(o, field) { 1835563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete o[field]; 1836563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1837563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1838563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1839563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (jsCall))) 1840563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1841563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_jsCall(o, fun) { 1842563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var args = new Array(); 1843563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 2; i < arguments.length; i++) 1844563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark args[i-2] = arguments[i]; 1845563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return fun.apply(o, args); 1846563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1847563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1848563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1849563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (jsMethodCall))) 1850563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1851563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_jsMethodCall(o, field) { 1852563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var args = new Array(); 1853563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 2; i < arguments.length; i++) 1854563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark args[i-2] = arguments[i]; 1855563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return o[field].apply(o, args); 1856563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1857563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1858563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export new js-new) 1859563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (jsNew))) 1860563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1861563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_jsNew(c) { 1862563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var evalStr = "new c("; 1863563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark evalStr +=arguments.length > 1? "arguments[1]": ""; 1864563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 2; i < arguments.length; i++) 1865563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark evalStr += ", arguments[" + i + "]"; 1866563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark evalStr +=")"; 1867563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return eval(evalStr); 1868563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1869563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1870563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// ======================== RegExp ==================== 1871563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1872563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_pregexp(re) { 1873563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new RegExp(sc_string2jsstring(re)); 1874563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1875563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1876563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1877563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_pregexpMatch(re, s) { 1878563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var reg = (re instanceof RegExp) ? re : sc_pregexp(re); 1879563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = reg.exec(sc_string2jsstring(s)); 1880563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1881563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (tmp == null) return false; 1882563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1883563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = null; 1884563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = tmp.length-1; i >= 0; i--) { 1885563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (tmp[i] !== null) { 1886563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = sc_cons(sc_jsstring2string(tmp[i]), res); 1887563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 1888563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = sc_cons(false, res); 1889563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1890563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1891563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 1892563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1893563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1894563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1895563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_pregexpReplace(re, s1, s2) { 1896563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var reg; 1897563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var jss1 = sc_string2jsstring(s1); 1898563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var jss2 = sc_string2jsstring(s2); 1899563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1900563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (re instanceof RegExp) { 1901563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (re.global) 1902563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark reg = re; 1903563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 1904563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark reg = new RegExp(re.source); 1905563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 1906563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark reg = new RegExp(sc_string2jsstring(re)); 1907563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1908563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1909563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return jss1.replace(reg, jss2); 1910563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1911563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1912563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export pregexp-replace*)) */ 1913563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_pregexpReplaceAll(re, s1, s2) { 1914563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var reg; 1915563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var jss1 = sc_string2jsstring(s1); 1916563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var jss2 = sc_string2jsstring(s2); 1917563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1918563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (re instanceof RegExp) { 1919563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (re.global) 1920563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark reg = re; 1921563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 1922563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark reg = new RegExp(re.source, "g"); 1923563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 1924563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark reg = new RegExp(sc_string2jsstring(re), "g"); 1925563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1926563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1927563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return jss1.replace(reg, jss2); 1928563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1929563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1930563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1931563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_pregexpSplit(re, s) { 1932563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var reg = ((re instanceof RegExp) ? 1933563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark re : 1934563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark new RegExp(sc_string2jsstring(re))); 1935563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var jss = sc_string2jsstring(s); 1936563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = jss.split(reg); 1937563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1938563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (tmp == null) return false; 1939563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1940563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_vector2list(tmp); 1941563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1942563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1943563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1944563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* =========================================================================== */ 1945563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* Other library stuff */ 1946563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* =========================================================================== */ 1947563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1948563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1949563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 1 "Math.floor(Math.random()*" 'n ")"))) 1950563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1951563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_random(n) { 1952563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return Math.floor(Math.random()*n); 1953563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1954563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1955563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export current-date) 1956563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 0 "new Date()"))) 1957563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1958563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_currentDate() { 1959563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new Date(); 1960563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1961563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1962563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_Hashtable() { 1963563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1964563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Hashtable.prototype.toString = function() { 1965563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "#{%hashtable}"; 1966563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 1967563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// sc_toWriteString == sc_toDisplayString == toString 1968563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1969563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_HashtableElement(key, val) { 1970563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.key = key; 1971563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.val = val; 1972563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1973563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1974563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 1975563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 0 "new sc_Hashtable()"))) 1976563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 1977563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_makeHashtable() { 1978563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Hashtable(); 1979563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1980563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1981563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1982563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_hashtablePutBang(ht, key, val) { 1983563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var hash = sc_hash(key); 1984563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ht[hash] = new sc_HashtableElement(key, val); 1985563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1986563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1987563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1988563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_hashtableGet(ht, key) { 1989563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var hash = sc_hash(key); 1990563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (hash in ht) 1991563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ht[hash].val; 1992563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 1993563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 1994563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1995563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1996563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 1997563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_hashtableForEach(ht, f) { 1998563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var v in ht) { 1999563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (ht[v] instanceof sc_HashtableElement) 2000563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark f(ht[v].key, ht[v].val); 2001563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2002563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2003563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2004563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export hashtable-contains?) 2005563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 "sc_hash(" 1 ") in " 0))) 2006563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 2007563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_hashtableContains(ht, key) { 2008563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var hash = sc_hash(key); 2009563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (hash in ht) 2010563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 2011563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 2012563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 2013563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2014563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2015563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar SC_HASH_COUNTER = 0; 2016563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2017563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_hash(o) { 2018563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (o === null) 2019563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "null"; 2020563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (o === undefined) 2021563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "undefined"; 2022563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (o === true) 2023563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "true"; 2024563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (o === false) 2025563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "false"; 2026563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (typeof o === "number") 2027563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "num-" + o; 2028563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (typeof o === "string") 2029563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "jsstr-" + o; 2030563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (o.sc_getHash) 2031563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return o.sc_getHash(); 2032563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 2033563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_counterHash.call(o); 2034563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2035563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_counterHash() { 2036563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!this.sc_hash) { 2037563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.sc_hash = "hash-" + SC_HASH_COUNTER; 2038563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SC_HASH_COUNTER++; 2039563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2040563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return this.sc_hash; 2041563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2042563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2043563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_Trampoline(args, maxTailCalls) { 2044563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this['__trampoline return__'] = true; 2045563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.args = args; 2046563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.MAX_TAIL_CALLs = maxTailCalls; 2047563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2048563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// TODO: call/cc stuff 2049563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Trampoline.prototype.restart = function() { 2050563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var o = this; 2051563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 2052563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // set both globals. 2053563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SC_TAIL_OBJECT.calls = o.MAX_TAIL_CALLs-1; 2054563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var fun = o.args.callee; 2055563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = fun.apply(SC_TAIL_OBJECT, o.args); 2056563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (res instanceof sc_Trampoline) 2057563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark o = res; 2058563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 2059563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 2060563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2061563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2062563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2063563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export bind-exit-lambda)) */ 2064563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_bindExitLambda(proc) { 2065563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var escape_obj = new sc_BindExitException(); 2066563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var escape = function(res) { 2067563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark escape_obj.res = res; 2068563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw escape_obj; 2069563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 2070563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark try { 2071563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return proc(escape); 2072563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } catch(e) { 2073563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (e === escape_obj) { 2074563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return e.res; 2075563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2076563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw e; 2077563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2078563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2079563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_BindExitException() { 2080563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this._internalException = true; 2081563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2082563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2083563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar SC_SCM2JS_GLOBALS = new Object(); 2084563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2085563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// default tail-call depth. 2086563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// normally the program should set it again. but just in case... 2087563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar SC_TAIL_OBJECT = new Object(); 2088563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkSC_SCM2JS_GLOBALS.TAIL_OBJECT = SC_TAIL_OBJECT; 2089563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// ======================== I/O ======================= 2090563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2091563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*------------------------------------------------------------------*/ 2092563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2093563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_EOF() { 2094563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2095563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar SC_EOF_OBJECT = new sc_EOF(); 2096563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2097563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_Port() { 2098563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2099563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2100563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* --------------- Input ports -------------------------------------*/ 2101563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2102563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_InputPort() { 2103563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2104563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_InputPort.prototype = new sc_Port(); 2105563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2106563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_InputPort.prototype.peekChar = function() { 2107563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!("peeked" in this)) 2108563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.peeked = this.getNextChar(); 2109563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return this.peeked; 2110563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2111563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_InputPort.prototype.readChar = function() { 2112563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = this.peekChar(); 2113563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete this.peeked; 2114563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return tmp; 2115563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2116563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_InputPort.prototype.isCharReady = function() { 2117563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 2118563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2119563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_InputPort.prototype.close = function() { 2120563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // do nothing 2121563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2122563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2123563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* .............. String port ..........................*/ 2124563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_ErrorInputPort() { 2125563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 2126563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_ErrorInputPort.prototype = new sc_InputPort(); 2127563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_ErrorInputPort.prototype.getNextChar = function() { 2128563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw "can't read from error-port."; 2129563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 2130563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_ErrorInputPort.prototype.isCharReady = function() { 2131563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 2132563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 2133563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2134563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2135563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* .............. String port ..........................*/ 2136563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2137563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_StringInputPort(jsStr) { 2138563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // we are going to do some charAts on the str. 2139563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // instead of recreating all the time a String-object, we 2140563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // create one in the beginning. (not sure, if this is really an optim) 2141563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.str = new String(jsStr); 2142563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.pos = 0; 2143563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2144563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_StringInputPort.prototype = new sc_InputPort(); 2145563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_StringInputPort.prototype.getNextChar = function() { 2146563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (this.pos >= this.str.length) 2147563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return SC_EOF_OBJECT; 2148563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return this.str.charAt(this.pos++); 2149563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 2150563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2151563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* ------------- Read and other lib-funs -------------------------------*/ 2152563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_Token(type, val, pos) { 2153563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.type = type; 2154563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.val = val; 2155563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.pos = pos; 2156563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2157563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.EOF = 0/*EOF*/; 2158563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.OPEN_PAR = 1/*OPEN_PAR*/; 2159563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.CLOSE_PAR = 2/*CLOSE_PAR*/; 2160563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.OPEN_BRACE = 3/*OPEN_BRACE*/; 2161563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.CLOSE_BRACE = 4/*CLOSE_BRACE*/; 2162563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.OPEN_BRACKET = 5/*OPEN_BRACKET*/; 2163563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.CLOSE_BRACKET = 6/*CLOSE_BRACKET*/; 2164563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.WHITESPACE = 7/*WHITESPACE*/; 2165563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.QUOTE = 8/*QUOTE*/; 2166563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.ID = 9/*ID*/; 2167563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.DOT = 10/*DOT*/; 2168563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.STRING = 11/*STRING*/; 2169563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.NUMBER = 12/*NUMBER*/; 2170563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.ERROR = 13/*ERROR*/; 2171563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.VECTOR_BEGIN = 14/*VECTOR_BEGIN*/; 2172563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.TRUE = 15/*TRUE*/; 2173563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.FALSE = 16/*FALSE*/; 2174563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.UNSPECIFIED = 17/*UNSPECIFIED*/; 2175563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.REFERENCE = 18/*REFERENCE*/; 2176563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.STORE = 19/*STORE*/; 2177563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Token.CHAR = 20/*CHAR*/; 2178563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2179563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar SC_ID_CLASS = SC_LOWER_CLASS + SC_UPPER_CLASS + "!$%*+-./:<=>?@^_~"; 2180563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_Tokenizer(port) { 2181563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.port = port; 2182563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2183563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Tokenizer.prototype.peekToken = function() { 2184563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (this.peeked) 2185563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return this.peeked; 2186563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var newToken = this.nextToken(); 2187563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.peeked = newToken; 2188563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return newToken; 2189563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 2190563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Tokenizer.prototype.readToken = function() { 2191563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = this.peekToken(); 2192563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete this.peeked; 2193563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return tmp; 2194563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 2195563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Tokenizer.prototype.nextToken = function() { 2196563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var port = this.port; 2197563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2198563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function isNumberChar(c) { 2199563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (c >= "0" && c <= "9"); 2200563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 2201563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function isIdOrNumberChar(c) { 2202563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return SC_ID_CLASS.indexOf(c) != -1 || // ID-char 2203563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (c >= "0" && c <= "9"); 2204563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2205563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function isWhitespace(c) { 2206563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return c === " " || c === "\r" || c === "\n" || c === "\t" || c === "\f"; 2207563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 2208563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function isWhitespaceOrEOF(c) { 2209563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return isWhitespace(c) || c === SC_EOF_OBJECT; 2210563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 2211563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2212563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function readString() { 2213563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = ""; 2214563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 2215563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var c = port.readChar(); 2216563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark switch (c) { 2217563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case '"': 2218563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(11/*STRING*/, res); 2219563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "\\": 2220563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = port.readChar(); 2221563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark switch (tmp) { 2222563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case '0': res += "\0"; break; 2223563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 'a': res += "\a"; break; 2224563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 'b': res += "\b"; break; 2225563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 'f': res += "\f"; break; 2226563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 'n': res += "\n"; break; 2227563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 'r': res += "\r"; break; 2228563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 't': res += "\t"; break; 2229563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 'v': res += "\v"; break; 2230563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case '"': res += '"'; break; 2231563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case '\\': res += '\\'; break; 2232563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 'x': 2233563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark /* hexa-number */ 2234563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nb = 0; 2235563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 2236563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var hexC = port.peekChar(); 2237563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (hexC >= '0' && hexC <= '9') { 2238563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark port.readChar(); 2239563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark nb = nb * 16 + hexC.charCodeAt(0) - '0'.charCodeAt(0); 2240563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else if (hexC >= 'a' && hexC <= 'f') { 2241563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark port.readChar(); 2242563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark nb = nb * 16 + hexC.charCodeAt(0) - 'a'.charCodeAt(0); 2243563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else if (hexC >= 'A' && hexC <= 'F') { 2244563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark port.readChar(); 2245563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark nb = nb * 16 + hexC.charCodeAt(0) - 'A'.charCodeAt(0); 2246563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 2247563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // next char isn't part of hex. 2248563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += String.fromCharCode(nb); 2249563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 2250563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2251563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2252563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 2253563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark default: 2254563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (tmp === SC_EOF_OBJECT) { 2255563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res); 2256563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2257563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += tmp; 2258563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2259563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 2260563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark default: 2261563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (c === SC_EOF_OBJECT) { 2262563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res); 2263563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2264563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += c; 2265563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2266563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2267563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 2268563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function readIdOrNumber(firstChar) { 2269563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = firstChar; 2270563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (isIdOrNumberChar(port.peekChar())) 2271563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += port.readChar(); 2272563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (isNaN(res)) 2273563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(9/*ID*/, res); 2274563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 2275563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(12/*NUMBER*/, res - 0); 2276563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 2277563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2278563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function skipWhitespaceAndComments() { 2279563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var done = false; 2280563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (!done) { 2281563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark done = true; 2282563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (isWhitespace(port.peekChar())) 2283563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark port.readChar(); 2284563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (port.peekChar() === ';') { 2285563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark port.readChar(); 2286563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark done = false; 2287563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 2288563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark curChar = port.readChar(); 2289563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (curChar === SC_EOF_OBJECT || 2290563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark curChar === '\n') 2291563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 2292563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2293563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2294563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2295563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 2296563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2297563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function readDot() { 2298563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (isWhitespace(port.peekChar())) 2299563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(10/*DOT*/); 2300563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 2301563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return readIdOrNumber("."); 2302563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 2303563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2304563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function readSharp() { 2305563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var c = port.readChar(); 2306563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (isWhitespace(c)) 2307563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(13/*ERROR*/, "bad #-pattern0."); 2308563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2309563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // reference 2310563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (isNumberChar(c)) { 2311563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nb = c - 0; 2312563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (isNumberChar(port.peekChar())) 2313563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark nb = nb*10 + (port.readChar() - 0); 2314563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark switch (port.readChar()) { 2315563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case '#': 2316563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(18/*REFERENCE*/, nb); 2317563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case '=': 2318563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(19/*STORE*/, nb); 2319563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark default: 2320563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(13/*ERROR*/, "bad #-pattern1." + nb); 2321563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2322563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2323563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2324563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (c === "(") 2325563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(14/*VECTOR_BEGIN*/); 2326563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2327563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (c === "\\") { // character 2328563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = "" 2329563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (!isWhitespaceOrEOF(port.peekChar())) 2330563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tmp += port.readChar(); 2331563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark switch (tmp.length) { 2332563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 0: // it's escaping a whitespace char: 2333563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (sc_isEOFObject(port.peekChar)) 2334563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(13/*ERROR*/, "bad #-pattern2."); 2335563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 2336563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(20/*CHAR*/, port.readChar()); 2337563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 1: 2338563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(20/*CHAR*/, tmp); 2339563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark default: 2340563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var entry = sc_Char.readable2char[tmp.toLowerCase()]; 2341563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (entry) 2342563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(20/*CHAR*/, entry); 2343563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 2344563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(13/*ERROR*/, "unknown character description: #\\" + tmp); 2345563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2346563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2347563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2348563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // some constants (#t, #f, #unspecified) 2349563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res; 2350563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var needing; 2351563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark switch (c) { 2352563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 't': res = new sc_Token(15/*TRUE*/, true); needing = ""; break; 2353563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 'f': res = new sc_Token(16/*FALSE*/, false); needing = ""; break; 2354563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 'u': res = new sc_Token(17/*UNSPECIFIED*/, undefined); needing = "nspecified"; break; 2355563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark default: 2356563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(13/*ERROR*/, "bad #-pattern3: " + c); 2357563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2358563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while(true) { 2359563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark c = port.peekChar(); 2360563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((isWhitespaceOrEOF(c) || c === ')') && 2361563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark needing == "") 2362563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 2363563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (isWhitespace(c) || needing == "") 2364563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(13/*ERROR*/, "bad #-pattern4 " + c + " " + needing); 2365563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (needing.charAt(0) == c) { 2366563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark port.readChar(); // consume 2367563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark needing = needing.slice(1); 2368563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else 2369563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(13/*ERROR*/, "bad #-pattern5"); 2370563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2371563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2372563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 2373563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2374563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark skipWhitespaceAndComments(); 2375563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var curChar = port.readChar(); 2376563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (curChar === SC_EOF_OBJECT) 2377563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(0/*EOF*/, curChar); 2378563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark switch (curChar) 2379563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 2380563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case " ": 2381563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "\n": 2382563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "\t": 2383563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return readWhitespace(); 2384563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "(": 2385563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(1/*OPEN_PAR*/); 2386563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case ")": 2387563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(2/*CLOSE_PAR*/); 2388563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "{": 2389563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(3/*OPEN_BRACE*/); 2390563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "}": 2391563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(4/*CLOSE_BRACE*/); 2392563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "[": 2393563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(5/*OPEN_BRACKET*/); 2394563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "]": 2395563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(6/*CLOSE_BRACKET*/); 2396563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "'": 2397563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Token(8/*QUOTE*/); 2398563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "#": 2399563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return readSharp(); 2400563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case ".": 2401563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return readDot(); 2402563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case '"': 2403563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return readString(); 2404563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark default: 2405563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (isIdOrNumberChar(curChar)) 2406563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return readIdOrNumber(curChar); 2407563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw "unexpected character: " + curChar; 2408563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2409563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 2410563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2411563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_Reader(tokenizer) { 2412563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.tokenizer = tokenizer; 2413563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.backref = new Array(); 2414563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2415563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Reader.prototype.read = function() { 2416563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function readList(listBeginType) { 2417563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function matchesPeer(open, close) { 2418563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return open === 1/*OPEN_PAR*/ && close === 2/*CLOSE_PAR*/ 2419563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark || open === 3/*OPEN_BRACE*/ && close === 4/*CLOSE_BRACE*/ 2420563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark || open === 5/*OPEN_BRACKET*/ && close === 6/*CLOSE_BRACKET*/; 2421563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 2422563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = null; 2423563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2424563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 2425563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var token = tokenizer.peekToken(); 2426563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2427563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark switch (token.type) { 2428563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 2/*CLOSE_PAR*/: 2429563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 4/*CLOSE_BRACE*/: 2430563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 6/*CLOSE_BRACKET*/: 2431563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (matchesPeer(listBeginType, token.type)) { 2432563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tokenizer.readToken(); // consume token 2433563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_reverseBang(res); 2434563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else 2435563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw "closing par doesn't match: " + listBeginType 2436563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark + " " + listEndType; 2437563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2438563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 0/*EOF*/: 2439563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw "unexpected end of file"; 2440563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2441563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 10/*DOT*/: 2442563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tokenizer.readToken(); // consume token 2443563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var cdr = this.read(); 2444563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var par = tokenizer.readToken(); 2445563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!matchesPeer(listBeginType, par.type)) 2446563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw "closing par doesn't match: " + listBeginType 2447563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark + " " + par.type; 2448563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 2449563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_reverseAppendBang(res, cdr); 2450563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2451563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2452563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark default: 2453563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res = sc_cons(this.read(), res); 2454563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2455563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2456563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 2457563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function readQuote() { 2458563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_cons("quote", sc_cons(this.read(), null)); 2459563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 2460563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function readVector() { 2461563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // opening-parenthesis is already consumed 2462563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var a = new Array(); 2463563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 2464563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var token = tokenizer.peekToken(); 2465563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark switch (token.type) { 2466563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 2/*CLOSE_PAR*/: 2467563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tokenizer.readToken(); 2468563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return a; 2469563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2470563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark default: 2471563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark a.push(this.read()); 2472563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2473563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2474563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 2475563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2476563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function storeRefence(nb) { 2477563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = this.read(); 2478563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.backref[nb] = tmp; 2479563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return tmp; 2480563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 2481563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2482563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function readReference(nb) { 2483563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (nb in this.backref) 2484563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return this.backref[nb]; 2485563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 2486563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw "bad reference: " + nb; 2487563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 2488563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2489563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tokenizer = this.tokenizer; 2490563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2491563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var token = tokenizer.readToken(); 2492563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2493563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // handle error 2494563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (token.type === 13/*ERROR*/) 2495563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw token.val; 2496563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2497563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark switch (token.type) { 2498563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 1/*OPEN_PAR*/: 2499563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 3/*OPEN_BRACE*/: 2500563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 5/*OPEN_BRACKET*/: 2501563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return readList.call(this, token.type); 2502563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 8/*QUOTE*/: 2503563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return readQuote.call(this); 2504563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 11/*STRING*/: 2505563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_jsstring2string(token.val); 2506563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 20/*CHAR*/: 2507563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Char(token.val); 2508563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 14/*VECTOR_BEGIN*/: 2509563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return readVector.call(this); 2510563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 18/*REFERENCE*/: 2511563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return readReference.call(this, token.val); 2512563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 19/*STORE*/: 2513563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return storeRefence.call(this, token.val); 2514563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 9/*ID*/: 2515563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_jsstring2symbol(token.val); 2516563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 0/*EOF*/: 2517563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 12/*NUMBER*/: 2518563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 15/*TRUE*/: 2519563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 16/*FALSE*/: 2520563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 17/*UNSPECIFIED*/: 2521563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return token.val; 2522563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark default: 2523563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw "unexpected token " + token.type + " " + token.val; 2524563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2525563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 2526563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2527563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2528563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_read(port) { 2529563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (port === undefined) // we assume the port hasn't been given. 2530563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark port = SC_DEFAULT_IN; // THREAD: shared var... 2531563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var reader = new sc_Reader(new sc_Tokenizer(port)); 2532563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return reader.read(); 2533563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2534563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2535563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_readChar(port) { 2536563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (port === undefined) // we assume the port hasn't been given. 2537563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark port = SC_DEFAULT_IN; // THREAD: shared var... 2538563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var t = port.readChar(); 2539563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return t === SC_EOF_OBJECT? t: new sc_Char(t); 2540563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2541563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2542563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_peekChar(port) { 2543563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (port === undefined) // we assume the port hasn't been given. 2544563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark port = SC_DEFAULT_IN; // THREAD: shared var... 2545563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var t = port.peekChar(); 2546563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return t === SC_EOF_OBJECT? t: new sc_Char(t); 2547563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2548563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 2549563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 2550563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 2551563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isCharReady(port) { 2552563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (port === undefined) // we assume the port hasn't been given. 2553563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark port = SC_DEFAULT_IN; // THREAD: shared var... 2554563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return port.isCharReady(); 2555563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2556563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 2557563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".close()"))) 2558563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 2559563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_closeInputPort(p) { 2560563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return p.close(); 2561563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2562563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2563563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 2564563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 2565563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix " instanceof sc_InputPort"))) 2566563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 2567563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isInputPort(o) { 2568563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (o instanceof sc_InputPort); 2569563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2570563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2571563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export eof-object?) 2572563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 2573563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix " === SC_EOF_OBJECT"))) 2574563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 2575563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isEOFObject(o) { 2576563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return o === SC_EOF_OBJECT; 2577563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2578563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2579563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 2580563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 0 "SC_DEFAULT_IN"))) 2581563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 2582563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_currentInputPort() { 2583563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return SC_DEFAULT_IN; 2584563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2585563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2586563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* ------------ file operations are not supported -----------*/ 2587563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2588563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_callWithInputFile(s, proc) { 2589563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw "can't open " + s; 2590563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2591563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2592563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2593563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_callWithOutputFile(s, proc) { 2594563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw "can't open " + s; 2595563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2596563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2597563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2598563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_withInputFromFile(s, thunk) { 2599563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw "can't open " + s; 2600563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2601563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2602563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2603563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_withOutputToFile(s, thunk) { 2604563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw "can't open " + s; 2605563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2606563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2607563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2608563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_openInputFile(s) { 2609563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw "can't open " + s; 2610563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2611563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2612563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2613563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_openOutputFile(s) { 2614563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw "can't open " + s; 2615563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2616563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2617563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* ----------------------------------------------------------------------------*/ 2618563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2619563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_basename(p) { 2620563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var i = p.lastIndexOf('/'); 2621563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2622563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if(i >= 0) 2623563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return p.substring(i + 1, p.length); 2624563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 2625563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ''; 2626563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2627563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2628563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2629563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_dirname(p) { 2630563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var i = p.lastIndexOf('/'); 2631563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2632563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if(i >= 0) 2633563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return p.substring(0, i); 2634563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 2635563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ''; 2636563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2637563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2638563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* ----------------------------------------------------------------------------*/ 2639563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2640563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2641563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_withInputFromPort(p, thunk) { 2642563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark try { 2643563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = SC_DEFAULT_IN; // THREAD: shared var. 2644563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SC_DEFAULT_IN = p; 2645563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return thunk(); 2646563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } finally { 2647563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SC_DEFAULT_IN = tmp; 2648563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2649563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2650563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2651563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2652563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_withInputFromString(s, thunk) { 2653563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_withInputFromPort(new sc_StringInputPort(sc_string2jsstring(s)), thunk); 2654563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2655563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2656563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2657563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_withOutputToPort(p, thunk) { 2658563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark try { 2659563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp = SC_DEFAULT_OUT; // THREAD: shared var. 2660563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SC_DEFAULT_OUT = p; 2661563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return thunk(); 2662563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } finally { 2663563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SC_DEFAULT_OUT = tmp; 2664563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2665563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2666563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2667563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2668563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_withOutputToString(thunk) { 2669563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var p = new sc_StringOutputPort(); 2670563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_withOutputToPort(p, thunk); 2671563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return p.close(); 2672563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2673563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2674563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2675563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_withOutputToProcedure(proc, thunk) { 2676563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var t = function(s) { proc(sc_jsstring2string(s)); }; 2677563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_withOutputToPort(new sc_GenericOutputPort(t), thunk); 2678563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2679563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2680563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 2681563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 0 "new sc_StringOutputPort()"))) 2682563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 2683563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_openOutputString() { 2684563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_StringOutputPort(); 2685563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2686563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2687563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2688563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_openInputString(str) { 2689563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_StringInputPort(sc_string2jsstring(str)); 2690563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2691563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2692563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* ----------------------------------------------------------------------------*/ 2693563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2694563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_OutputPort() { 2695563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2696563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_OutputPort.prototype = new sc_Port(); 2697563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_OutputPort.prototype.appendJSString = function(obj) { 2698563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark /* do nothing */ 2699563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2700563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_OutputPort.prototype.close = function() { 2701563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark /* do nothing */ 2702563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2703563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2704563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_StringOutputPort() { 2705563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.res = ""; 2706563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2707563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_StringOutputPort.prototype = new sc_OutputPort(); 2708563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_StringOutputPort.prototype.appendJSString = function(s) { 2709563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.res += s; 2710563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2711563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_StringOutputPort.prototype.close = function() { 2712563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_jsstring2string(this.res); 2713563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2714563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2715563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2716563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_getOutputString(sp) { 2717563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_jsstring2string(sp.res); 2718563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2719563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2720563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2721563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_ErrorOutputPort() { 2722563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2723563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_ErrorOutputPort.prototype = new sc_OutputPort(); 2724563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_ErrorOutputPort.prototype.appendJSString = function(s) { 2725563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark throw "don't write on ErrorPort!"; 2726563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2727563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_ErrorOutputPort.prototype.close = function() { 2728563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark /* do nothing */ 2729563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2730563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2731563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_GenericOutputPort(appendJSString, close) { 2732563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.appendJSString = appendJSString; 2733563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (close) 2734563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this.close = close; 2735563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2736563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_GenericOutputPort.prototype = new sc_OutputPort(); 2737563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2738563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 2739563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 2740563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix " instanceof sc_OutputPort"))) 2741563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 2742563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isOutputPort(o) { 2743563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (o instanceof sc_OutputPort); 2744563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2745563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2746563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 2747563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".close()"))) 2748563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 2749563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_closeOutputPort(p) { 2750563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return p.close(); 2751563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2752563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2753563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* ------------------ write ---------------------------------------------------*/ 2754563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2755563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2756563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_write(o, p) { 2757563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (p === undefined) // we assume not given 2758563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p = SC_DEFAULT_OUT; 2759563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString(sc_toWriteString(o)); 2760563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2761563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2762563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_toWriteString(o) { 2763563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (o === null) 2764563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "()"; 2765563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (o === true) 2766563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "#t"; 2767563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (o === false) 2768563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "#f"; 2769563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (o === undefined) 2770563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "#unspecified"; 2771563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (typeof o === 'function') 2772563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "#<procedure " + sc_hash(o) + ">"; 2773563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (o.sc_toWriteString) 2774563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return o.sc_toWriteString(); 2775563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 2776563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return o.toString(); 2777563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2778563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2779563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_escapeWriteString(s) { 2780563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = ""; 2781563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var j = 0; 2782563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (i = 0; i < s.length; i++) { 2783563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark switch (s.charAt(i)) { 2784563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "\0": res += s.substring(j, i) + "\\0"; j = i + 1; break; 2785563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "\b": res += s.substring(j, i) + "\\b"; j = i + 1; break; 2786563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "\f": res += s.substring(j, i) + "\\f"; j = i + 1; break; 2787563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "\n": res += s.substring(j, i) + "\\n"; j = i + 1; break; 2788563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "\r": res += s.substring(j, i) + "\\r"; j = i + 1; break; 2789563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "\t": res += s.substring(j, i) + "\\t"; j = i + 1; break; 2790563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "\v": res += s.substring(j, i) + "\\v"; j = i + 1; break; 2791563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case '"': res += s.substring(j, i) + '\\"'; j = i + 1; break; 2792563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case "\\": res += s.substring(j, i) + "\\\\"; j = i + 1; break; 2793563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark default: 2794563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var c = s.charAt(i); 2795563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ("\a" !== "a" && c == "\a") { 2796563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += s.substring(j, i) + "\\a"; j = i + 1; continue; 2797563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2798563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ("\v" !== "v" && c == "\v") { 2799563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += s.substring(j, i) + "\\v"; j = i + 1; continue; 2800563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2801563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark //if (s.charAt(i) < ' ' || s.charCodeAt(i) > 127) { 2802563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // CARE: Manuel is this OK with HOP? 2803563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (s.charAt(i) < ' ') { 2804563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark /* non printable character and special chars */ 2805563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += s.substring(j, i) + "\\x" + s.charCodeAt(i).toString(16); 2806563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark j = i + 1; 2807563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2808563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // else just let i increase... 2809563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2810563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2811563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += s.substring(j, i); 2812563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 2813563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2814563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2815563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* ------------------ display ---------------------------------------------------*/ 2816563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2817563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2818563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_display(o, p) { 2819563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (p === undefined) // we assume not given 2820563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p = SC_DEFAULT_OUT; 2821563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString(sc_toDisplayString(o)); 2822563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2823563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2824563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_toDisplayString(o) { 2825563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (o === null) 2826563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "()"; 2827563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (o === true) 2828563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "#t"; 2829563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (o === false) 2830563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "#f"; 2831563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (o === undefined) 2832563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "#unspecified"; 2833563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (typeof o === 'function') 2834563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "#<procedure " + sc_hash(o) + ">"; 2835563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (o.sc_toDisplayString) 2836563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return o.sc_toDisplayString(); 2837563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 2838563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return o.toString(); 2839563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2840563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2841563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* ------------------ newline ---------------------------------------------------*/ 2842563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2843563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2844563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_newline(p) { 2845563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (p === undefined) // we assume not given 2846563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p = SC_DEFAULT_OUT; 2847563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString("\n"); 2848563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2849563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2850563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* ------------------ write-char ---------------------------------------------------*/ 2851563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2852563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2853563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_writeChar(c, p) { 2854563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (p === undefined) // we assume not given 2855563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p = SC_DEFAULT_OUT; 2856563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString(c.val); 2857563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2858563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2859563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* ------------------ write-circle ---------------------------------------------------*/ 2860563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2861563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2862563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_writeCircle(o, p) { 2863563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (p === undefined) // we assume not given 2864563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p = SC_DEFAULT_OUT; 2865563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString(sc_toWriteCircleString(o)); 2866563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2867563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2868563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_toWriteCircleString(o) { 2869563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var symb = sc_gensym("writeCircle"); 2870563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nbPointer = new Object(); 2871563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark nbPointer.nb = 0; 2872563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_prepWriteCircle(o, symb, nbPointer); 2873563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_genToWriteCircleString(o, symb); 2874563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2875563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2876563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_prepWriteCircle(o, symb, nbPointer) { 2877563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // TODO sc_Struct 2878563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (o instanceof sc_Pair || 2879563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark o instanceof sc_Vector) { 2880563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (o[symb] !== undefined) { 2881563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // not the first visit. 2882563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark o[symb]++; 2883563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // unless there is already a number, assign one. 2884563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!o[symb + "nb"]) o[symb + "nb"] = nbPointer.nb++; 2885563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 2886563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2887563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark o[symb] = 0; 2888563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (o instanceof sc_Pair) { 2889563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_prepWriteCircle(o.car, symb, nbPointer); 2890563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_prepWriteCircle(o.cdr, symb, nbPointer); 2891563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 2892563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < o.length; i++) 2893563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_prepWriteCircle(o[i], symb, nbPointer); 2894563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2895563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2896563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2897563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2898563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_genToWriteCircleString(o, symb) { 2899563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!(o instanceof sc_Pair || 2900563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark o instanceof sc_Vector)) 2901563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_toWriteString(o); 2902563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return o.sc_toWriteCircleString(symb); 2903563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2904563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Pair.prototype.sc_toWriteCircleString = function(symb, inList) { 2905563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (this[symb + "use"]) { // use-flag is set. Just use it. 2906563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nb = this[symb + "nb"]; 2907563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (this[symb]-- === 0) { // if we are the last use. remove all fields. 2908563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete this[symb]; 2909563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete this[symb + "nb"]; 2910563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete this[symb + "use"]; 2911563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2912563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (inList) 2913563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return '. #' + nb + '#'; 2914563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 2915563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return '#' + nb + '#'; 2916563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2917563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (this[symb]-- === 0) { // if we are the last use. remove all fields. 2918563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete this[symb]; 2919563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete this[symb + "nb"]; 2920563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete this[symb + "use"]; 2921563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2922563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2923563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = ""; 2924563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2925563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (this[symb] !== undefined) { // implies > 0 2926563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this[symb + "use"] = true; 2927563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (inList) 2928563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += '. #' + this[symb + "nb"] + '='; 2929563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 2930563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += '#' + this[symb + "nb"] + '='; 2931563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark inList = false; 2932563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2933563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2934563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!inList) 2935563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += "("; 2936563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2937563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // print car 2938563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += sc_genToWriteCircleString(this.car, symb); 2939563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2940563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (sc_isPair(this.cdr)) { 2941563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += " " + this.cdr.sc_toWriteCircleString(symb, true); 2942563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else if (this.cdr !== null) { 2943563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += " . " + sc_genToWriteCircleString(this.cdr, symb); 2944563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2945563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!inList) 2946563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += ")"; 2947563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 2948563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 2949563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksc_Vector.prototype.sc_toWriteCircleString = function(symb) { 2950563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (this[symb + "use"]) { // use-flag is set. Just use it. 2951563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nb = this[symb + "nb"]; 2952563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (this[symb]-- === 0) { // if we are the last use. remove all fields. 2953563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete this[symb]; 2954563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete this[symb + "nb"]; 2955563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete this[symb + "use"]; 2956563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2957563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return '#' + nb + '#'; 2958563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2959563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (this[symb]-- === 0) { // if we are the last use. remove all fields. 2960563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete this[symb]; 2961563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete this[symb + "nb"]; 2962563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark delete this[symb + "use"]; 2963563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2964563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2965563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = ""; 2966563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (this[symb] !== undefined) { // implies > 0 2967563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark this[symb + "use"] = true; 2968563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += '#' + this[symb + "nb"] + '='; 2969563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2970563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += "#("; 2971563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < this.length; i++) { 2972563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += sc_genToWriteCircleString(this[i], symb); 2973563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (i < this.length - 1) res += " "; 2974563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2975563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += ")"; 2976563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 2977563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 2978563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2979563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2980563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* ------------------ print ---------------------------------------------------*/ 2981563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2982563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2983563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_print(s) { 2984563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (arguments.length === 1) { 2985563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_display(s); 2986563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_newline(); 2987563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2988563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else { 2989563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < arguments.length; i++) 2990563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_display(arguments[i]); 2991563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_newline(); 2992563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 2993563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2994563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2995563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* ------------------ format ---------------------------------------------------*/ 2996563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 2997563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_format(s, args) { 2998563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var len = s.length; 2999563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var p = new sc_StringOutputPort(); 3000563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var i = 0, j = 1; 3001563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3002563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while( i < len ) { 3003563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var i2 = s.indexOf("~", i); 3004563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3005563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (i2 == -1) { 3006563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString( s.substring( i, len ) ); 3007563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return p.close(); 3008563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 3009563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (i2 > i) { 3010563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (i2 == (len - 1)) { 3011563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString(s.substring(i, len)); 3012563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return p.close(); 3013563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 3014563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString(s.substring(i, i2)); 3015563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark i = i2; 3016563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3017563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3018563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3019563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark switch(s.charCodeAt(i2 + 1)) { 3020563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 65: 3021563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 97: 3022563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // a 3023563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_display(arguments[j], p); 3024563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark i += 2; j++; 3025563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 3026563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3027563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 83: 3028563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 115: 3029563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // s 3030563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_write(arguments[j], p); 3031563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark i += 2; j++; 3032563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 3033563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3034563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 86: 3035563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 118: 3036563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // v 3037563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_display(arguments[j], p); 3038563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString("\n"); 3039563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark i += 2; j++; 3040563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 3041563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3042563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 67: 3043563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 99: 3044563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // c 3045563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString(String.fromCharCode(arguments[j])); 3046563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark i += 2; j++; 3047563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 3048563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3049563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 88: 3050563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 120: 3051563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // x 3052563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString(arguments[j].toString(6)); 3053563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark i += 2; j++; 3054563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 3055563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3056563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 79: 3057563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 111: 3058563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // o 3059563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString(arguments[j].toString(8)); 3060563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark i += 2; j++; 3061563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 3062563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3063563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 66: 3064563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 98: 3065563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // b 3066563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString(arguments[j].toString(2)); 3067563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark i += 2; j++; 3068563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 3069563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3070563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 37: 3071563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 110: 3072563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // %, n 3073563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString("\n"); 3074563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark i += 2; break; 3075563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3076563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 114: 3077563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // r 3078563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString("\r"); 3079563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark i += 2; break; 3080563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3081563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case 126: 3082563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // ~ 3083563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark p.appendJSString("~"); 3084563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark i += 2; break; 3085563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3086563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark default: 3087563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_error( "format: illegal ~" 3088563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark + String.fromCharCode(s.charCodeAt(i2 + 1)) 3089563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark + " sequence" ); 3090563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ""; 3091563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3092563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3093563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3094563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3095563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return p.close(); 3096563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3097563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3098563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* ------------------ global ports ---------------------------------------------------*/ 3099563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3100563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar SC_DEFAULT_IN = new sc_ErrorInputPort(); 3101563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar SC_DEFAULT_OUT = new sc_ErrorOutputPort(); 3102563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar SC_ERROR_OUT = new sc_ErrorOutputPort(); 3103563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3104563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_SYMBOL_PREFIX = "\u1E9C"; 3105563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_KEYWORD_PREFIX = "\u1E9D"; 3106563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3107563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3108563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (id))) */ 3109563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_jsstring2string(s) { 3110563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s; 3111563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3112563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3113563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3114563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (prefix "'\\u1E9C' +"))) 3115563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3116563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_jsstring2symbol(s) { 3117563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_SYMBOL_PREFIX + s; 3118563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3119563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3120563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3121563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (id))) 3122563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3123563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_string2jsstring(s) { 3124563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s; 3125563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3126563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3127563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3128563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (symbol2jsstring_immutable))) 3129563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3130563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_symbol2jsstring(s) { 3131563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s.slice(1); 3132563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3133563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3134563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3135563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".slice(1)"))) 3136563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3137563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_keyword2jsstring(k) { 3138563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return k.slice(1); 3139563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3140563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3141563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3142563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (prefix "'\\u1E9D' +"))) 3143563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3144563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_jsstring2keyword(s) { 3145563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_KEYWORD_PREFIX + s; 3146563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3147563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3148563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3149563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 3150563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3151563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isKeyword(s) { 3152563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (typeof s === "string") && 3153563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (s.charAt(0) === sc_KEYWORD_PREFIX); 3154563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3155563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3156563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3157563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 3158563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_gensym = function() { 3159563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var counter = 1000; 3160563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return function(sym) { 3161563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark counter++; 3162563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!sym) sym = sc_SYMBOL_PREFIX; 3163563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sym + "s" + counter + "~" + "^sC-GeNsYm "; 3164563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3165563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}(); 3166563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3167563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3168563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3169563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 3170563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3171563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isEqual(o1, o2) { 3172563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ((o1 === o2) || 3173563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_isPair(o1) && sc_isPair(o2) 3174563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark && sc_isPairEqual(o1, o2, sc_isEqual)) || 3175563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_isVector(o1) && sc_isVector(o2) 3176563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark && sc_isVectorEqual(o1, o2, sc_isEqual))); 3177563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3178563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3179563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export number->symbol integer->symbol)) */ 3180563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_number2symbol(x, radix) { 3181563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_SYMBOL_PREFIX + sc_number2jsstring(x, radix); 3182563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3183563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3184563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export number->string integer->string)) */ 3185563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_number2string = sc_number2jsstring; 3186563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3187563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 3188563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_symbol2number(s, radix) { 3189563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_jsstring2number(s.slice(1), radix); 3190563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3191563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3192563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 3193563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_string2number = sc_jsstring2number; 3194563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3195563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3196563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (prefix "+" s))) 3197563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ;; peephole will only apply if no radix is given. 3198563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3199563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_string2integer(s, radix) { 3200563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!radix) return +s; 3201563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return parseInt(s, radix); 3202563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3203563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3204563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3205563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (prefix "+"))) 3206563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3207563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_string2real(s) { 3208563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return +s; 3209563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3210563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3211563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3212563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3213563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 3214563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3215563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isSymbol(s) { 3216563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (typeof s === "string") && 3217563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (s.charAt(0) === sc_SYMBOL_PREFIX); 3218563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3219563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3220563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3221563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (symbol2string_immutable))) 3222563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3223563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_symbol2string(s) { 3224563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s.slice(1); 3225563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3226563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3227563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3228563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (prefix "'\\u1E9C' +"))) 3229563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3230563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_string2symbol(s) { 3231563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_SYMBOL_PREFIX + s; 3232563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3233563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3234563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export symbol-append) 3235563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (symbolAppend_immutable))) 3236563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3237563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_symbolAppend() { 3238563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var res = sc_SYMBOL_PREFIX; 3239563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < arguments.length; i++) 3240563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark res += arguments[i].slice(1); 3241563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return res; 3242563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3243563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3244563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3245563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".val"))) 3246563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3247563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_char2string(c) { return c.val; } 3248563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3249563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3250563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 1 "'\\u1E9C' + " c ".val"))) 3251563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3252563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_char2symbol(c) { return sc_SYMBOL_PREFIX + c.val; } 3253563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3254563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3255563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool)) 3256563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3257563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isString(s) { 3258563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (typeof s === "string") && 3259563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (s.charAt(0) !== sc_SYMBOL_PREFIX); 3260563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3261563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3262563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 3263563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_makeString = sc_makejsString; 3264563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3265563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3266563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 3267563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_string() { 3268563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < arguments.length; i++) 3269563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark arguments[i] = arguments[i].val; 3270563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "".concat.apply("", arguments); 3271563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3272563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3273563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3274563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".length"))) 3275563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3276563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_stringLength(s) { return s.length; } 3277563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3278563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 3279563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_stringRef(s, k) { 3280563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new sc_Char(s.charAt(k)); 3281563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3282563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3283563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* there's no stringSet in the immutable version 3284563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_stringSet(s, k, c) 3285563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3286563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3287563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3288563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export string=?) 3289563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 3290563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 str1 " === " str2))) 3291563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3292563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isStringEqual(s1, s2) { 3293563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s1 === s2; 3294563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3295563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export string<?) 3296563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 3297563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 str1 " < " str2))) 3298563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3299563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isStringLess(s1, s2) { 3300563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s1 < s2; 3301563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3302563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export string>?) 3303563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 3304563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 str1 " > " str2))) 3305563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3306563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isStringGreater(s1, s2) { 3307563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s1 > s2; 3308563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3309563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export string<=?) 3310563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 3311563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 str1 " <= " str2))) 3312563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3313563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isStringLessEqual(s1, s2) { 3314563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s1 <= s2; 3315563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3316563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export string>=?) 3317563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 3318563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 str1 " >= " str2))) 3319563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3320563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isStringGreaterEqual(s1, s2) { 3321563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s1 >= s2; 3322563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3323563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export string-ci=?) 3324563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 3325563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 str1 ".toLowerCase() === " str2 ".toLowerCase()"))) 3326563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3327563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isStringCIEqual(s1, s2) { 3328563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s1.toLowerCase() === s2.toLowerCase(); 3329563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3330563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export string-ci<?) 3331563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 3332563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 str1 ".toLowerCase() < " str2 ".toLowerCase()"))) 3333563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3334563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isStringCILess(s1, s2) { 3335563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s1.toLowerCase() < s2.toLowerCase(); 3336563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3337563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export string-ci>?) 3338563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 3339563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 str1 ".toLowerCase() > " str2 ".toLowerCase()"))) 3340563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3341563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isStringCIGreater(s1, s2) { 3342563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s1.toLowerCase() > s2.toLowerCase(); 3343563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3344563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export string-ci<=?) 3345563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 3346563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 str1 ".toLowerCase() <= " str2 ".toLowerCase()"))) 3347563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3348563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isStringCILessEqual(s1, s2) { 3349563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s1.toLowerCase() <= s2.toLowerCase(); 3350563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3351563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export string-ci>=?) 3352563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (type bool) 3353563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 2 str1 ".toLowerCase() >= " str2 ".toLowerCase()"))) 3354563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3355563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isStringCIGreaterEqual(s1, s2) { 3356563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s1.toLowerCase() >= s2.toLowerCase(); 3357563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3358563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3359563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3360563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (hole 3 s ".substring(" start ", " end ")"))) 3361563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3362563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_substring(s, start, end) { 3363563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s.substring(start, end); 3364563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3365563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3366563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) 3367563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3368563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_isSubstring_at(s1, s2, i) { 3369563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s2 == s1.substring(i, i+ s2.length); 3370563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3371563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3372563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3373563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (infix 0 #f "+" "''"))) 3374563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3375563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_stringAppend() { 3376563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return "".concat.apply("", arguments); 3377563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3378563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3379563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 3380563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_string2list = sc_jsstring2list; 3381563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3382563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t)) */ 3383563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_list2string = sc_list2jsstring; 3384563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3385563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3386563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (id))) 3387563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3388563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_stringCopy(s) { 3389563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s; 3390563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3391563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3392563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* there's no string-fill in the immutable version 3393563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_stringFill(s, c) 3394563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3395563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3396563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3397563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (postfix ".slice(1)"))) 3398563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3399563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_keyword2string(o) { 3400563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return o.slice(1); 3401563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3402563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3403563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*** META ((export #t) 3404563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (peephole (prefix "'\\u1E9D' +"))) 3405563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/ 3406563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction sc_string2keyword(o) { 3407563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_KEYWORD_PREFIX + o; 3408563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3409563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3410563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkString.prototype.sc_toDisplayString = function() { 3411563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (this.charAt(0) === sc_SYMBOL_PREFIX) 3412563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // TODO: care for symbols with spaces (escape-chars symbols). 3413563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return this.slice(1); 3414563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (this.charAt(0) === sc_KEYWORD_PREFIX) 3415563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ":" + this.slice(1); 3416563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3417563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return this.toString(); 3418563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 3419563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3420563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkString.prototype.sc_toWriteString = function() { 3421563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (this.charAt(0) === sc_SYMBOL_PREFIX) 3422563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // TODO: care for symbols with spaces (escape-chars symbols). 3423563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return this.slice(1); 3424563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else if (this.charAt(0) === sc_KEYWORD_PREFIX) 3425563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ":" + this.slice(1); 3426563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3427563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return '"' + sc_escapeWriteString(this) + '"'; 3428563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 3429563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* Exported Variables */ 3430563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar BgL_testzd2boyerzd2; 3431563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar BgL_nboyerzd2benchmarkzd2; 3432563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar BgL_setupzd2boyerzd2; 3433563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* End Exports */ 3434563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3435563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar translate_term_nboyer; 3436563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar translate_args_nboyer; 3437563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar untranslate_term_nboyer; 3438563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer; 3439563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer; 3440563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar translate_alist_nboyer; 3441563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar apply_subst_nboyer; 3442563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar apply_subst_lst_nboyer; 3443563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar tautologyp_nboyer; 3444563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar if_constructor_nboyer; 3445563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar rewrite_count_nboyer; 3446563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar rewrite_nboyer; 3447563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar rewrite_args_nboyer; 3448563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar unify_subst_nboyer; 3449563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar one_way_unify1_nboyer; 3450563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar false_term_nboyer; 3451563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar true_term_nboyer; 3452563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar trans_of_implies1_nboyer; 3453563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar is_term_equal_nboyer; 3454563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar is_term_member_nboyer; 3455563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar const_nboyer; 3456563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_const_3_nboyer; 3457563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar sc_const_4_nboyer; 3458563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 3459563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (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))))))); 3460563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (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)))))))); 3461563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (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))))))))))); 3462563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_nboyerzd2benchmarkzd2 = function() { 3463563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var args = null; 3464563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) { 3465563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark args = sc_cons(arguments[sc_tmp], args); 3466563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3467563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var n; 3468563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ((n = ((args === null)?(0):(args.car))), (BgL_setupzd2boyerzd2()), (BgL_runzd2benchmarkzd2(("nboyer"+(sc_number2string(n))), (1), function() { 3469563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (BgL_testzd2boyerzd2(n)); 3470563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }, function(rewrites) { 3471563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((sc_isNumber(rewrites))) 3472563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark switch (n) { 3473563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case (0): 3474563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (rewrites===(95024)); 3475563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 3476563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case (1): 3477563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (rewrites===(591777)); 3478563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 3479563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case (2): 3480563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (rewrites===(1813975)); 3481563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 3482563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case (3): 3483563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (rewrites===(5375678)); 3484563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 3485563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case (4): 3486563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (rewrites===(16445406)); 3487563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 3488563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark case (5): 3489563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (rewrites===(51507739)); 3490563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 3491563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark default: 3492563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 3493563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 3494563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3495563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3496563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3497563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }))); 3498563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3499563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_setupzd2boyerzd2 = function() { 3500563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 3501563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3502563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_testzd2boyerzd2 = function() { 3503563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 3504563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3505563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark translate_term_nboyer = function(term) { 3506563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var lst; 3507563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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)))))))))); 3508563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3509563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark translate_args_nboyer = function(lst) { 3510563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_lst_5; 3511563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var term; 3512563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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)))))))))); 3513563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3514563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark untranslate_term_nboyer = function(term) { 3515563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var optrOpnd; 3516563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tail1131; 3517563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var L1127; 3518563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var falseHead1130; 3519563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var symbol_record; 3520563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!(term instanceof sc_Pair)) 3521563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return term; 3522563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3523563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3524563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (falseHead1130 = (new sc_Pair(null, null))); 3525563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (L1127 = (term.cdr)); 3526563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (tail1131 = falseHead1130); 3527563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (!(L1127 === null)) { 3528563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3529563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (tail1131.cdr = (new sc_Pair((untranslate_term_nboyer((L1127.car))), null))); 3530563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (tail1131 = (tail1131.cdr)); 3531563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (L1127 = (L1127.cdr)); 3532563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3533563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3534563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (optrOpnd = (falseHead1130.cdr)); 3535563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (new sc_Pair(((symbol_record = (term.car)), (symbol_record[(0)])), optrOpnd)); 3536563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3537563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3538563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer = function(sym) { 3539563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var r; 3540563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var x; 3541563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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))); 3542563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3543563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null); 3544563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark translate_alist_nboyer = function(alist) { 3545563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_alist_6; 3546563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var term; 3547563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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)))))))))); 3548563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3549563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark apply_subst_nboyer = function(alist, term) { 3550563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var lst; 3551563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var temp_temp; 3552563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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)))))))))); 3553563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3554563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark apply_subst_lst_nboyer = function(alist, lst) { 3555563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_lst_7; 3556563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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)))))))))); 3557563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3558563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark tautologyp_nboyer = function(sc_x_11, true_lst, false_lst) { 3559563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp1125; 3560563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var x; 3561563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp1126; 3562563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_x_8; 3563563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_tmp1125_9; 3564563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_tmp1126_10; 3565563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_x_11; 3566563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var true_lst; 3567563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var false_lst; 3568563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 3569563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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)) 3570563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 3571563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3572563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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)) 3573563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3574563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3575563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!(sc_x_11 instanceof sc_Pair)) 3576563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3577563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3578563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (((sc_x_11.car)===if_constructor_nboyer)) 3579563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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)) 3580563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_x_11 = (sc_x_11.cdr.cdr.car)); 3581563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3582563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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)) 3583563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car)); 3584563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3585563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (((tautologyp_nboyer((sc_x_11.cdr.cdr.car), (new sc_Pair((sc_x_11.cdr.car), true_lst)), false_lst))!== false)) 3586563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3587563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (false_lst = (new sc_Pair((sc_x_11.cdr.car), false_lst))); 3588563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car)); 3589563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3590563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3591563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3592563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3593563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3594563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3595563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3596563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (if_constructor_nboyer = "\u1E9C*"); 3597563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (rewrite_count_nboyer = (0)); 3598563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark rewrite_nboyer = function(term) { 3599563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var term2; 3600563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_term_12; 3601563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var lst; 3602563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var symbol_record; 3603563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_lst_13; 3604563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3605563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (++rewrite_count_nboyer); 3606563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!(term instanceof sc_Pair)) 3607563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return term; 3608563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3609563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3610563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (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)))))))))); 3611563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (lst = ((symbol_record = (term.car)), (symbol_record[(1)]))); 3612563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 3613563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((lst === null)) 3614563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_term_12; 3615563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3616563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((((term2 = ((lst.car).cdr.car)), (unify_subst_nboyer = null), (one_way_unify1_nboyer(sc_term_12, term2)))!== false)) 3617563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (rewrite_nboyer((apply_subst_nboyer(unify_subst_nboyer, ((lst.car).cdr.cdr.car))))); 3618563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3619563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (lst = (lst.cdr)); 3620563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3621563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3622563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3623563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3624563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark rewrite_args_nboyer = function(lst) { 3625563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_lst_14; 3626563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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)))))))))); 3627563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3628563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (unify_subst_nboyer = "\u1E9C*"); 3629563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark one_way_unify1_nboyer = function(term1, term2) { 3630563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var lst1; 3631563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var lst2; 3632563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var temp_temp; 3633563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!(term2 instanceof sc_Pair)) 3634563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3635563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (temp_temp = (sc_assq(term2, unify_subst_nboyer))); 3636563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((temp_temp!== false)) 3637563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (is_term_equal_nboyer(term1, (temp_temp.cdr))); 3638563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3639563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((sc_isNumber(term2))) 3640563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (sc_isEqual(term1, term2)); 3641563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3642563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3643563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (unify_subst_nboyer = (new sc_Pair((new sc_Pair(term2, term1)), unify_subst_nboyer))); 3644563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 3645563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3646563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3647563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3648563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!(term1 instanceof sc_Pair)) 3649563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3650563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3651563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (((term1.car)===(term2.car))) 3652563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3653563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (lst1 = (term1.cdr)); 3654563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (lst2 = (term2.cdr)); 3655563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 3656563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((lst1 === null)) 3657563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (lst2 === null); 3658563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3659563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((lst2 === null)) 3660563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3661563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3662563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (((one_way_unify1_nboyer((lst1.car), (lst2.car)))!== false)) 3663563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3664563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (lst1 = (lst1.cdr)); 3665563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (lst2 = (lst2.cdr)); 3666563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3667563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3668563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3669563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3670563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3671563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3672563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3673563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3674563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (false_term_nboyer = "\u1E9C*"); 3675563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (true_term_nboyer = "\u1E9C*"); 3676563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark trans_of_implies1_nboyer = function(n) { 3677563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_n_15; 3678563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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))))))))))); 3679563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3680563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark is_term_equal_nboyer = function(x, y) { 3681563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var lst1; 3682563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var lst2; 3683563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var r2; 3684563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var r1; 3685563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((x instanceof sc_Pair)) 3686563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((y instanceof sc_Pair)) 3687563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((((r1 = (x.car)), (r2 = (y.car)), (r1===r2))!== false)) 3688563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3689563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (lst1 = (x.cdr)); 3690563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (lst2 = (y.cdr)); 3691563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 3692563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((lst1 === null)) 3693563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (lst2 === null); 3694563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3695563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((lst2 === null)) 3696563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3697563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3698563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (((is_term_equal_nboyer((lst1.car), (lst2.car)))!== false)) 3699563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3700563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (lst1 = (lst1.cdr)); 3701563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (lst2 = (lst2.cdr)); 3702563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3703563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3704563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3705563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3706563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3707563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3708563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3709563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3710563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3711563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3712563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (sc_isEqual(x, y)); 3713563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3714563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark is_term_member_nboyer = function(x, lst) { 3715563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var x; 3716563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var lst; 3717563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 3718563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((lst === null)) 3719563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3720563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3721563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (((is_term_equal_nboyer(x, (lst.car)))!== false)) 3722563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 3723563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3724563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (lst = (lst.cdr)); 3725563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3726563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3727563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_setupzd2boyerzd2 = function() { 3728563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var symbol_record; 3729563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var value; 3730563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_symbolzd2record_16zd2; 3731563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sym; 3732563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_sym_17; 3733563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var term; 3734563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var lst; 3735563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_term_18; 3736563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_term_19; 3737563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3738563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null); 3739563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (if_constructor_nboyer = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer("\u1E9Cif"))); 3740563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (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)))))))); 3741563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (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)))))))); 3742563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (lst = sc_const_3_nboyer); 3743563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (!(lst === null)) { 3744563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3745563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (term = (lst.car)); 3746563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (((term instanceof sc_Pair)&&(((term.car)==="\u1E9Cequal")&&((term.cdr.car) instanceof sc_Pair)))) 3747563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3748563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_sym_17 = ((term.cdr.car).car)); 3749563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (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)]))))); 3750563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (symbol_record = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer(sc_sym_17))); 3751563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (symbol_record[(1)] = value); 3752563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3753563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3754563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_error("ADD-LEMMA did not like term: ", term)); 3755563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (lst = (lst.cdr)); 3756563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3757563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3758563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 3759563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3760563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3761563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_testzd2boyerzd2 = function(n) { 3762563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var optrOpnd; 3763563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var term; 3764563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_n_20; 3765563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var answer; 3766563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_term_21; 3767563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_term_22; 3768563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3769563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (rewrite_count_nboyer = (0)); 3770563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (term = sc_const_4_nboyer); 3771563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_n_20 = n); 3772563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (!(sc_n_20=== 0)) { 3773563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3774563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (term = (sc_list("\u1E9Cor", term, (new sc_Pair("\u1E9Cf",null))))); 3775563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (--sc_n_20); 3776563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3777563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3778563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_term_22 = term); 3779563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!(sc_term_22 instanceof sc_Pair)) 3780563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (optrOpnd = sc_term_22); 3781563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3782563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (optrOpnd = (new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_22.car))), (translate_args_nboyer((sc_term_22.cdr)))))); 3783563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (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))); 3784563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (answer = (tautologyp_nboyer((rewrite_nboyer(sc_term_21)), null, null))); 3785563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_write(rewrite_count_nboyer)); 3786563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_display(" rewrites")); 3787563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_newline()); 3788563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((answer!== false)) 3789563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return rewrite_count_nboyer; 3790563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3791563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3792563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3793563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3794563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 3795563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* Exported Variables */ 3796563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar BgL_parsezd2ze3nbzd2treesze3; 3797563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar BgL_earleyzd2benchmarkzd2; 3798563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar BgL_parsezd2ze3parsedzf3zc2; 3799563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar test; 3800563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar BgL_parsezd2ze3treesz31; 3801563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar BgL_makezd2parserzd2; 3802563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* End Exports */ 3803563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3804563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar const_earley; 3805563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 3806563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (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))); 3807563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_makezd2parserzd2 = function(grammar, lexer) { 3808563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var i; 3809563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var parser_descr; 3810563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var def_loop; 3811563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nb_nts; 3812563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var names; 3813563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var steps; 3814563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var predictors; 3815563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var enders; 3816563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var starters; 3817563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nts; 3818563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_names_1; 3819563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_steps_2; 3820563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_predictors_3; 3821563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_enders_4; 3822563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_starters_5; 3823563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nb_confs; 3824563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_defzd2loop_6zd2; 3825563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_nbzd2nts_7zd2; 3826563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_nts_8; 3827563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_defzd2loop_9zd2; 3828563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ind; 3829563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3830563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ind = function(nt, sc_nts_10) { 3831563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var i; 3832563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3833563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (i = ((sc_nts_10.length)-(1))); 3834563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 3835563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((i>=(0))) 3836563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((sc_isEqual((sc_nts_10[i]), nt))) 3837563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return i; 3838563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3839563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (--i); 3840563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3841563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 3842563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3843563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3844563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3845563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_nts_8 = ((BgL_sc_defzd2loop_9zd2 = function(defs, sc_nts_11) { 3846563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var rule_loop; 3847563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var head; 3848563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var def; 3849563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, sc_nts_12) { 3850563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nt; 3851563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l; 3852563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_nts_13; 3853563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var rule; 3854563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((rules instanceof sc_Pair)) 3855563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3856563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (rule = (rules.car)); 3857563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = rule); 3858563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_nts_13 = sc_nts_12); 3859563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((l instanceof sc_Pair)) { 3860563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3861563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (nt = (l.car)); 3862563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (l.cdr)); 3863563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_nts_13 = (((sc_member(nt, sc_nts_13))!== false)?sc_nts_13:(new sc_Pair(nt, sc_nts_13)))); 3864563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3865563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3866563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (rule_loop((rules.cdr), sc_nts_13)); 3867563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3868563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3869563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (BgL_sc_defzd2loop_9zd2((defs.cdr), sc_nts_12)); 3870563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }), (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))))); 3871563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }), (BgL_sc_defzd2loop_9zd2(grammar, null)))); 3872563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_nbzd2nts_7zd2 = (sc_nts_8.length)); 3873563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (nb_confs = (((BgL_sc_defzd2loop_6zd2 = function(defs, BgL_sc_nbzd2confs_14zd2) { 3874563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var rule_loop; 3875563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var def; 3876563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ((defs instanceof sc_Pair)?((def = (defs.car)), (rule_loop = function(rules, BgL_sc_nbzd2confs_15zd2) { 3877563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l; 3878563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_nbzd2confs_16zd2; 3879563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var rule; 3880563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((rules instanceof sc_Pair)) 3881563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3882563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (rule = (rules.car)); 3883563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = rule); 3884563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_nbzd2confs_16zd2 = BgL_sc_nbzd2confs_15zd2); 3885563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((l instanceof sc_Pair)) { 3886563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3887563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (l.cdr)); 3888563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (++BgL_sc_nbzd2confs_16zd2); 3889563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3890563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3891563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (rule_loop((rules.cdr), (BgL_sc_nbzd2confs_16zd2+(1)))); 3892563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3893563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3894563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (BgL_sc_defzd2loop_6zd2((defs.cdr), BgL_sc_nbzd2confs_15zd2)); 3895563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }), (rule_loop((def.cdr), BgL_sc_nbzd2confs_14zd2))):BgL_sc_nbzd2confs_14zd2); 3896563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }), (BgL_sc_defzd2loop_6zd2(grammar, (0))))+BgL_sc_nbzd2nts_7zd2)); 3897563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_starters_5 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null))); 3898563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_enders_4 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null))); 3899563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_predictors_3 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null))); 3900563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_steps_2 = (sc_makeVector(nb_confs, false))); 3901563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_names_1 = (sc_makeVector(nb_confs, false))); 3902563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (nts = sc_nts_8); 3903563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (starters = sc_starters_5); 3904563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (enders = sc_enders_4); 3905563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (predictors = sc_predictors_3); 3906563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (steps = sc_steps_2); 3907563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (names = sc_names_1); 3908563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (nb_nts = (sc_nts_8.length)); 3909563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (i = (nb_nts-(1))); 3910563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((i>=(0))) { 3911563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3912563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_steps_2[i] = (i-nb_nts)); 3913563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_names_1[i] = (sc_list((sc_nts_8[i]), (0)))); 3914563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_enders_4[i] = (sc_list(i))); 3915563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (--i); 3916563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3917563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3918563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark def_loop = function(defs, conf) { 3919563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var rule_loop; 3920563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var head; 3921563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var def; 3922563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, conf, rule_num) { 3923563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var i; 3924563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_i_17; 3925563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nt; 3926563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l; 3927563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_conf_18; 3928563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_i_19; 3929563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var rule; 3930563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((rules instanceof sc_Pair)) 3931563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3932563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (rule = (rules.car)); 3933563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (names[conf] = (sc_list(head, rule_num))); 3934563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_i_19 = (ind(head, nts))); 3935563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (starters[sc_i_19] = (new sc_Pair(conf, (starters[sc_i_19])))); 3936563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = rule); 3937563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_conf_18 = conf); 3938563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((l instanceof sc_Pair)) { 3939563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 3940563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (nt = (l.car)); 3941563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (steps[sc_conf_18] = (ind(nt, nts))); 3942563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_i_17 = (ind(nt, nts))); 3943563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (predictors[sc_i_17] = (new sc_Pair(sc_conf_18, (predictors[sc_i_17])))); 3944563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (l.cdr)); 3945563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (++sc_conf_18); 3946563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3947563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3948563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (steps[sc_conf_18] = ((ind(head, nts))-nb_nts)); 3949563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (i = (ind(head, nts))); 3950563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (enders[i] = (new sc_Pair(sc_conf_18, (enders[i])))); 3951563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (rule_loop((rules.cdr), (sc_conf_18+(1)), (rule_num+(1)))); 3952563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3953563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 3954563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (def_loop((defs.cdr), conf)); 3955563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }), (rule_loop((def.cdr), conf, (1)))):undefined); 3956563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 3957563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (def_loop(grammar, (sc_nts_8.length))); 3958563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (parser_descr = [lexer, sc_nts_8, sc_starters_5, sc_enders_4, sc_predictors_3, sc_steps_2, sc_names_1]); 3959563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return function(input) { 3960563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var optrOpnd; 3961563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_optrOpnd_20; 3962563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_optrOpnd_21; 3963563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_optrOpnd_22; 3964563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var loop1; 3965563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_stateza2_23za2; 3966563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var toks; 3967563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_nbzd2nts_24zd2; 3968563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_steps_25; 3969563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_enders_26; 3970563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var state_num; 3971563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_statesza2_27za2; 3972563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var states; 3973563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var i; 3974563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var conf; 3975563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l; 3976563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tok_nts; 3977563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_i_28; 3978563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_i_29; 3979563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l1; 3980563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l2; 3981563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tok; 3982563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tail1129; 3983563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var L1125; 3984563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var goal_enders; 3985563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_statesza2_30za2; 3986563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_nbzd2nts_31zd2; 3987563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_nbzd2confs_32zd2; 3988563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nb_toks; 3989563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var goal_starters; 3990563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_states_33; 3991563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_nbzd2confs_34zd2; 3992563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_nbzd2toks_35zd2; 3993563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_toks_36; 3994563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var falseHead1128; 3995563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_names_37; 3996563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_steps_38; 3997563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_predictors_39; 3998563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_enders_40; 3999563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_starters_41; 4000563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_nts_42; 4001563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var lexer; 4002563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_ind_43; 4003563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var make_states; 4004563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_confzd2setzd2getza2_44za2; 4005563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var conf_set_merge_new_bang; 4006563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var conf_set_adjoin; 4007563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_confzd2setzd2adjoinza2_45za2; 4008563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_confzd2setzd2adjoinza2za2_46z00; 4009563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var conf_set_union; 4010563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var forw; 4011563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var is_parsed; 4012563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var deriv_trees; 4013563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_derivzd2treesza2_47z70; 4014563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nb_deriv_trees; 4015563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_nbzd2derivzd2treesza2_48za2; 4016563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4017563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_ind_43 = function(nt, sc_nts_49) { 4018563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var i; 4019563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4020563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (i = ((sc_nts_49.length)-(1))); 4021563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 4022563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((i>=(0))) 4023563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((sc_isEqual((sc_nts_49[i]), nt))) 4024563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return i; 4025563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4026563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (--i); 4027563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4028563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 4029563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4030563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4031563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4032563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark make_states = function(BgL_sc_nbzd2toks_50zd2, BgL_sc_nbzd2confs_51zd2) { 4033563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var v; 4034563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var i; 4035563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_states_52; 4036563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4037563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_states_52 = (sc_makeVector((BgL_sc_nbzd2toks_50zd2+(1)), false))); 4038563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (i = BgL_sc_nbzd2toks_50zd2); 4039563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((i>=(0))) { 4040563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4041563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (v = (sc_makeVector((BgL_sc_nbzd2confs_51zd2+(1)), false))); 4042563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (v[(0)] = (-1)); 4043563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_states_52[i] = v); 4044563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (--i); 4045563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4046563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4047563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_states_52; 4048563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4049563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4050563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_sc_confzd2setzd2getza2_44za2 = function(state, BgL_sc_statezd2num_53zd2, sc_conf_54) { 4051563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var conf_set; 4052563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_confzd2set_55zd2; 4053563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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))); 4054563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4055563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark conf_set_merge_new_bang = function(conf_set) { 4056563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ((conf_set[((conf_set[(1)])+(5))] = (conf_set[(4)])), (conf_set[(1)] = (conf_set[(3)])), (conf_set[(3)] = (-1)), (conf_set[(4)] = (-1))); 4057563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4058563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark conf_set_adjoin = function(state, conf_set, sc_conf_56, i) { 4059563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tail; 4060563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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)); 4061563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4062563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_sc_confzd2setzd2adjoinza2_45za2 = function(sc_states_57, BgL_sc_statezd2num_58zd2, l, i) { 4063563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var conf_set; 4064563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_conf_59; 4065563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l1; 4066563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var state; 4067563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4068563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (state = (sc_states_57[BgL_sc_statezd2num_58zd2])); 4069563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l1 = l); 4070563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((l1 instanceof sc_Pair)) { 4071563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4072563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_conf_59 = (l1.car)); 4073563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (conf_set = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_58zd2, sc_conf_59))); 4074563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (((conf_set[(i+(5))])=== false)) 4075563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4076563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (conf_set_adjoin(state, conf_set, sc_conf_59, i)); 4077563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l1 = (l1.cdr)); 4078563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4079563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4080563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l1 = (l1.cdr)); 4081563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4082563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4083563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return undefined; 4084563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4085563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4086563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_sc_confzd2setzd2adjoinza2za2_46z00 = function(sc_states_60, BgL_sc_statesza2_61za2, BgL_sc_statezd2num_62zd2, sc_conf_63, i) { 4087563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_confzd2setza2_64z70; 4088563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_stateza2_65za2; 4089563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var conf_set; 4090563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var state; 4091563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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)); 4092563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4093563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark conf_set_union = function(state, conf_set, sc_conf_66, other_set) { 4094563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var i; 4095563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4096563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (i = (other_set[(2)])); 4097563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((i>=(0))) { 4098563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (((conf_set[(i+(5))])=== false)) 4099563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4100563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (conf_set_adjoin(state, conf_set, sc_conf_66, i)); 4101563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (i = (other_set[(i+(5))])); 4102563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4103563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4104563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (i = (other_set[(i+(5))])); 4105563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4106563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return undefined; 4107563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4108563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4109563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark forw = function(sc_states_67, BgL_sc_statezd2num_68zd2, sc_starters_69, sc_enders_70, sc_predictors_71, sc_steps_72, sc_nts_73) { 4110563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var next_set; 4111563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var next; 4112563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var conf_set; 4113563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ender; 4114563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l; 4115563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var starter_set; 4116563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var starter; 4117563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_l_74; 4118563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_loop1_75; 4119563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var head; 4120563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_confzd2set_76zd2; 4121563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_statezd2num_77zd2; 4122563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var state; 4123563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_states_78; 4124563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var preds; 4125563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_confzd2set_79zd2; 4126563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var step; 4127563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_conf_80; 4128563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_nbzd2nts_81zd2; 4129563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_state_82; 4130563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4131563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_state_82 = (sc_states_67[BgL_sc_statezd2num_68zd2])); 4132563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_nbzd2nts_81zd2 = (sc_nts_73.length)); 4133563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 4134563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4135563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_conf_80 = (sc_state_82[(0)])); 4136563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((sc_conf_80>=(0))) 4137563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4138563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (step = (sc_steps_72[sc_conf_80])); 4139563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_confzd2set_79zd2 = (sc_state_82[(sc_conf_80+(1))])); 4140563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (head = (BgL_sc_confzd2set_79zd2[(4)])); 4141563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_state_82[(0)] = (BgL_sc_confzd2set_79zd2[(0)])); 4142563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (conf_set_merge_new_bang(BgL_sc_confzd2set_79zd2)); 4143563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((step>=(0))) 4144563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4145563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_l_74 = (sc_starters_69[step])); 4146563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((sc_l_74 instanceof sc_Pair)) { 4147563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4148563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (starter = (sc_l_74.car)); 4149563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (starter_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, starter))); 4150563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (((starter_set[(BgL_sc_statezd2num_68zd2+(5))])=== false)) 4151563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4152563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (conf_set_adjoin(sc_state_82, starter_set, starter, BgL_sc_statezd2num_68zd2)); 4153563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_l_74 = (sc_l_74.cdr)); 4154563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4155563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4156563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_l_74 = (sc_l_74.cdr)); 4157563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4158563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4159563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (sc_enders_70[step])); 4160563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((l instanceof sc_Pair)) { 4161563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4162563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (ender = (l.car)); 4163563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((((conf_set = (sc_state_82[(ender+(1))])), ((conf_set!== false)?(conf_set[(BgL_sc_statezd2num_68zd2+(5))]):false))!== false)) 4164563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4165563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (next = (sc_conf_80+(1))); 4166563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (next_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, next))); 4167563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (conf_set_union(sc_state_82, next_set, next, BgL_sc_confzd2set_79zd2)); 4168563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (l.cdr)); 4169563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4170563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4171563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (l.cdr)); 4172563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4173563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4174563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4175563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4176563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4177563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (preds = (sc_predictors_71[(step+BgL_sc_nbzd2nts_81zd2)])); 4178563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_states_78 = sc_states_67); 4179563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (state = sc_state_82); 4180563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_statezd2num_77zd2 = BgL_sc_statezd2num_68zd2); 4181563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_confzd2set_76zd2 = BgL_sc_confzd2set_79zd2); 4182563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_loop1_75 = function(l) { 4183563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_state_83; 4184563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_nextzd2set_84zd2; 4185563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_next_85; 4186563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var pred_set; 4187563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var i; 4188563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var pred; 4189563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((l instanceof sc_Pair)) 4190563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4191563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (pred = (l.car)); 4192563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (i = head); 4193563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((i>=(0))) { 4194563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4195563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (pred_set = ((sc_state_83 = (sc_states_78[i])), (sc_state_83[(pred+(1))]))); 4196563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((pred_set!== false)) 4197563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4198563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_next_85 = (pred+(1))); 4199563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_nextzd2set_84zd2 = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_77zd2, sc_next_85))); 4200563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (conf_set_union(state, BgL_sc_nextzd2set_84zd2, sc_next_85, pred_set)); 4201563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4202563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (i = (BgL_sc_confzd2set_76zd2[(i+(5))])); 4203563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4204563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4205563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (sc_loop1_75((l.cdr))); 4206563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4207563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4208563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return undefined; 4209563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4210563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_loop1_75(preds)); 4211563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4212563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4213563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4214563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return undefined; 4215563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4216563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4217563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4218563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4219563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark is_parsed = function(nt, i, j, sc_nts_86, sc_enders_87, sc_states_88) { 4220563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var conf_set; 4221563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var state; 4222563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_conf_89; 4223563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l; 4224563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_ntza2_90za2; 4225563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4226563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_ntza2_90za2 = (sc_ind_43(nt, sc_nts_86))); 4227563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((BgL_sc_ntza2_90za2!== false)) 4228563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4229563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_nts_86.length); 4230563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (sc_enders_87[BgL_sc_ntza2_90za2])); 4231563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 4232563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((l instanceof sc_Pair)) 4233563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4234563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_conf_89 = (l.car)); 4235563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((((state = (sc_states_88[j])), (conf_set = (state[(sc_conf_89+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)) 4236563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 4237563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4238563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (l.cdr)); 4239563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4240563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4241563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 4242563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4243563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4244563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4245563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 4246563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4247563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4248563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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) { 4249563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_loop1_98; 4250563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var prev; 4251563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var name; 4252563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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) { 4253563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var loop2; 4254563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ender_set; 4255563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var state; 4256563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ender; 4257563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l1; 4258563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l2; 4259563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 4260563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((l1 instanceof sc_Pair)) 4261563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4262563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (ender = (l1.car)); 4263563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (ender_set = ((state = (sc_states_96[j])), (state[(ender+(1))]))); 4264563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((ender_set!== false)) 4265563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4266563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark loop2 = function(k, l2) { 4267563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var loop3; 4268563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ender_trees; 4269563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var prev_trees; 4270563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var conf_set; 4271563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_state_99; 4272563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var k; 4273563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l2; 4274563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 4275563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((k>=(0))) 4276563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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))) 4277563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4278563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (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))); 4279563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (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))); 4280563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark loop3 = function(l3, l2) { 4281563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l4; 4282563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_l2_100; 4283563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ender_tree; 4284563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((l3 instanceof sc_Pair)) 4285563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4286563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (ender_tree = (sc_list((l3.car)))); 4287563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l4 = prev_trees); 4288563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_l2_100 = l2); 4289563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((l4 instanceof sc_Pair)) { 4290563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4291563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_l2_100 = (new sc_Pair((sc_append((l4.car), ender_tree)), sc_l2_100))); 4292563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l4 = (l4.cdr)); 4293563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4294563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4295563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (loop3((l3.cdr), sc_l2_100)); 4296563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4297563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4298563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (loop2((ender_set[(k+(5))]), l2)); 4299563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4300563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (loop3(ender_trees, l2)); 4301563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4302563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4303563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (k = (ender_set[(k+(5))])); 4304563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4305563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (sc_loop1_98((l1.cdr), l2)); 4306563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4307563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4308563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (loop2((ender_set[(2)]), l2)); 4309563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4310563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4311563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l1 = (l1.cdr)); 4312563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4313563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4314563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return l2; 4315563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4316563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }), (sc_loop1_98((sc_enders_92[(sc_steps_93[prev])]), null))))); 4317563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4318563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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) { 4319563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var conf_set; 4320563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var state; 4321563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_conf_107; 4322563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l; 4323563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var trees; 4324563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_nbzd2nts_108zd2; 4325563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_ntza2_109za2; 4326563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4327563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_ntza2_109za2 = (sc_ind_43(nt, sc_nts_101))); 4328563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((BgL_sc_ntza2_109za2!== false)) 4329563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4330563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_nbzd2nts_108zd2 = (sc_nts_101.length)); 4331563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (sc_enders_102[BgL_sc_ntza2_109za2])); 4332563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (trees = null); 4333563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((l instanceof sc_Pair)) { 4334563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4335563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_conf_107 = (l.car)); 4336563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((((state = (sc_states_106[j])), (conf_set = (state[(sc_conf_107+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)) 4337563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4338563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (l.cdr)); 4339563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (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))); 4340563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4341563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4342563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (l.cdr)); 4343563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4344563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4345563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return trees; 4346563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4347563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4348563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 4349563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4350563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4351563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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) { 4352563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_loop1_116; 4353563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tmp1124; 4354563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var prev; 4355563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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) { 4356563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nb_ender_trees; 4357563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nb_prev_trees; 4358563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var conf_set; 4359563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var state; 4360563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var k; 4361563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var n; 4362563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ender_set; 4363563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_state_117; 4364563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ender; 4365563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l; 4366563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_n_118; 4367563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 4368563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((l instanceof sc_Pair)) 4369563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4370563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (ender = (l.car)); 4371563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (ender_set = ((sc_state_117 = (sc_states_114[j])), (sc_state_117[(ender+(1))]))); 4372563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((ender_set!== false)) 4373563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4374563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (k = (ender_set[(2)])); 4375563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (n = sc_n_118); 4376563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((k>=(0))) { 4377563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (((k>=i)&&(((state = (sc_states_114[k])), (conf_set = (state[(prev+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))) 4378563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4379563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (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))); 4380563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (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))); 4381563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (k = (ender_set[(k+(5))])); 4382563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (n +=(nb_prev_trees*nb_ender_trees)); 4383563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4384563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4385563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (k = (ender_set[(k+(5))])); 4386563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4387563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (sc_loop1_116((l.cdr), n)); 4388563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4389563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4390563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (l.cdr)); 4391563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4392563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4393563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return sc_n_118; 4394563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4395563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }), (sc_loop1_116((sc_enders_111[(sc_steps_112[prev])]), (0)))))); 4396563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4397563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_sc_nbzd2derivzd2treesza2_48za2 = function(nt, i, j, sc_nts_119, sc_enders_120, sc_steps_121, sc_toks_122, sc_states_123) { 4398563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var conf_set; 4399563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var state; 4400563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_conf_124; 4401563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l; 4402563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nb_trees; 4403563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_nbzd2nts_125zd2; 4404563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_ntza2_126za2; 4405563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4406563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_ntza2_126za2 = (sc_ind_43(nt, sc_nts_119))); 4407563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((BgL_sc_ntza2_126za2!== false)) 4408563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4409563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_nbzd2nts_125zd2 = (sc_nts_119.length)); 4410563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (sc_enders_120[BgL_sc_ntza2_126za2])); 4411563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (nb_trees = (0)); 4412563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((l instanceof sc_Pair)) { 4413563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4414563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_conf_124 = (l.car)); 4415563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((((state = (sc_states_123[j])), (conf_set = (state[(sc_conf_124+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)) 4416563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4417563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (l.cdr)); 4418563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (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)); 4419563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4420563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4421563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (l.cdr)); 4422563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4423563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4424563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return nb_trees; 4425563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4426563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4427563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 4428563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4429563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4430563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (lexer = (parser_descr[(0)])); 4431563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_nts_42 = (parser_descr[(1)])); 4432563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_starters_41 = (parser_descr[(2)])); 4433563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_enders_40 = (parser_descr[(3)])); 4434563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_predictors_39 = (parser_descr[(4)])); 4435563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_steps_38 = (parser_descr[(5)])); 4436563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_names_37 = (parser_descr[(6)])); 4437563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (falseHead1128 = (new sc_Pair(null, null))); 4438563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (L1125 = (lexer(input))); 4439563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (tail1129 = falseHead1128); 4440563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (!(L1125 === null)) { 4441563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4442563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (tok = (L1125.car)); 4443563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l1 = (tok.cdr)); 4444563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l2 = null); 4445563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((l1 instanceof sc_Pair)) { 4446563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4447563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_i_29 = (sc_ind_43((l1.car), sc_nts_42))); 4448563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((sc_i_29!== false)) 4449563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4450563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l1 = (l1.cdr)); 4451563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l2 = (new sc_Pair(sc_i_29, l2))); 4452563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4453563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4454563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l1 = (l1.cdr)); 4455563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4456563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4457563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_optrOpnd_22 = (new sc_Pair((tok.car), (sc_reverse(l2))))); 4458563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_optrOpnd_21 = (new sc_Pair(sc_optrOpnd_22, null))); 4459563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (tail1129.cdr = sc_optrOpnd_21); 4460563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (tail1129 = (tail1129.cdr)); 4461563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (L1125 = (L1125.cdr)); 4462563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4463563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4464563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_optrOpnd_20 = (falseHead1128.cdr)); 4465563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_toks_36 = (sc_list2vector(sc_optrOpnd_20))); 4466563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_nbzd2toks_35zd2 = (sc_toks_36.length)); 4467563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_nbzd2confs_34zd2 = (sc_steps_38.length)); 4468563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_states_33 = (make_states(BgL_sc_nbzd2toks_35zd2, BgL_sc_nbzd2confs_34zd2))); 4469563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (goal_starters = (sc_starters_41[(0)])); 4470563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_confzd2setzd2adjoinza2_45za2(sc_states_33, (0), goal_starters, (0))); 4471563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (forw(sc_states_33, (0), sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_nts_42)); 4472563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_i_28 = (0)); 4473563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((sc_i_28<BgL_sc_nbzd2toks_35zd2)) { 4474563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4475563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (tok_nts = ((sc_toks_36[sc_i_28]).cdr)); 4476563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_confzd2setzd2adjoinza2_45za2(sc_states_33, (sc_i_28+(1)), tok_nts, sc_i_28)); 4477563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (forw(sc_states_33, (sc_i_28+(1)), sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_nts_42)); 4478563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (++sc_i_28); 4479563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4480563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4481563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (nb_toks = (sc_toks_36.length)); 4482563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_nbzd2confs_32zd2 = (sc_steps_38.length)); 4483563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_nbzd2nts_31zd2 = (sc_nts_42.length)); 4484563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_statesza2_30za2 = (make_states(nb_toks, BgL_sc_nbzd2confs_32zd2))); 4485563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (goal_enders = (sc_enders_40[(0)])); 4486563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = goal_enders); 4487563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((l instanceof sc_Pair)) { 4488563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4489563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (conf = (l.car)); 4490563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_33, BgL_sc_statesza2_30za2, nb_toks, conf, (0))); 4491563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (l.cdr)); 4492563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4493563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4494563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (i = nb_toks); 4495563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((i>=(0))) { 4496563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4497563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (states = sc_states_33); 4498563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_statesza2_27za2 = BgL_sc_statesza2_30za2); 4499563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (state_num = i); 4500563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_enders_26 = sc_enders_40); 4501563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_steps_25 = sc_steps_38); 4502563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_nbzd2nts_24zd2 = BgL_sc_nbzd2nts_31zd2); 4503563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (toks = sc_toks_36); 4504563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_stateza2_23za2 = (BgL_sc_statesza2_30za2[i])); 4505563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark loop1 = function() { 4506563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_loop1_127; 4507563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var prev; 4508563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_statesza2_128za2; 4509563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_states_129; 4510563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var j; 4511563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var i; 4512563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_i_130; 4513563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var head; 4514563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var conf_set; 4515563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_conf_131; 4516563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4517563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_conf_131 = (BgL_sc_stateza2_23za2[(0)])); 4518563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((sc_conf_131>=(0))) 4519563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4520563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (conf_set = (BgL_sc_stateza2_23za2[(sc_conf_131+(1))])); 4521563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (head = (conf_set[(4)])); 4522563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_stateza2_23za2[(0)] = (conf_set[(0)])); 4523563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (conf_set_merge_new_bang(conf_set)); 4524563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_i_130 = head); 4525563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((sc_i_130>=(0))) { 4526563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4527563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (i = sc_i_130); 4528563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (j = state_num); 4529563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_states_129 = states); 4530563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_statesza2_128za2 = BgL_sc_statesza2_27za2); 4531563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (prev = (sc_conf_131-(1))); 4532563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (((sc_conf_131>=BgL_sc_nbzd2nts_24zd2)&&((sc_steps_25[prev])>=(0)))) 4533563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4534563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark sc_loop1_127 = function(l) { 4535563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var k; 4536563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ender_set; 4537563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var state; 4538563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ender; 4539563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var l; 4540563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (true) { 4541563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((l instanceof sc_Pair)) 4542563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4543563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (ender = (l.car)); 4544563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (ender_set = ((state = (sc_states_129[j])), (state[(ender+(1))]))); 4545563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((ender_set!== false)) 4546563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4547563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (k = (ender_set[(2)])); 4548563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while ((k>=(0))) { 4549563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4550563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((k>=i)) 4551563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (((BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, k, prev, i))!== false)) 4552563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, j, ender, k)); 4553563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (k = (ender_set[(k+(5))])); 4554563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4555563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4556563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (sc_loop1_127((l.cdr))); 4557563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4558563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4559563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (l = (l.cdr)); 4560563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4561563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4562563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return undefined; 4563563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4564563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4565563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_loop1_127((sc_enders_26[(sc_steps_25[prev])]))); 4566563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4567563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (sc_i_130 = (conf_set[(sc_i_130+(5))])); 4568563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4569563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4570563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (loop1()); 4571563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4572563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 4573563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return undefined; 4574563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4575563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4576563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (loop1()); 4577563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (--i); 4578563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4579563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4580563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (optrOpnd = BgL_sc_statesza2_30za2); 4581563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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]; 4582563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4583563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4584563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4585563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4586563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_parsezd2ze3parsedzf3zc2 = function(parse, nt, i, j) { 4587563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var is_parsed; 4588563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var states; 4589563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var enders; 4590563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nts; 4591563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ((nts = (parse[(0)])), (enders = (parse[(2)])), (states = (parse[(7)])), (is_parsed = (parse[(8)])), (is_parsed(nt, i, j, nts, enders, states))); 4592563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4593563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_parsezd2ze3treesz31 = function(parse, nt, i, j) { 4594563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_derivzd2treesza2_132z70; 4595563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var states; 4596563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var toks; 4597563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var names; 4598563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var steps; 4599563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var enders; 4600563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nts; 4601563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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))); 4602563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4603563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_parsezd2ze3nbzd2treesze3 = function(parse, nt, i, j) { 4604563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var BgL_sc_nbzd2derivzd2treesza2_133za2; 4605563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var states; 4606563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var toks; 4607563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var steps; 4608563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var enders; 4609563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nts; 4610563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 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))); 4611563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4612563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark test = function(k) { 4613563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var x; 4614563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var p; 4615563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ((p = (BgL_makezd2parserzd2(const_earley, function(l) { 4616563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var sc_x_134; 4617563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var tail1134; 4618563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var L1130; 4619563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var falseHead1133; 4620563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4621563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (falseHead1133 = (new sc_Pair(null, null))); 4622563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (tail1134 = falseHead1133); 4623563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (L1130 = l); 4624563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (!(L1130 === null)) { 4625563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 4626563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (tail1134.cdr = (new sc_Pair(((sc_x_134 = (L1130.car)), (sc_list(sc_x_134, sc_x_134))), null))); 4627563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (tail1134 = (tail1134.cdr)); 4628563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (L1130 = (L1130.cdr)); 4629563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4630563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4631563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (falseHead1133.cdr); 4632563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4633563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }))), (x = (p((sc_vector2list((sc_makeVector(k, "\u1E9Ca"))))))), (sc_length((BgL_parsezd2ze3treesz31(x, "\u1E9Cs", (0), k))))); 4634563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4635563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_earleyzd2benchmarkzd2 = function() { 4636563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var args = null; 4637563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) { 4638563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark args = sc_cons(arguments[sc_tmp], args); 4639563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4640563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var k; 4641563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ((k = ((args === null)?(7):(args.car))), (BgL_runzd2benchmarkzd2("earley", (1), function() { 4642563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return (test(k)); 4643563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }, function(result) { 46440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return ((sc_display(result)), (sc_newline()), result == 132); 4645563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }))); 4646563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark }; 4647563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 4648563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 4649563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 4650563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/************* END OF GENERATED CODE *************/ 4651563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// Invoke this function to run a benchmark. 4652563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// The first argument is a string identifying the benchmark. 4653563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// The second argument is the number of times to run the benchmark. 4654563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// The third argument is a function that runs the benchmark. 4655563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// The fourth argument is a unary function that warns if the result 4656563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// returned by the benchmark is incorrect. 4657563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// 4658563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// Example: 4659563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// RunBenchmark("new Array()", 4660563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// 1, 4661563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// function () { new Array(1000000); } 4662563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// function (v) { 4663563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// return (v instanceof Array) && (v.length == 1000000); 4664563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// }); 4665563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 4666563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkSC_DEFAULT_OUT = new sc_GenericOutputPort(function(s) {}); 4667563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkSC_ERROR_OUT = SC_DEFAULT_OUT; 4668563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 4669563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction RunBenchmark(name, count, run, warn) { 4670563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var n = 0; n < count; ++n) { 4671563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark result = run(); 46720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!warn(result)) { 46730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch throw new Error("Earley or Boyer did incorrect number of rewrites"); 46740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 4675563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 4676563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 4677563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 4678563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar BgL_runzd2benchmarkzd2 = RunBenchmark; 4679563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 4680563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfor (var i = 0; i < 4; ++i) { 4681563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_earleyzd2benchmarkzd2(); 4682563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BgL_nboyerzd2benchmarkzd2(); 4683563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 4684