1727e995b7bba3c57fb1e5c156d386ca11894f781v// This file is automatically generated by scheme2js, except for the 2727e995b7bba3c57fb1e5c156d386ca11894f781v// benchmark harness code at the beginning and end of the file. 3727e995b7bba3c57fb1e5c156d386ca11894f781v 4d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.comvar EarleyBoyer = new BenchmarkSuite('EarleyBoyer', 666463, [ 5727e995b7bba3c57fb1e5c156d386ca11894f781v new Benchmark("Earley", function () { BgL_earleyzd2benchmarkzd2(); }), 6727e995b7bba3c57fb1e5c156d386ca11894f781v new Benchmark("Boyer", function () { BgL_nboyerzd2benchmarkzd2(); }) 7727e995b7bba3c57fb1e5c156d386ca11894f781v]); 8727e995b7bba3c57fb1e5c156d386ca11894f781v 9727e995b7bba3c57fb1e5c156d386ca11894f781v 10727e995b7bba3c57fb1e5c156d386ca11894f781v/************* GENERATED FILE - DO NOT EDIT *************/ 11727e995b7bba3c57fb1e5c156d386ca11894f781v/************* GENERATED FILE - DO NOT EDIT *************/ 12727e995b7bba3c57fb1e5c156d386ca11894f781v/************* GENERATED FILE - DO NOT EDIT *************/ 13727e995b7bba3c57fb1e5c156d386ca11894f781v/************* GENERATED FILE - DO NOT EDIT *************/ 14727e995b7bba3c57fb1e5c156d386ca11894f781v/************* GENERATED FILE - DO NOT EDIT *************/ 15727e995b7bba3c57fb1e5c156d386ca11894f781v/************* GENERATED FILE - DO NOT EDIT *************/ 16727e995b7bba3c57fb1e5c156d386ca11894f781v/************* GENERATED FILE - DO NOT EDIT *************/ 17727e995b7bba3c57fb1e5c156d386ca11894f781v/************* GENERATED FILE - DO NOT EDIT *************/ 18727e995b7bba3c57fb1e5c156d386ca11894f781v/* 19727e995b7bba3c57fb1e5c156d386ca11894f781v * To use write/prints/... the default-output port has to be set first. 20727e995b7bba3c57fb1e5c156d386ca11894f781v * Simply setting SC_DEFAULT_OUT and SC_ERROR_OUT to the desired values 21727e995b7bba3c57fb1e5c156d386ca11894f781v * should do the trick. 22727e995b7bba3c57fb1e5c156d386ca11894f781v * In the following example the std-out and error-port are redirected to 23727e995b7bba3c57fb1e5c156d386ca11894f781v * a DIV. 24727e995b7bba3c57fb1e5c156d386ca11894f781vfunction initRuntime() { 25727e995b7bba3c57fb1e5c156d386ca11894f781v function escapeHTML(s) { 26727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = s; 27727e995b7bba3c57fb1e5c156d386ca11894f781v tmp = tmp.replace(/&/g, "&"); 28727e995b7bba3c57fb1e5c156d386ca11894f781v tmp = tmp.replace(/</g, "<"); 29727e995b7bba3c57fb1e5c156d386ca11894f781v tmp = tmp.replace(/>/g, ">"); 30727e995b7bba3c57fb1e5c156d386ca11894f781v tmp = tmp.replace(/ /g, " "); 31727e995b7bba3c57fb1e5c156d386ca11894f781v tmp = tmp.replace(/\n/g, "<br />"); 32727e995b7bba3c57fb1e5c156d386ca11894f781v tmp = tmp.replace(/\t/g, "  "); 33727e995b7bba3c57fb1e5c156d386ca11894f781v return tmp; 34727e995b7bba3c57fb1e5c156d386ca11894f781v 35727e995b7bba3c57fb1e5c156d386ca11894f781v } 36727e995b7bba3c57fb1e5c156d386ca11894f781v 37727e995b7bba3c57fb1e5c156d386ca11894f781v document.write("<div id='stdout'></div>"); 38727e995b7bba3c57fb1e5c156d386ca11894f781v SC_DEFAULT_OUT = new sc_GenericOutputPort( 39727e995b7bba3c57fb1e5c156d386ca11894f781v function(s) { 40727e995b7bba3c57fb1e5c156d386ca11894f781v var stdout = document.getElementById('stdout'); 41727e995b7bba3c57fb1e5c156d386ca11894f781v stdout.innerHTML = stdout.innerHTML + escapeHTML(s); 42727e995b7bba3c57fb1e5c156d386ca11894f781v }); 43727e995b7bba3c57fb1e5c156d386ca11894f781v SC_ERROR_OUT = SC_DEFAULT_OUT; 44727e995b7bba3c57fb1e5c156d386ca11894f781v} 45727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 46727e995b7bba3c57fb1e5c156d386ca11894f781v 47727e995b7bba3c57fb1e5c156d386ca11894f781v 48727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_print_debug() { 49727e995b7bba3c57fb1e5c156d386ca11894f781v sc_print.apply(null, arguments); 50727e995b7bba3c57fb1e5c156d386ca11894f781v} 51727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export *js*)) */ 52727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_JS_GLOBALS = this; 53727e995b7bba3c57fb1e5c156d386ca11894f781v 54727e995b7bba3c57fb1e5c156d386ca11894f781vvar __sc_LINE=-1; 55727e995b7bba3c57fb1e5c156d386ca11894f781vvar __sc_FILE=""; 56727e995b7bba3c57fb1e5c156d386ca11894f781v 57727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 58727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_alert() { 59727e995b7bba3c57fb1e5c156d386ca11894f781v var len = arguments.length; 60727e995b7bba3c57fb1e5c156d386ca11894f781v var s = ""; 61727e995b7bba3c57fb1e5c156d386ca11894f781v var i; 62727e995b7bba3c57fb1e5c156d386ca11894f781v 63727e995b7bba3c57fb1e5c156d386ca11894f781v for( i = 0; i < len; i++ ) { 64727e995b7bba3c57fb1e5c156d386ca11894f781v s += sc_toDisplayString(arguments[ i ]); 65727e995b7bba3c57fb1e5c156d386ca11894f781v } 66727e995b7bba3c57fb1e5c156d386ca11894f781v 67727e995b7bba3c57fb1e5c156d386ca11894f781v return alert( s ); 68727e995b7bba3c57fb1e5c156d386ca11894f781v} 69727e995b7bba3c57fb1e5c156d386ca11894f781v 70727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 71727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_typeof( x ) { 72727e995b7bba3c57fb1e5c156d386ca11894f781v return typeof x; 73727e995b7bba3c57fb1e5c156d386ca11894f781v} 74727e995b7bba3c57fb1e5c156d386ca11894f781v 75727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 76727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_error() { 77727e995b7bba3c57fb1e5c156d386ca11894f781v var a = [sc_jsstring2symbol("*error*")]; 78727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < arguments.length; i++) { 79727e995b7bba3c57fb1e5c156d386ca11894f781v a[i+1] = arguments[i]; 80727e995b7bba3c57fb1e5c156d386ca11894f781v } 81727e995b7bba3c57fb1e5c156d386ca11894f781v throw a; 82727e995b7bba3c57fb1e5c156d386ca11894f781v} 83727e995b7bba3c57fb1e5c156d386ca11894f781v 84727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 85727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (prefix "throw "))) 86727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 87727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_raise(obj) { 88727e995b7bba3c57fb1e5c156d386ca11894f781v throw obj; 89727e995b7bba3c57fb1e5c156d386ca11894f781v} 90727e995b7bba3c57fb1e5c156d386ca11894f781v 91727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export with-handler-lambda)) */ 92727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_withHandlerLambda(handler, body) { 93727e995b7bba3c57fb1e5c156d386ca11894f781v try { 94727e995b7bba3c57fb1e5c156d386ca11894f781v return body(); 95727e995b7bba3c57fb1e5c156d386ca11894f781v } catch(e) { 96727e995b7bba3c57fb1e5c156d386ca11894f781v if (!e._internalException) 97727e995b7bba3c57fb1e5c156d386ca11894f781v return handler(e); 98727e995b7bba3c57fb1e5c156d386ca11894f781v else 99727e995b7bba3c57fb1e5c156d386ca11894f781v throw e; 100727e995b7bba3c57fb1e5c156d386ca11894f781v } 101727e995b7bba3c57fb1e5c156d386ca11894f781v} 102727e995b7bba3c57fb1e5c156d386ca11894f781v 103727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_properties = new Object(); 104727e995b7bba3c57fb1e5c156d386ca11894f781v 105727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 106727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_putpropBang(sym, key, val) { 107727e995b7bba3c57fb1e5c156d386ca11894f781v var ht = sc_properties[sym]; 108727e995b7bba3c57fb1e5c156d386ca11894f781v if (!ht) { 109727e995b7bba3c57fb1e5c156d386ca11894f781v ht = new Object(); 110727e995b7bba3c57fb1e5c156d386ca11894f781v sc_properties[sym] = ht; 111727e995b7bba3c57fb1e5c156d386ca11894f781v } 112727e995b7bba3c57fb1e5c156d386ca11894f781v ht[key] = val; 113727e995b7bba3c57fb1e5c156d386ca11894f781v} 114727e995b7bba3c57fb1e5c156d386ca11894f781v 115727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 116727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_getprop(sym, key) { 117727e995b7bba3c57fb1e5c156d386ca11894f781v var ht = sc_properties[sym]; 118727e995b7bba3c57fb1e5c156d386ca11894f781v if (ht) { 119727e995b7bba3c57fb1e5c156d386ca11894f781v if (key in ht) 120727e995b7bba3c57fb1e5c156d386ca11894f781v return ht[key]; 121727e995b7bba3c57fb1e5c156d386ca11894f781v else 122727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 123727e995b7bba3c57fb1e5c156d386ca11894f781v } else 124727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 125727e995b7bba3c57fb1e5c156d386ca11894f781v} 126727e995b7bba3c57fb1e5c156d386ca11894f781v 127727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 128727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_rempropBang(sym, key) { 129727e995b7bba3c57fb1e5c156d386ca11894f781v var ht = sc_properties[sym]; 130727e995b7bba3c57fb1e5c156d386ca11894f781v if (ht) 131727e995b7bba3c57fb1e5c156d386ca11894f781v delete ht[key]; 132727e995b7bba3c57fb1e5c156d386ca11894f781v} 133727e995b7bba3c57fb1e5c156d386ca11894f781v 134727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 135727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_any2String(o) { 136727e995b7bba3c57fb1e5c156d386ca11894f781v return jsstring2string(sc_toDisplayString(o)); 1371805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org} 138727e995b7bba3c57fb1e5c156d386ca11894f781v 139727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 140727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 2 2 "===")) 141727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 142727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 143727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isEqv(o1, o2) { 144727e995b7bba3c57fb1e5c156d386ca11894f781v return (o1 === o2); 145727e995b7bba3c57fb1e5c156d386ca11894f781v} 146727e995b7bba3c57fb1e5c156d386ca11894f781v 147727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 148727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 2 2 "===")) 149727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 150727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 151727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isEq(o1, o2) { 152727e995b7bba3c57fb1e5c156d386ca11894f781v return (o1 === o2); 153727e995b7bba3c57fb1e5c156d386ca11894f781v} 154727e995b7bba3c57fb1e5c156d386ca11894f781v 155727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 156727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 157727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 158727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isNumber(n) { 159727e995b7bba3c57fb1e5c156d386ca11894f781v return (typeof n === "number"); 160727e995b7bba3c57fb1e5c156d386ca11894f781v} 161727e995b7bba3c57fb1e5c156d386ca11894f781v 162727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 163727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 164727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 165727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isComplex(n) { 166727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_isNumber(n); 167727e995b7bba3c57fb1e5c156d386ca11894f781v} 168727e995b7bba3c57fb1e5c156d386ca11894f781v 169727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 170727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 171727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 172727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isReal(n) { 173727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_isNumber(n); 174727e995b7bba3c57fb1e5c156d386ca11894f781v} 175727e995b7bba3c57fb1e5c156d386ca11894f781v 176727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 177727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 178727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 179727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isRational(n) { 180727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_isReal(n); 181727e995b7bba3c57fb1e5c156d386ca11894f781v} 182727e995b7bba3c57fb1e5c156d386ca11894f781v 183727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 184727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 185727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 186727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isInteger(n) { 187727e995b7bba3c57fb1e5c156d386ca11894f781v return (parseInt(n) === n); 188727e995b7bba3c57fb1e5c156d386ca11894f781v} 189727e995b7bba3c57fb1e5c156d386ca11894f781v 190727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 191727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 192727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ", false"))) 193727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 194727e995b7bba3c57fb1e5c156d386ca11894f781v// we don't have exact numbers... 195727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isExact(n) { 196727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 197727e995b7bba3c57fb1e5c156d386ca11894f781v} 198727e995b7bba3c57fb1e5c156d386ca11894f781v 199727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 200727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ", true")) 201727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 202727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 203727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isInexact(n) { 204727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 205727e995b7bba3c57fb1e5c156d386ca11894f781v} 206727e995b7bba3c57fb1e5c156d386ca11894f781v 207727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export = =fx =fl) 208727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 209727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 2 2 "==="))) 210727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 211727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_equal(x) { 212727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 1; i < arguments.length; i++) 213727e995b7bba3c57fb1e5c156d386ca11894f781v if (x !== arguments[i]) 214727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 215727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 216727e995b7bba3c57fb1e5c156d386ca11894f781v} 217727e995b7bba3c57fb1e5c156d386ca11894f781v 218727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export < <fx <fl) 219727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 220727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 2 2 "<"))) 221727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 222727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_less(x) { 223727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 1; i < arguments.length; i++) { 224727e995b7bba3c57fb1e5c156d386ca11894f781v if (x >= arguments[i]) 225727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 226727e995b7bba3c57fb1e5c156d386ca11894f781v x = arguments[i]; 227727e995b7bba3c57fb1e5c156d386ca11894f781v } 228727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 229727e995b7bba3c57fb1e5c156d386ca11894f781v} 230727e995b7bba3c57fb1e5c156d386ca11894f781v 231727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export > >fx >fl) 232727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 233727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 2 2 ">"))) 234727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 235727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_greater(x, y) { 236727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 1; i < arguments.length; i++) { 237727e995b7bba3c57fb1e5c156d386ca11894f781v if (x <= arguments[i]) 238727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 239727e995b7bba3c57fb1e5c156d386ca11894f781v x = arguments[i]; 240727e995b7bba3c57fb1e5c156d386ca11894f781v } 241727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 242727e995b7bba3c57fb1e5c156d386ca11894f781v} 243727e995b7bba3c57fb1e5c156d386ca11894f781v 244727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export <= <=fx <=fl) 245727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 246727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 2 2 "<="))) 247727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 248727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_lessEqual(x, y) { 249727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 1; i < arguments.length; i++) { 250727e995b7bba3c57fb1e5c156d386ca11894f781v if (x > arguments[i]) 251727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 252727e995b7bba3c57fb1e5c156d386ca11894f781v x = arguments[i]; 253727e995b7bba3c57fb1e5c156d386ca11894f781v } 254727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 255727e995b7bba3c57fb1e5c156d386ca11894f781v} 256727e995b7bba3c57fb1e5c156d386ca11894f781v 257727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export >= >=fl >=fx) 258727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 259727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 2 2 ">="))) 260727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 261727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_greaterEqual(x, y) { 262727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 1; i < arguments.length; i++) { 263727e995b7bba3c57fb1e5c156d386ca11894f781v if (x < arguments[i]) 264727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 265727e995b7bba3c57fb1e5c156d386ca11894f781v x = arguments[i]; 266727e995b7bba3c57fb1e5c156d386ca11894f781v } 267727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 268727e995b7bba3c57fb1e5c156d386ca11894f781v} 269727e995b7bba3c57fb1e5c156d386ca11894f781v 270727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 271727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 272727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix "=== 0"))) 273727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 274727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isZero(x) { 275727e995b7bba3c57fb1e5c156d386ca11894f781v return (x === 0); 276727e995b7bba3c57fb1e5c156d386ca11894f781v} 277727e995b7bba3c57fb1e5c156d386ca11894f781v 278727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 279727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 280727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix "> 0"))) 281727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 282727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isPositive(x) { 283727e995b7bba3c57fb1e5c156d386ca11894f781v return (x > 0); 284727e995b7bba3c57fb1e5c156d386ca11894f781v} 285727e995b7bba3c57fb1e5c156d386ca11894f781v 286727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 287727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 288727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix "< 0"))) 289727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 290727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isNegative(x) { 291727e995b7bba3c57fb1e5c156d386ca11894f781v return (x < 0); 292727e995b7bba3c57fb1e5c156d386ca11894f781v} 293727e995b7bba3c57fb1e5c156d386ca11894f781v 294727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 295727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 296727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix "%2===1"))) 297727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 298727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isOdd(x) { 299727e995b7bba3c57fb1e5c156d386ca11894f781v return (x % 2 === 1); 300727e995b7bba3c57fb1e5c156d386ca11894f781v} 301727e995b7bba3c57fb1e5c156d386ca11894f781v 302727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 303727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 304727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix "%2===0"))) 305727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 306727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isEven(x) { 307727e995b7bba3c57fb1e5c156d386ca11894f781v return (x % 2 === 0); 308727e995b7bba3c57fb1e5c156d386ca11894f781v} 309727e995b7bba3c57fb1e5c156d386ca11894f781v 310727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 311727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_max = Math.max; 312727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 313727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_min = Math.min; 314727e995b7bba3c57fb1e5c156d386ca11894f781v 315727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export + +fx +fl) 316727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 0 #f "+" "0"))) 317727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 318727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_plus() { 319727e995b7bba3c57fb1e5c156d386ca11894f781v var sum = 0; 320727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < arguments.length; i++) 321727e995b7bba3c57fb1e5c156d386ca11894f781v sum += arguments[i]; 322727e995b7bba3c57fb1e5c156d386ca11894f781v return sum; 323727e995b7bba3c57fb1e5c156d386ca11894f781v} 324727e995b7bba3c57fb1e5c156d386ca11894f781v 325727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export * *fx *fl) 326727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 0 #f "*" "1"))) 327727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 328727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_multi() { 329727e995b7bba3c57fb1e5c156d386ca11894f781v var product = 1; 330727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < arguments.length; i++) 331727e995b7bba3c57fb1e5c156d386ca11894f781v product *= arguments[i]; 332727e995b7bba3c57fb1e5c156d386ca11894f781v return product; 333727e995b7bba3c57fb1e5c156d386ca11894f781v} 334727e995b7bba3c57fb1e5c156d386ca11894f781v 335727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export - -fx -fl) 336727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (minus))) 337727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 338727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_minus(x) { 339727e995b7bba3c57fb1e5c156d386ca11894f781v if (arguments.length === 1) 340727e995b7bba3c57fb1e5c156d386ca11894f781v return -x; 341727e995b7bba3c57fb1e5c156d386ca11894f781v else { 342727e995b7bba3c57fb1e5c156d386ca11894f781v var res = x; 343727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 1; i < arguments.length; i++) 344727e995b7bba3c57fb1e5c156d386ca11894f781v res -= arguments[i]; 345727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 346727e995b7bba3c57fb1e5c156d386ca11894f781v } 347727e995b7bba3c57fb1e5c156d386ca11894f781v} 348727e995b7bba3c57fb1e5c156d386ca11894f781v 349727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export / /fl) 350727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (div))) 351727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 352727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_div(x) { 353727e995b7bba3c57fb1e5c156d386ca11894f781v if (arguments.length === 1) 354727e995b7bba3c57fb1e5c156d386ca11894f781v return 1/x; 355727e995b7bba3c57fb1e5c156d386ca11894f781v else { 356727e995b7bba3c57fb1e5c156d386ca11894f781v var res = x; 357727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 1; i < arguments.length; i++) 358727e995b7bba3c57fb1e5c156d386ca11894f781v res /= arguments[i]; 359727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 360727e995b7bba3c57fb1e5c156d386ca11894f781v } 361727e995b7bba3c57fb1e5c156d386ca11894f781v} 362727e995b7bba3c57fb1e5c156d386ca11894f781v 363727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 364727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_abs = Math.abs; 365727e995b7bba3c57fb1e5c156d386ca11894f781v 366727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export quotient /fx) 367727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 "parseInt(" x "/" y ")"))) 368727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 369727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_quotient(x, y) { 370727e995b7bba3c57fb1e5c156d386ca11894f781v return parseInt(x / y); 371727e995b7bba3c57fb1e5c156d386ca11894f781v} 372727e995b7bba3c57fb1e5c156d386ca11894f781v 373727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 374727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 2 2 "%"))) 375727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 376727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_remainder(x, y) { 377727e995b7bba3c57fb1e5c156d386ca11894f781v return x % y; 378727e995b7bba3c57fb1e5c156d386ca11894f781v} 379727e995b7bba3c57fb1e5c156d386ca11894f781v 380727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 381727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (modulo))) 382727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 383727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_modulo(x, y) { 384727e995b7bba3c57fb1e5c156d386ca11894f781v var remainder = x % y; 385727e995b7bba3c57fb1e5c156d386ca11894f781v // if they don't have the same sign 386727e995b7bba3c57fb1e5c156d386ca11894f781v if ((remainder * y) < 0) 387727e995b7bba3c57fb1e5c156d386ca11894f781v return remainder + y; 388727e995b7bba3c57fb1e5c156d386ca11894f781v else 389727e995b7bba3c57fb1e5c156d386ca11894f781v return remainder; 390727e995b7bba3c57fb1e5c156d386ca11894f781v} 391727e995b7bba3c57fb1e5c156d386ca11894f781v 392727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_euclid_gcd(a, b) { 393727e995b7bba3c57fb1e5c156d386ca11894f781v var temp; 394727e995b7bba3c57fb1e5c156d386ca11894f781v if (a === 0) return b; 395727e995b7bba3c57fb1e5c156d386ca11894f781v if (b === 0) return a; 396727e995b7bba3c57fb1e5c156d386ca11894f781v if (a < 0) {a = -a;}; 397727e995b7bba3c57fb1e5c156d386ca11894f781v if (b < 0) {b = -b;}; 398727e995b7bba3c57fb1e5c156d386ca11894f781v if (b > a) {temp = a; a = b; b = temp;}; 399727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 400727e995b7bba3c57fb1e5c156d386ca11894f781v a %= b; 401727e995b7bba3c57fb1e5c156d386ca11894f781v if(a === 0) {return b;}; 402727e995b7bba3c57fb1e5c156d386ca11894f781v b %= a; 403727e995b7bba3c57fb1e5c156d386ca11894f781v if(b === 0) {return a;}; 404727e995b7bba3c57fb1e5c156d386ca11894f781v }; 405727e995b7bba3c57fb1e5c156d386ca11894f781v return b; 406727e995b7bba3c57fb1e5c156d386ca11894f781v} 407727e995b7bba3c57fb1e5c156d386ca11894f781v 408727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 409727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_gcd() { 410727e995b7bba3c57fb1e5c156d386ca11894f781v var gcd = 0; 411727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < arguments.length; i++) 412727e995b7bba3c57fb1e5c156d386ca11894f781v gcd = sc_euclid_gcd(gcd, arguments[i]); 413727e995b7bba3c57fb1e5c156d386ca11894f781v return gcd; 414727e995b7bba3c57fb1e5c156d386ca11894f781v} 415727e995b7bba3c57fb1e5c156d386ca11894f781v 416727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 417727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_lcm() { 418727e995b7bba3c57fb1e5c156d386ca11894f781v var lcm = 1; 419727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < arguments.length; i++) { 420727e995b7bba3c57fb1e5c156d386ca11894f781v var f = Math.round(arguments[i] / sc_euclid_gcd(arguments[i], lcm)); 421727e995b7bba3c57fb1e5c156d386ca11894f781v lcm *= Math.abs(f); 422727e995b7bba3c57fb1e5c156d386ca11894f781v } 423727e995b7bba3c57fb1e5c156d386ca11894f781v return lcm; 424727e995b7bba3c57fb1e5c156d386ca11894f781v} 425727e995b7bba3c57fb1e5c156d386ca11894f781v 426727e995b7bba3c57fb1e5c156d386ca11894f781v// LIMITATION: numerator and denominator don't make sense in floating point world. 427727e995b7bba3c57fb1e5c156d386ca11894f781v//var SC_MAX_DECIMALS = 1000000 428727e995b7bba3c57fb1e5c156d386ca11894f781v// 429727e995b7bba3c57fb1e5c156d386ca11894f781v// function sc_numerator(x) { 430727e995b7bba3c57fb1e5c156d386ca11894f781v// var rounded = Math.round(x * SC_MAX_DECIMALS); 431727e995b7bba3c57fb1e5c156d386ca11894f781v// return Math.round(rounded / sc_euclid_gcd(rounded, SC_MAX_DECIMALS)); 432727e995b7bba3c57fb1e5c156d386ca11894f781v// } 433727e995b7bba3c57fb1e5c156d386ca11894f781v 434727e995b7bba3c57fb1e5c156d386ca11894f781v// function sc_denominator(x) { 435727e995b7bba3c57fb1e5c156d386ca11894f781v// var rounded = Math.round(x * SC_MAX_DECIMALS); 436727e995b7bba3c57fb1e5c156d386ca11894f781v// return Math.round(SC_MAX_DECIMALS / sc_euclid_gcd(rounded, SC_MAX_DECIMALS)); 437727e995b7bba3c57fb1e5c156d386ca11894f781v// } 438727e995b7bba3c57fb1e5c156d386ca11894f781v 439727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 440727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_floor = Math.floor; 441727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 442727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_ceiling = Math.ceil; 443727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 444727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_truncate = parseInt; 445727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 446727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_round = Math.round; 447727e995b7bba3c57fb1e5c156d386ca11894f781v 448727e995b7bba3c57fb1e5c156d386ca11894f781v// LIMITATION: sc_rationalize doesn't make sense in a floating point world. 449727e995b7bba3c57fb1e5c156d386ca11894f781v 450727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 451727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_exp = Math.exp; 452727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 453727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_log = Math.log; 454727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 455727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_sin = Math.sin; 456727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 457727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_cos = Math.cos; 458727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 459727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_tan = Math.tan; 460727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 461727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_asin = Math.asin; 462727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 463727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_acos = Math.acos; 464727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 465727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_atan = Math.atan; 466727e995b7bba3c57fb1e5c156d386ca11894f781v 467727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 468727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_sqrt = Math.sqrt; 469727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 470727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_expt = Math.pow; 471727e995b7bba3c57fb1e5c156d386ca11894f781v 472727e995b7bba3c57fb1e5c156d386ca11894f781v// LIMITATION: we don't have complex numbers. 473727e995b7bba3c57fb1e5c156d386ca11894f781v// LIMITATION: the following functions are hence not implemented. 474727e995b7bba3c57fb1e5c156d386ca11894f781v// LIMITATION: make-rectangular, make-polar, real-part, imag-part, magnitude, angle 475727e995b7bba3c57fb1e5c156d386ca11894f781v// LIMITATION: 2 argument atan 476727e995b7bba3c57fb1e5c156d386ca11894f781v 477727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 478727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (id))) 479727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 480727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_exact2inexact(x) { 481727e995b7bba3c57fb1e5c156d386ca11894f781v return x; 482727e995b7bba3c57fb1e5c156d386ca11894f781v} 483727e995b7bba3c57fb1e5c156d386ca11894f781v 484727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 485727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (id))) 486727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 487727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_inexact2exact(x) { 488727e995b7bba3c57fb1e5c156d386ca11894f781v return x; 489727e995b7bba3c57fb1e5c156d386ca11894f781v} 490727e995b7bba3c57fb1e5c156d386ca11894f781v 491727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_number2jsstring(x, radix) { 492727e995b7bba3c57fb1e5c156d386ca11894f781v if (radix) 493727e995b7bba3c57fb1e5c156d386ca11894f781v return x.toString(radix); 494727e995b7bba3c57fb1e5c156d386ca11894f781v else 495727e995b7bba3c57fb1e5c156d386ca11894f781v return x.toString(); 496727e995b7bba3c57fb1e5c156d386ca11894f781v} 497727e995b7bba3c57fb1e5c156d386ca11894f781v 498727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_jsstring2number(s, radix) { 499727e995b7bba3c57fb1e5c156d386ca11894f781v if (s === "") return false; 500727e995b7bba3c57fb1e5c156d386ca11894f781v 501727e995b7bba3c57fb1e5c156d386ca11894f781v if (radix) { 502727e995b7bba3c57fb1e5c156d386ca11894f781v var t = parseInt(s, radix); 503727e995b7bba3c57fb1e5c156d386ca11894f781v if (!t && t !== 0) return false; 504727e995b7bba3c57fb1e5c156d386ca11894f781v // verify that each char is in range. (parseInt ignores leading 505727e995b7bba3c57fb1e5c156d386ca11894f781v // white and trailing chars) 506727e995b7bba3c57fb1e5c156d386ca11894f781v var allowedChars = "01234567890abcdefghijklmnopqrstuvwxyz".substring(0, radix+1); 507727e995b7bba3c57fb1e5c156d386ca11894f781v if ((new RegExp("^["+allowedChars+"]*$", "i")).test(s)) 508727e995b7bba3c57fb1e5c156d386ca11894f781v return t; 509727e995b7bba3c57fb1e5c156d386ca11894f781v else return false; 510727e995b7bba3c57fb1e5c156d386ca11894f781v } else { 511727e995b7bba3c57fb1e5c156d386ca11894f781v var t = +s; // does not ignore trailing chars. 512727e995b7bba3c57fb1e5c156d386ca11894f781v if (!t && t !== 0) return false; 513727e995b7bba3c57fb1e5c156d386ca11894f781v // simply verify that first char is not whitespace. 514727e995b7bba3c57fb1e5c156d386ca11894f781v var c = s.charAt(0); 515727e995b7bba3c57fb1e5c156d386ca11894f781v // if +c is 0, but the char is not "0", then we have a whitespace. 516727e995b7bba3c57fb1e5c156d386ca11894f781v if (+c === 0 && c !== "0") return false; 517727e995b7bba3c57fb1e5c156d386ca11894f781v return t; 518727e995b7bba3c57fb1e5c156d386ca11894f781v } 519727e995b7bba3c57fb1e5c156d386ca11894f781v} 520727e995b7bba3c57fb1e5c156d386ca11894f781v 521727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 522727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 523727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (not))) 524727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 525727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_not(b) { 526727e995b7bba3c57fb1e5c156d386ca11894f781v return b === false; 527727e995b7bba3c57fb1e5c156d386ca11894f781v} 528727e995b7bba3c57fb1e5c156d386ca11894f781v 529727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 530727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 531727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 532727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isBoolean(b) { 533727e995b7bba3c57fb1e5c156d386ca11894f781v return (b === true) || (b === false); 534727e995b7bba3c57fb1e5c156d386ca11894f781v} 535727e995b7bba3c57fb1e5c156d386ca11894f781v 536727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_Pair(car, cdr) { 537727e995b7bba3c57fb1e5c156d386ca11894f781v this.car = car; 538727e995b7bba3c57fb1e5c156d386ca11894f781v this.cdr = cdr; 539727e995b7bba3c57fb1e5c156d386ca11894f781v} 540727e995b7bba3c57fb1e5c156d386ca11894f781v 541727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Pair.prototype.toString = function() { 542727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_toDisplayString(this); 543727e995b7bba3c57fb1e5c156d386ca11894f781v}; 544727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Pair.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) { 545727e995b7bba3c57fb1e5c156d386ca11894f781v var current = this; 546727e995b7bba3c57fb1e5c156d386ca11894f781v 547727e995b7bba3c57fb1e5c156d386ca11894f781v var res = "("; 548727e995b7bba3c57fb1e5c156d386ca11894f781v 549727e995b7bba3c57fb1e5c156d386ca11894f781v while(true) { 550727e995b7bba3c57fb1e5c156d386ca11894f781v res += writeOrDisplay(current.car); 551727e995b7bba3c57fb1e5c156d386ca11894f781v if (sc_isPair(current.cdr)) { 552727e995b7bba3c57fb1e5c156d386ca11894f781v res += " "; 553727e995b7bba3c57fb1e5c156d386ca11894f781v current = current.cdr; 554727e995b7bba3c57fb1e5c156d386ca11894f781v } else if (current.cdr !== null) { 555727e995b7bba3c57fb1e5c156d386ca11894f781v res += " . " + writeOrDisplay(current.cdr); 556727e995b7bba3c57fb1e5c156d386ca11894f781v break; 557727e995b7bba3c57fb1e5c156d386ca11894f781v } else // current.cdr == null 558727e995b7bba3c57fb1e5c156d386ca11894f781v break; 559727e995b7bba3c57fb1e5c156d386ca11894f781v } 560727e995b7bba3c57fb1e5c156d386ca11894f781v 561727e995b7bba3c57fb1e5c156d386ca11894f781v res += ")"; 562727e995b7bba3c57fb1e5c156d386ca11894f781v 563727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 564727e995b7bba3c57fb1e5c156d386ca11894f781v}; 565727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Pair.prototype.sc_toDisplayString = function() { 566727e995b7bba3c57fb1e5c156d386ca11894f781v return this.sc_toWriteOrDisplayString(sc_toDisplayString); 567727e995b7bba3c57fb1e5c156d386ca11894f781v}; 568727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Pair.prototype.sc_toWriteString = function() { 569727e995b7bba3c57fb1e5c156d386ca11894f781v return this.sc_toWriteOrDisplayString(sc_toWriteString); 570727e995b7bba3c57fb1e5c156d386ca11894f781v}; 571727e995b7bba3c57fb1e5c156d386ca11894f781v// sc_Pair.prototype.sc_toWriteCircleString in IO.js 572727e995b7bba3c57fb1e5c156d386ca11894f781v 573727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 574727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 575727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix " instanceof sc_Pair"))) 576727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 577727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isPair(p) { 578727e995b7bba3c57fb1e5c156d386ca11894f781v return (p instanceof sc_Pair); 579727e995b7bba3c57fb1e5c156d386ca11894f781v} 580727e995b7bba3c57fb1e5c156d386ca11894f781v 581727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isPairEqual(p1, p2, comp) { 582727e995b7bba3c57fb1e5c156d386ca11894f781v return (comp(p1.car, p2.car) && comp(p1.cdr, p2.cdr)); 583727e995b7bba3c57fb1e5c156d386ca11894f781v} 584727e995b7bba3c57fb1e5c156d386ca11894f781v 585727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 586727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 "new sc_Pair(" car ", " cdr ")"))) 587727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 588727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cons(car, cdr) { 589727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Pair(car, cdr); 590727e995b7bba3c57fb1e5c156d386ca11894f781v} 591727e995b7bba3c57fb1e5c156d386ca11894f781v 592727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export cons*)) */ 593727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_consStar() { 594727e995b7bba3c57fb1e5c156d386ca11894f781v var res = arguments[arguments.length - 1]; 595727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = arguments.length-2; i >= 0; i--) 596727e995b7bba3c57fb1e5c156d386ca11894f781v res = new sc_Pair(arguments[i], res); 597727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 598727e995b7bba3c57fb1e5c156d386ca11894f781v} 599727e995b7bba3c57fb1e5c156d386ca11894f781v 600727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 601727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".car"))) 602727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 603727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_car(p) { 604727e995b7bba3c57fb1e5c156d386ca11894f781v return p.car; 605727e995b7bba3c57fb1e5c156d386ca11894f781v} 606727e995b7bba3c57fb1e5c156d386ca11894f781v 607727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 608727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".cdr"))) 609727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 610727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cdr(p) { 611727e995b7bba3c57fb1e5c156d386ca11894f781v return p.cdr; 612727e995b7bba3c57fb1e5c156d386ca11894f781v} 613727e995b7bba3c57fb1e5c156d386ca11894f781v 614727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 615727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 p ".car = " val))) 616727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 617727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_setCarBang(p, val) { 618727e995b7bba3c57fb1e5c156d386ca11894f781v p.car = val; 619727e995b7bba3c57fb1e5c156d386ca11894f781v} 620727e995b7bba3c57fb1e5c156d386ca11894f781v 621727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 622727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 p ".cdr = " val))) 623727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 624727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_setCdrBang(p, val) { 625727e995b7bba3c57fb1e5c156d386ca11894f781v p.cdr = val; 626727e995b7bba3c57fb1e5c156d386ca11894f781v} 627727e995b7bba3c57fb1e5c156d386ca11894f781v 628727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 629727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".car.car"))) 630727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 631727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_caar(p) { return p.car.car; } 632727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 633727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".cdr.car"))) 634727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 635727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cadr(p) { return p.cdr.car; } 636727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 637727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".car.cdr"))) 638727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 639727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cdar(p) { return p.car.cdr; } 640727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 641727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".cdr.cdr"))) 642727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 643727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cddr(p) { return p.cdr.cdr; } 644727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 645727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".car.car.car"))) 646727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 647727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_caaar(p) { return p.car.car.car; } 648727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 649727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".car.cdr.car"))) 650727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 651727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cadar(p) { return p.car.cdr.car; } 652727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 653727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".cdr.car.car"))) 654727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 655727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_caadr(p) { return p.cdr.car.car; } 656727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 657727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".cdr.cdr.car"))) 658727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 659727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_caddr(p) { return p.cdr.cdr.car; } 660727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 661727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".car.car.cdr"))) 662727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 663727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cdaar(p) { return p.car.car.cdr; } 664727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 665727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".cdr.car.cdr"))) 666727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 667727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cdadr(p) { return p.cdr.car.cdr; } 668727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 669727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".car.cdr.cdr"))) 670727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 671727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cddar(p) { return p.car.cdr.cdr; } 672727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 673727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".cdr.cdr.cdr"))) 674727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 675727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cdddr(p) { return p.cdr.cdr.cdr; } 676727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 677727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".car.car.car.car"))) 678727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 679727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_caaaar(p) { return p.car.car.car.car; } 680727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 681727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".car.cdr.car.car"))) 682727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 683727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_caadar(p) { return p.car.cdr.car.car; } 684727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 685727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".cdr.car.car.car"))) 686727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 687727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_caaadr(p) { return p.cdr.car.car.car; } 688727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 689727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".cdr.cdr.car.car"))) 690727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 691727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_caaddr(p) { return p.cdr.cdr.car.car; } 692727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 693727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".car.car.car.cdr"))) 694727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 695727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cdaaar(p) { return p.car.car.car.cdr; } 696727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 697727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".car.cdr.car.cdr"))) 698727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 699727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cdadar(p) { return p.car.cdr.car.cdr; } 700727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 701727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".cdr.car.car.cdr"))) 702727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 703727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cdaadr(p) { return p.cdr.car.car.cdr; } 704727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 705727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".cdr.cdr.car.cdr"))) 706727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 707727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cdaddr(p) { return p.cdr.cdr.car.cdr; } 708727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 709727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".car.car.cdr.car"))) 710727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 711727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cadaar(p) { return p.car.car.cdr.car; } 712727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 713727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".car.cdr.cdr.car"))) 714727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 715727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_caddar(p) { return p.car.cdr.cdr.car; } 716727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 717727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".cdr.car.cdr.car"))) 718727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 719727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cadadr(p) { return p.cdr.car.cdr.car; } 720727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 721727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".cdr.cdr.cdr.car"))) 722727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 723727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cadddr(p) { return p.cdr.cdr.cdr.car; } 724727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 725727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".car.car.cdr.cdr"))) 726727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 727727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cddaar(p) { return p.car.car.cdr.cdr; } 728727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 729727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".car.cdr.cdr.cdr"))) 730727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 731727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cdddar(p) { return p.car.cdr.cdr.cdr; } 732727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 733727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".cdr.car.cdr.cdr"))) 734727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 735727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cddadr(p) { return p.cdr.car.cdr.cdr; } 736727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 737727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".cdr.cdr.cdr.cdr"))) 738727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 739727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_cddddr(p) { return p.cdr.cdr.cdr.cdr; } 740727e995b7bba3c57fb1e5c156d386ca11894f781v 741727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 742727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_lastPair(l) { 743727e995b7bba3c57fb1e5c156d386ca11894f781v if (!sc_isPair(l)) sc_error("sc_lastPair: pair expected"); 744727e995b7bba3c57fb1e5c156d386ca11894f781v var res = l; 745727e995b7bba3c57fb1e5c156d386ca11894f781v var cdr = l.cdr; 746727e995b7bba3c57fb1e5c156d386ca11894f781v while (sc_isPair(cdr)) { 747727e995b7bba3c57fb1e5c156d386ca11894f781v res = cdr; 748727e995b7bba3c57fb1e5c156d386ca11894f781v cdr = res.cdr; 749727e995b7bba3c57fb1e5c156d386ca11894f781v } 750727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 751727e995b7bba3c57fb1e5c156d386ca11894f781v} 752727e995b7bba3c57fb1e5c156d386ca11894f781v 753727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 754727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 755727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix " === null"))) 756727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 757727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isNull(o) { 758727e995b7bba3c57fb1e5c156d386ca11894f781v return (o === null); 759727e995b7bba3c57fb1e5c156d386ca11894f781v} 760727e995b7bba3c57fb1e5c156d386ca11894f781v 761727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 762727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 763727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 764727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isList(o) { 765727e995b7bba3c57fb1e5c156d386ca11894f781v var rabbit; 766727e995b7bba3c57fb1e5c156d386ca11894f781v var turtle; 767727e995b7bba3c57fb1e5c156d386ca11894f781v 768727e995b7bba3c57fb1e5c156d386ca11894f781v var rabbit = o; 769727e995b7bba3c57fb1e5c156d386ca11894f781v var turtle = o; 770727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 771727e995b7bba3c57fb1e5c156d386ca11894f781v if (rabbit === null || 772727e995b7bba3c57fb1e5c156d386ca11894f781v (rabbit instanceof sc_Pair && rabbit.cdr === null)) 773727e995b7bba3c57fb1e5c156d386ca11894f781v return true; // end of list 774727e995b7bba3c57fb1e5c156d386ca11894f781v else if ((rabbit instanceof sc_Pair) && 775727e995b7bba3c57fb1e5c156d386ca11894f781v (rabbit.cdr instanceof sc_Pair)) { 776727e995b7bba3c57fb1e5c156d386ca11894f781v rabbit = rabbit.cdr.cdr; 777727e995b7bba3c57fb1e5c156d386ca11894f781v turtle = turtle.cdr; 778727e995b7bba3c57fb1e5c156d386ca11894f781v if (rabbit === turtle) return false; // cycle 779727e995b7bba3c57fb1e5c156d386ca11894f781v } else 780727e995b7bba3c57fb1e5c156d386ca11894f781v return false; // not pair 781727e995b7bba3c57fb1e5c156d386ca11894f781v } 782727e995b7bba3c57fb1e5c156d386ca11894f781v} 783727e995b7bba3c57fb1e5c156d386ca11894f781v 784727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 785727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_list() { 786727e995b7bba3c57fb1e5c156d386ca11894f781v var res = null; 787727e995b7bba3c57fb1e5c156d386ca11894f781v var a = arguments; 788727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = a.length-1; i >= 0; i--) 789727e995b7bba3c57fb1e5c156d386ca11894f781v res = new sc_Pair(a[i], res); 790727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 791727e995b7bba3c57fb1e5c156d386ca11894f781v} 792727e995b7bba3c57fb1e5c156d386ca11894f781v 793727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 794727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_iota(num, init) { 795727e995b7bba3c57fb1e5c156d386ca11894f781v var res = null; 796727e995b7bba3c57fb1e5c156d386ca11894f781v if (!init) init = 0; 797727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = num - 1; i >= 0; i--) 798727e995b7bba3c57fb1e5c156d386ca11894f781v res = new sc_Pair(i + init, res); 799727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 800727e995b7bba3c57fb1e5c156d386ca11894f781v} 801727e995b7bba3c57fb1e5c156d386ca11894f781v 802727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 803727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_makeList(nbEls, fill) { 804727e995b7bba3c57fb1e5c156d386ca11894f781v var res = null; 805727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < nbEls; i++) 806727e995b7bba3c57fb1e5c156d386ca11894f781v res = new sc_Pair(fill, res); 807727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 808727e995b7bba3c57fb1e5c156d386ca11894f781v} 809727e995b7bba3c57fb1e5c156d386ca11894f781v 810727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 811727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_length(l) { 812727e995b7bba3c57fb1e5c156d386ca11894f781v var res = 0; 813727e995b7bba3c57fb1e5c156d386ca11894f781v while (l !== null) { 814727e995b7bba3c57fb1e5c156d386ca11894f781v res++; 815727e995b7bba3c57fb1e5c156d386ca11894f781v l = l.cdr; 816727e995b7bba3c57fb1e5c156d386ca11894f781v } 817727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 818727e995b7bba3c57fb1e5c156d386ca11894f781v} 819727e995b7bba3c57fb1e5c156d386ca11894f781v 820727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 821727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_remq(o, l) { 822727e995b7bba3c57fb1e5c156d386ca11894f781v var dummy = { cdr : null }; 823727e995b7bba3c57fb1e5c156d386ca11894f781v var tail = dummy; 824727e995b7bba3c57fb1e5c156d386ca11894f781v while (l !== null) { 825727e995b7bba3c57fb1e5c156d386ca11894f781v if (l.car !== o) { 826727e995b7bba3c57fb1e5c156d386ca11894f781v tail.cdr = sc_cons(l.car, null); 827727e995b7bba3c57fb1e5c156d386ca11894f781v tail = tail.cdr; 828727e995b7bba3c57fb1e5c156d386ca11894f781v } 829727e995b7bba3c57fb1e5c156d386ca11894f781v l = l.cdr; 830727e995b7bba3c57fb1e5c156d386ca11894f781v } 831727e995b7bba3c57fb1e5c156d386ca11894f781v return dummy.cdr; 832727e995b7bba3c57fb1e5c156d386ca11894f781v} 833727e995b7bba3c57fb1e5c156d386ca11894f781v 834727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 835727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_remqBang(o, l) { 836727e995b7bba3c57fb1e5c156d386ca11894f781v var dummy = { cdr : null }; 837727e995b7bba3c57fb1e5c156d386ca11894f781v var tail = dummy; 838727e995b7bba3c57fb1e5c156d386ca11894f781v var needsAssig = true; 839727e995b7bba3c57fb1e5c156d386ca11894f781v while (l !== null) { 840727e995b7bba3c57fb1e5c156d386ca11894f781v if (l.car === o) { 841727e995b7bba3c57fb1e5c156d386ca11894f781v needsAssig = true; 842727e995b7bba3c57fb1e5c156d386ca11894f781v } else { 843727e995b7bba3c57fb1e5c156d386ca11894f781v if (needsAssig) { 844727e995b7bba3c57fb1e5c156d386ca11894f781v tail.cdr = l; 845727e995b7bba3c57fb1e5c156d386ca11894f781v needsAssig = false; 846727e995b7bba3c57fb1e5c156d386ca11894f781v } 847727e995b7bba3c57fb1e5c156d386ca11894f781v tail = l; 848727e995b7bba3c57fb1e5c156d386ca11894f781v } 849727e995b7bba3c57fb1e5c156d386ca11894f781v l = l.cdr; 850727e995b7bba3c57fb1e5c156d386ca11894f781v } 851727e995b7bba3c57fb1e5c156d386ca11894f781v tail.cdr = null; 852727e995b7bba3c57fb1e5c156d386ca11894f781v return dummy.cdr; 853727e995b7bba3c57fb1e5c156d386ca11894f781v} 854727e995b7bba3c57fb1e5c156d386ca11894f781v 855727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 856727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_delete(o, l) { 857727e995b7bba3c57fb1e5c156d386ca11894f781v var dummy = { cdr : null }; 858727e995b7bba3c57fb1e5c156d386ca11894f781v var tail = dummy; 859727e995b7bba3c57fb1e5c156d386ca11894f781v while (l !== null) { 860727e995b7bba3c57fb1e5c156d386ca11894f781v if (!sc_isEqual(l.car, o)) { 861727e995b7bba3c57fb1e5c156d386ca11894f781v tail.cdr = sc_cons(l.car, null); 862727e995b7bba3c57fb1e5c156d386ca11894f781v tail = tail.cdr; 863727e995b7bba3c57fb1e5c156d386ca11894f781v } 864727e995b7bba3c57fb1e5c156d386ca11894f781v l = l.cdr; 865727e995b7bba3c57fb1e5c156d386ca11894f781v } 866727e995b7bba3c57fb1e5c156d386ca11894f781v return dummy.cdr; 867727e995b7bba3c57fb1e5c156d386ca11894f781v} 868727e995b7bba3c57fb1e5c156d386ca11894f781v 869727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 870727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_deleteBang(o, l) { 871727e995b7bba3c57fb1e5c156d386ca11894f781v var dummy = { cdr : null }; 872727e995b7bba3c57fb1e5c156d386ca11894f781v var tail = dummy; 873727e995b7bba3c57fb1e5c156d386ca11894f781v var needsAssig = true; 874727e995b7bba3c57fb1e5c156d386ca11894f781v while (l !== null) { 875727e995b7bba3c57fb1e5c156d386ca11894f781v if (sc_isEqual(l.car, o)) { 876727e995b7bba3c57fb1e5c156d386ca11894f781v needsAssig = true; 877727e995b7bba3c57fb1e5c156d386ca11894f781v } else { 878727e995b7bba3c57fb1e5c156d386ca11894f781v if (needsAssig) { 879727e995b7bba3c57fb1e5c156d386ca11894f781v tail.cdr = l; 880727e995b7bba3c57fb1e5c156d386ca11894f781v needsAssig = false; 881727e995b7bba3c57fb1e5c156d386ca11894f781v } 882727e995b7bba3c57fb1e5c156d386ca11894f781v tail = l; 883727e995b7bba3c57fb1e5c156d386ca11894f781v } 884727e995b7bba3c57fb1e5c156d386ca11894f781v l = l.cdr; 885727e995b7bba3c57fb1e5c156d386ca11894f781v } 886727e995b7bba3c57fb1e5c156d386ca11894f781v tail.cdr = null; 887727e995b7bba3c57fb1e5c156d386ca11894f781v return dummy.cdr; 888727e995b7bba3c57fb1e5c156d386ca11894f781v} 889727e995b7bba3c57fb1e5c156d386ca11894f781v 890727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_reverseAppendBang(l1, l2) { 891727e995b7bba3c57fb1e5c156d386ca11894f781v var res = l2; 892727e995b7bba3c57fb1e5c156d386ca11894f781v while (l1 !== null) { 893727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = res; 894727e995b7bba3c57fb1e5c156d386ca11894f781v res = l1; 895727e995b7bba3c57fb1e5c156d386ca11894f781v l1 = l1.cdr; 896727e995b7bba3c57fb1e5c156d386ca11894f781v res.cdr = tmp; 897727e995b7bba3c57fb1e5c156d386ca11894f781v } 898727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 899727e995b7bba3c57fb1e5c156d386ca11894f781v} 900727e995b7bba3c57fb1e5c156d386ca11894f781v 901727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_dualAppend(l1, l2) { 902727e995b7bba3c57fb1e5c156d386ca11894f781v if (l1 === null) return l2; 903727e995b7bba3c57fb1e5c156d386ca11894f781v if (l2 === null) return l1; 904727e995b7bba3c57fb1e5c156d386ca11894f781v var rev = sc_reverse(l1); 905727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_reverseAppendBang(rev, l2); 906727e995b7bba3c57fb1e5c156d386ca11894f781v} 907727e995b7bba3c57fb1e5c156d386ca11894f781v 908727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 909727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_append() { 910727e995b7bba3c57fb1e5c156d386ca11894f781v if (arguments.length === 0) 911727e995b7bba3c57fb1e5c156d386ca11894f781v return null; 912727e995b7bba3c57fb1e5c156d386ca11894f781v var res = arguments[arguments.length - 1]; 913727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = arguments.length - 2; i >= 0; i--) 914727e995b7bba3c57fb1e5c156d386ca11894f781v res = sc_dualAppend(arguments[i], res); 915727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 916727e995b7bba3c57fb1e5c156d386ca11894f781v} 917727e995b7bba3c57fb1e5c156d386ca11894f781v 918727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_dualAppendBang(l1, l2) { 919727e995b7bba3c57fb1e5c156d386ca11894f781v if (l1 === null) return l2; 920727e995b7bba3c57fb1e5c156d386ca11894f781v if (l2 === null) return l1; 921727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = l1; 922727e995b7bba3c57fb1e5c156d386ca11894f781v while (tmp.cdr !== null) tmp=tmp.cdr; 923727e995b7bba3c57fb1e5c156d386ca11894f781v tmp.cdr = l2; 924727e995b7bba3c57fb1e5c156d386ca11894f781v return l1; 925727e995b7bba3c57fb1e5c156d386ca11894f781v} 9261805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 927727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 928727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_appendBang() { 929727e995b7bba3c57fb1e5c156d386ca11894f781v var res = null; 930727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < arguments.length; i++) 931727e995b7bba3c57fb1e5c156d386ca11894f781v res = sc_dualAppendBang(res, arguments[i]); 932727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 933727e995b7bba3c57fb1e5c156d386ca11894f781v} 934727e995b7bba3c57fb1e5c156d386ca11894f781v 935727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 936727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_reverse(l1) { 937727e995b7bba3c57fb1e5c156d386ca11894f781v var res = null; 938727e995b7bba3c57fb1e5c156d386ca11894f781v while (l1 !== null) { 939727e995b7bba3c57fb1e5c156d386ca11894f781v res = sc_cons(l1.car, res); 940727e995b7bba3c57fb1e5c156d386ca11894f781v l1 = l1.cdr; 941727e995b7bba3c57fb1e5c156d386ca11894f781v } 942727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 943727e995b7bba3c57fb1e5c156d386ca11894f781v} 944727e995b7bba3c57fb1e5c156d386ca11894f781v 945727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 946727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_reverseBang(l) { 947727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_reverseAppendBang(l, null); 948727e995b7bba3c57fb1e5c156d386ca11894f781v} 949727e995b7bba3c57fb1e5c156d386ca11894f781v 950727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 951727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_listTail(l, k) { 952727e995b7bba3c57fb1e5c156d386ca11894f781v var res = l; 953727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < k; i++) { 954727e995b7bba3c57fb1e5c156d386ca11894f781v res = res.cdr; 955727e995b7bba3c57fb1e5c156d386ca11894f781v } 956727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 957727e995b7bba3c57fb1e5c156d386ca11894f781v} 958727e995b7bba3c57fb1e5c156d386ca11894f781v 959727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 960727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_listRef(l, k) { 961727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_listTail(l, k).car; 962727e995b7bba3c57fb1e5c156d386ca11894f781v} 963727e995b7bba3c57fb1e5c156d386ca11894f781v 964727e995b7bba3c57fb1e5c156d386ca11894f781v/* // unoptimized generic versions 965727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_memX(o, l, comp) { 966727e995b7bba3c57fb1e5c156d386ca11894f781v while (l != null) { 967727e995b7bba3c57fb1e5c156d386ca11894f781v if (comp(l.car, o)) 968727e995b7bba3c57fb1e5c156d386ca11894f781v return l; 969727e995b7bba3c57fb1e5c156d386ca11894f781v l = l.cdr; 970727e995b7bba3c57fb1e5c156d386ca11894f781v } 971727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 972727e995b7bba3c57fb1e5c156d386ca11894f781v} 973727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_memq(o, l) { return sc_memX(o, l, sc_isEq); } 974727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_memv(o, l) { return sc_memX(o, l, sc_isEqv); } 975727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_member(o, l) { return sc_memX(o, l, sc_isEqual); } 976727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 977727e995b7bba3c57fb1e5c156d386ca11894f781v 978727e995b7bba3c57fb1e5c156d386ca11894f781v/* optimized versions */ 979727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 980727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_memq(o, l) { 981727e995b7bba3c57fb1e5c156d386ca11894f781v while (l !== null) { 982727e995b7bba3c57fb1e5c156d386ca11894f781v if (l.car === o) 983727e995b7bba3c57fb1e5c156d386ca11894f781v return l; 984727e995b7bba3c57fb1e5c156d386ca11894f781v l = l.cdr; 985727e995b7bba3c57fb1e5c156d386ca11894f781v } 986727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 987727e995b7bba3c57fb1e5c156d386ca11894f781v} 988727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 989727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_memv(o, l) { 990727e995b7bba3c57fb1e5c156d386ca11894f781v while (l !== null) { 991727e995b7bba3c57fb1e5c156d386ca11894f781v if (l.car === o) 992727e995b7bba3c57fb1e5c156d386ca11894f781v return l; 993727e995b7bba3c57fb1e5c156d386ca11894f781v l = l.cdr; 994727e995b7bba3c57fb1e5c156d386ca11894f781v } 995727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 996727e995b7bba3c57fb1e5c156d386ca11894f781v} 997727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 998727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_member(o, l) { 999727e995b7bba3c57fb1e5c156d386ca11894f781v while (l !== null) { 1000727e995b7bba3c57fb1e5c156d386ca11894f781v if (sc_isEqual(l.car,o)) 1001727e995b7bba3c57fb1e5c156d386ca11894f781v return l; 1002727e995b7bba3c57fb1e5c156d386ca11894f781v l = l.cdr; 1003727e995b7bba3c57fb1e5c156d386ca11894f781v } 1004727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 1005727e995b7bba3c57fb1e5c156d386ca11894f781v} 1006727e995b7bba3c57fb1e5c156d386ca11894f781v 1007727e995b7bba3c57fb1e5c156d386ca11894f781v/* // generic unoptimized versions 1008727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_assX(o, al, comp) { 1009727e995b7bba3c57fb1e5c156d386ca11894f781v while (al != null) { 1010727e995b7bba3c57fb1e5c156d386ca11894f781v if (comp(al.car.car, o)) 1011727e995b7bba3c57fb1e5c156d386ca11894f781v return al.car; 1012727e995b7bba3c57fb1e5c156d386ca11894f781v al = al.cdr; 1013727e995b7bba3c57fb1e5c156d386ca11894f781v } 1014727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 1015727e995b7bba3c57fb1e5c156d386ca11894f781v} 1016727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_assq(o, al) { return sc_assX(o, al, sc_isEq); } 1017727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_assv(o, al) { return sc_assX(o, al, sc_isEqv); } 1018727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_assoc(o, al) { return sc_assX(o, al, sc_isEqual); } 1019727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1020727e995b7bba3c57fb1e5c156d386ca11894f781v// optimized versions 1021727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1022727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_assq(o, al) { 1023727e995b7bba3c57fb1e5c156d386ca11894f781v while (al !== null) { 1024727e995b7bba3c57fb1e5c156d386ca11894f781v if (al.car.car === o) 1025727e995b7bba3c57fb1e5c156d386ca11894f781v return al.car; 1026727e995b7bba3c57fb1e5c156d386ca11894f781v al = al.cdr; 1027727e995b7bba3c57fb1e5c156d386ca11894f781v } 1028727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 1029727e995b7bba3c57fb1e5c156d386ca11894f781v} 1030727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1031727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_assv(o, al) { 1032727e995b7bba3c57fb1e5c156d386ca11894f781v while (al !== null) { 1033727e995b7bba3c57fb1e5c156d386ca11894f781v if (al.car.car === o) 1034727e995b7bba3c57fb1e5c156d386ca11894f781v return al.car; 1035727e995b7bba3c57fb1e5c156d386ca11894f781v al = al.cdr; 1036727e995b7bba3c57fb1e5c156d386ca11894f781v } 1037727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 1038727e995b7bba3c57fb1e5c156d386ca11894f781v} 1039727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1040727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_assoc(o, al) { 1041727e995b7bba3c57fb1e5c156d386ca11894f781v while (al !== null) { 1042727e995b7bba3c57fb1e5c156d386ca11894f781v if (sc_isEqual(al.car.car, o)) 1043727e995b7bba3c57fb1e5c156d386ca11894f781v return al.car; 1044727e995b7bba3c57fb1e5c156d386ca11894f781v al = al.cdr; 1045727e995b7bba3c57fb1e5c156d386ca11894f781v } 1046727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 1047727e995b7bba3c57fb1e5c156d386ca11894f781v} 1048727e995b7bba3c57fb1e5c156d386ca11894f781v 1049727e995b7bba3c57fb1e5c156d386ca11894f781v/* can be used for mutable strings and characters */ 1050727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharStringEqual(cs1, cs2) { return cs1.val === cs2.val; } 1051727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharStringLess(cs1, cs2) { return cs1.val < cs2.val; } 1052727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharStringGreater(cs1, cs2) { return cs1.val > cs2.val; } 1053727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharStringLessEqual(cs1, cs2) { return cs1.val <= cs2.val; } 1054727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharStringGreaterEqual(cs1, cs2) { return cs1.val >= cs2.val; } 1055727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharStringCIEqual(cs1, cs2) 1056727e995b7bba3c57fb1e5c156d386ca11894f781v { return cs1.val.toLowerCase() === cs2.val.toLowerCase(); } 1057727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharStringCILess(cs1, cs2) 1058727e995b7bba3c57fb1e5c156d386ca11894f781v { return cs1.val.toLowerCase() < cs2.val.toLowerCase(); } 1059727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharStringCIGreater(cs1, cs2) 1060727e995b7bba3c57fb1e5c156d386ca11894f781v { return cs1.val.toLowerCase() > cs2.val.toLowerCase(); } 1061727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharStringCILessEqual(cs1, cs2) 1062727e995b7bba3c57fb1e5c156d386ca11894f781v { return cs1.val.toLowerCase() <= cs2.val.toLowerCase(); } 1063727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharStringCIGreaterEqual(cs1, cs2) 1064727e995b7bba3c57fb1e5c156d386ca11894f781v { return cs1.val.toLowerCase() >= cs2.val.toLowerCase(); } 1065727e995b7bba3c57fb1e5c156d386ca11894f781v 1066727e995b7bba3c57fb1e5c156d386ca11894f781v 1067727e995b7bba3c57fb1e5c156d386ca11894f781v 1068727e995b7bba3c57fb1e5c156d386ca11894f781v 1069727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_Char(c) { 1070727e995b7bba3c57fb1e5c156d386ca11894f781v var cached = sc_Char.lazy[c]; 1071727e995b7bba3c57fb1e5c156d386ca11894f781v if (cached) 1072727e995b7bba3c57fb1e5c156d386ca11894f781v return cached; 1073727e995b7bba3c57fb1e5c156d386ca11894f781v this.val = c; 1074727e995b7bba3c57fb1e5c156d386ca11894f781v sc_Char.lazy[c] = this; 1075727e995b7bba3c57fb1e5c156d386ca11894f781v // add return, so FF does not complain. 1076727e995b7bba3c57fb1e5c156d386ca11894f781v return undefined; 1077727e995b7bba3c57fb1e5c156d386ca11894f781v} 1078727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Char.lazy = new Object(); 1079727e995b7bba3c57fb1e5c156d386ca11894f781v// thanks to Eric 1080727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Char.char2readable = { 1081727e995b7bba3c57fb1e5c156d386ca11894f781v "\000": "#\\null", 1082727e995b7bba3c57fb1e5c156d386ca11894f781v "\007": "#\\bell", 1083727e995b7bba3c57fb1e5c156d386ca11894f781v "\010": "#\\backspace", 1084727e995b7bba3c57fb1e5c156d386ca11894f781v "\011": "#\\tab", 1085727e995b7bba3c57fb1e5c156d386ca11894f781v "\012": "#\\newline", 1086727e995b7bba3c57fb1e5c156d386ca11894f781v "\014": "#\\page", 1087727e995b7bba3c57fb1e5c156d386ca11894f781v "\015": "#\\return", 1088727e995b7bba3c57fb1e5c156d386ca11894f781v "\033": "#\\escape", 1089727e995b7bba3c57fb1e5c156d386ca11894f781v "\040": "#\\space", 1090727e995b7bba3c57fb1e5c156d386ca11894f781v "\177": "#\\delete", 1091727e995b7bba3c57fb1e5c156d386ca11894f781v 1092727e995b7bba3c57fb1e5c156d386ca11894f781v /* poeticless names */ 1093727e995b7bba3c57fb1e5c156d386ca11894f781v "\001": "#\\soh", 1094727e995b7bba3c57fb1e5c156d386ca11894f781v "\002": "#\\stx", 1095727e995b7bba3c57fb1e5c156d386ca11894f781v "\003": "#\\etx", 1096727e995b7bba3c57fb1e5c156d386ca11894f781v "\004": "#\\eot", 1097727e995b7bba3c57fb1e5c156d386ca11894f781v "\005": "#\\enq", 1098727e995b7bba3c57fb1e5c156d386ca11894f781v "\006": "#\\ack", 1099727e995b7bba3c57fb1e5c156d386ca11894f781v 1100727e995b7bba3c57fb1e5c156d386ca11894f781v "\013": "#\\vt", 1101727e995b7bba3c57fb1e5c156d386ca11894f781v "\016": "#\\so", 1102727e995b7bba3c57fb1e5c156d386ca11894f781v "\017": "#\\si", 1103727e995b7bba3c57fb1e5c156d386ca11894f781v 1104727e995b7bba3c57fb1e5c156d386ca11894f781v "\020": "#\\dle", 1105727e995b7bba3c57fb1e5c156d386ca11894f781v "\021": "#\\dc1", 1106727e995b7bba3c57fb1e5c156d386ca11894f781v "\022": "#\\dc2", 1107727e995b7bba3c57fb1e5c156d386ca11894f781v "\023": "#\\dc3", 1108727e995b7bba3c57fb1e5c156d386ca11894f781v "\024": "#\\dc4", 1109727e995b7bba3c57fb1e5c156d386ca11894f781v "\025": "#\\nak", 1110727e995b7bba3c57fb1e5c156d386ca11894f781v "\026": "#\\syn", 1111727e995b7bba3c57fb1e5c156d386ca11894f781v "\027": "#\\etb", 1112727e995b7bba3c57fb1e5c156d386ca11894f781v 1113727e995b7bba3c57fb1e5c156d386ca11894f781v "\030": "#\\can", 1114727e995b7bba3c57fb1e5c156d386ca11894f781v "\031": "#\\em", 1115727e995b7bba3c57fb1e5c156d386ca11894f781v "\032": "#\\sub", 1116727e995b7bba3c57fb1e5c156d386ca11894f781v "\033": "#\\esc", 1117727e995b7bba3c57fb1e5c156d386ca11894f781v "\034": "#\\fs", 1118727e995b7bba3c57fb1e5c156d386ca11894f781v "\035": "#\\gs", 1119727e995b7bba3c57fb1e5c156d386ca11894f781v "\036": "#\\rs", 1120727e995b7bba3c57fb1e5c156d386ca11894f781v "\037": "#\\us"}; 1121727e995b7bba3c57fb1e5c156d386ca11894f781v 1122727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Char.readable2char = { 1123727e995b7bba3c57fb1e5c156d386ca11894f781v "null": "\000", 1124727e995b7bba3c57fb1e5c156d386ca11894f781v "bell": "\007", 1125727e995b7bba3c57fb1e5c156d386ca11894f781v "backspace": "\010", 1126727e995b7bba3c57fb1e5c156d386ca11894f781v "tab": "\011", 1127727e995b7bba3c57fb1e5c156d386ca11894f781v "newline": "\012", 1128727e995b7bba3c57fb1e5c156d386ca11894f781v "page": "\014", 1129727e995b7bba3c57fb1e5c156d386ca11894f781v "return": "\015", 1130727e995b7bba3c57fb1e5c156d386ca11894f781v "escape": "\033", 1131727e995b7bba3c57fb1e5c156d386ca11894f781v "space": "\040", 1132727e995b7bba3c57fb1e5c156d386ca11894f781v "delete": "\000", 1133727e995b7bba3c57fb1e5c156d386ca11894f781v "soh": "\001", 1134727e995b7bba3c57fb1e5c156d386ca11894f781v "stx": "\002", 1135727e995b7bba3c57fb1e5c156d386ca11894f781v "etx": "\003", 1136727e995b7bba3c57fb1e5c156d386ca11894f781v "eot": "\004", 1137727e995b7bba3c57fb1e5c156d386ca11894f781v "enq": "\005", 1138727e995b7bba3c57fb1e5c156d386ca11894f781v "ack": "\006", 1139727e995b7bba3c57fb1e5c156d386ca11894f781v "bel": "\007", 1140727e995b7bba3c57fb1e5c156d386ca11894f781v "bs": "\010", 1141727e995b7bba3c57fb1e5c156d386ca11894f781v "ht": "\011", 1142727e995b7bba3c57fb1e5c156d386ca11894f781v "nl": "\012", 1143727e995b7bba3c57fb1e5c156d386ca11894f781v "vt": "\013", 1144727e995b7bba3c57fb1e5c156d386ca11894f781v "np": "\014", 1145727e995b7bba3c57fb1e5c156d386ca11894f781v "cr": "\015", 1146727e995b7bba3c57fb1e5c156d386ca11894f781v "so": "\016", 1147727e995b7bba3c57fb1e5c156d386ca11894f781v "si": "\017", 1148727e995b7bba3c57fb1e5c156d386ca11894f781v "dle": "\020", 1149727e995b7bba3c57fb1e5c156d386ca11894f781v "dc1": "\021", 1150727e995b7bba3c57fb1e5c156d386ca11894f781v "dc2": "\022", 1151727e995b7bba3c57fb1e5c156d386ca11894f781v "dc3": "\023", 1152727e995b7bba3c57fb1e5c156d386ca11894f781v "dc4": "\024", 1153727e995b7bba3c57fb1e5c156d386ca11894f781v "nak": "\025", 1154727e995b7bba3c57fb1e5c156d386ca11894f781v "syn": "\026", 1155727e995b7bba3c57fb1e5c156d386ca11894f781v "etb": "\027", 1156727e995b7bba3c57fb1e5c156d386ca11894f781v "can": "\030", 1157727e995b7bba3c57fb1e5c156d386ca11894f781v "em": "\031", 1158727e995b7bba3c57fb1e5c156d386ca11894f781v "sub": "\032", 1159727e995b7bba3c57fb1e5c156d386ca11894f781v "esc": "\033", 1160727e995b7bba3c57fb1e5c156d386ca11894f781v "fs": "\034", 1161727e995b7bba3c57fb1e5c156d386ca11894f781v "gs": "\035", 1162727e995b7bba3c57fb1e5c156d386ca11894f781v "rs": "\036", 1163727e995b7bba3c57fb1e5c156d386ca11894f781v "us": "\037", 1164727e995b7bba3c57fb1e5c156d386ca11894f781v "sp": "\040", 1165727e995b7bba3c57fb1e5c156d386ca11894f781v "del": "\177"}; 11661805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 1167727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Char.prototype.toString = function() { 1168727e995b7bba3c57fb1e5c156d386ca11894f781v return this.val; 1169727e995b7bba3c57fb1e5c156d386ca11894f781v}; 1170727e995b7bba3c57fb1e5c156d386ca11894f781v// sc_toDisplayString == toString 1171727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Char.prototype.sc_toWriteString = function() { 1172727e995b7bba3c57fb1e5c156d386ca11894f781v var entry = sc_Char.char2readable[this.val]; 1173727e995b7bba3c57fb1e5c156d386ca11894f781v if (entry) 1174727e995b7bba3c57fb1e5c156d386ca11894f781v return entry; 1175727e995b7bba3c57fb1e5c156d386ca11894f781v else 1176727e995b7bba3c57fb1e5c156d386ca11894f781v return "#\\" + this.val; 1177727e995b7bba3c57fb1e5c156d386ca11894f781v}; 1178727e995b7bba3c57fb1e5c156d386ca11894f781v 1179727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1180727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1181727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix "instanceof sc_Char"))) 1182727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1183727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isChar(c) { 1184727e995b7bba3c57fb1e5c156d386ca11894f781v return (c instanceof sc_Char); 1185727e995b7bba3c57fb1e5c156d386ca11894f781v} 1186727e995b7bba3c57fb1e5c156d386ca11894f781v 1187727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export char=?) 1188727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1189727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 c1 ".val === " c2 ".val"))) 1190727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1191727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_isCharEqual = sc_isCharStringEqual; 1192727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export char<?) 1193727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1194727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 c1 ".val < " c2 ".val"))) 1195727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1196727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_isCharLess = sc_isCharStringLess; 1197727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export char>?) 1198727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1199727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 c1 ".val > " c2 ".val"))) 1200727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1201727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_isCharGreater = sc_isCharStringGreater; 1202727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export char<=?) 1203727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1204727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 c1 ".val <= " c2 ".val"))) 1205727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1206727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_isCharLessEqual = sc_isCharStringLessEqual; 1207727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export char>=?) 1208727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1209727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 c1 ".val >= " c2 ".val"))) 1210727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1211727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_isCharGreaterEqual = sc_isCharStringGreaterEqual; 1212727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export char-ci=?) 1213727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1214727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 c1 ".val.toLowerCase() === " c2 ".val.toLowerCase()"))) 1215727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1216727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_isCharCIEqual = sc_isCharStringCIEqual; 1217727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export char-ci<?) 1218727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1219727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 c1 ".val.toLowerCase() < " c2 ".val.toLowerCase()"))) 1220727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1221727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_isCharCILess = sc_isCharStringCILess; 1222727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export char-ci>?) 1223727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1224727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 c1 ".val.toLowerCase() > " c2 ".val.toLowerCase()"))) 1225727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1226727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_isCharCIGreater = sc_isCharStringCIGreater; 1227727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export char-ci<=?) 1228727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1229727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 c1 ".val.toLowerCase() <= " c2 ".val.toLowerCase()"))) 1230727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1231727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_isCharCILessEqual = sc_isCharStringCILessEqual; 1232727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export char-ci>=?) 1233727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1234727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 c1 ".val.toLowerCase() >= " c2 ".val.toLowerCase()"))) 1235727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1236727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_isCharCIGreaterEqual = sc_isCharStringCIGreaterEqual; 1237727e995b7bba3c57fb1e5c156d386ca11894f781v 1238727e995b7bba3c57fb1e5c156d386ca11894f781vvar SC_NUMBER_CLASS = "0123456789"; 1239727e995b7bba3c57fb1e5c156d386ca11894f781vvar SC_WHITESPACE_CLASS = ' \r\n\t\f'; 1240727e995b7bba3c57fb1e5c156d386ca11894f781vvar SC_LOWER_CLASS = 'abcdefghijklmnopqrstuvwxyz'; 1241727e995b7bba3c57fb1e5c156d386ca11894f781vvar SC_UPPER_CLASS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 1242727e995b7bba3c57fb1e5c156d386ca11894f781v 1243727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharOfClass(c, cl) { return (cl.indexOf(c) != -1); } 1244727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1245727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 1246727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1247727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharAlphabetic(c) 1248727e995b7bba3c57fb1e5c156d386ca11894f781v { return sc_isCharOfClass(c.val, SC_LOWER_CLASS) || 1249727e995b7bba3c57fb1e5c156d386ca11894f781v sc_isCharOfClass(c.val, SC_UPPER_CLASS); } 1250727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1251727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1252727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 1 "SC_NUMBER_CLASS.indexOf(" c ".val) != -1"))) 1253727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1254727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharNumeric(c) 1255727e995b7bba3c57fb1e5c156d386ca11894f781v { return sc_isCharOfClass(c.val, SC_NUMBER_CLASS); } 1256727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1257727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 1258727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1259727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharWhitespace(c) { 1260727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = c.val; 1261727e995b7bba3c57fb1e5c156d386ca11894f781v return tmp === " " || tmp === "\r" || tmp === "\n" || tmp === "\t" || tmp === "\f"; 1262727e995b7bba3c57fb1e5c156d386ca11894f781v} 1263727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1264727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1265727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 1 "SC_UPPER_CLASS.indexOf(" c ".val) != -1"))) 1266727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1267727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharUpperCase(c) 1268727e995b7bba3c57fb1e5c156d386ca11894f781v { return sc_isCharOfClass(c.val, SC_UPPER_CLASS); } 1269727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1270727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1271727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 1 "SC_LOWER_CLASS.indexOf(" c ".val) != -1"))) 1272727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1273727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharLowerCase(c) 1274727e995b7bba3c57fb1e5c156d386ca11894f781v { return sc_isCharOfClass(c.val, SC_LOWER_CLASS); } 1275727e995b7bba3c57fb1e5c156d386ca11894f781v 1276727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1277727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".val.charCodeAt(0)"))) 1278727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1279727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_char2integer(c) 1280727e995b7bba3c57fb1e5c156d386ca11894f781v { return c.val.charCodeAt(0); } 1281727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1282727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 1 "new sc_Char(String.fromCharCode(" n "))"))) 1283727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1284727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_integer2char(n) 1285727e995b7bba3c57fb1e5c156d386ca11894f781v { return new sc_Char(String.fromCharCode(n)); } 1286727e995b7bba3c57fb1e5c156d386ca11894f781v 1287727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1288727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 1 "new sc_Char(" c ".val.toUpperCase())"))) 1289727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1290727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_charUpcase(c) 1291727e995b7bba3c57fb1e5c156d386ca11894f781v { return new sc_Char(c.val.toUpperCase()); } 1292727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1293727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 1 "new sc_Char(" c ".val.toLowerCase())"))) 1294727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1295727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_charDowncase(c) 1296727e995b7bba3c57fb1e5c156d386ca11894f781v { return new sc_Char(c.val.toLowerCase()); } 1297727e995b7bba3c57fb1e5c156d386ca11894f781v 1298727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_makeJSStringOfLength(k, c) { 1299727e995b7bba3c57fb1e5c156d386ca11894f781v var fill; 1300727e995b7bba3c57fb1e5c156d386ca11894f781v if (c === undefined) 1301727e995b7bba3c57fb1e5c156d386ca11894f781v fill = " "; 1302727e995b7bba3c57fb1e5c156d386ca11894f781v else 1303727e995b7bba3c57fb1e5c156d386ca11894f781v fill = c; 1304727e995b7bba3c57fb1e5c156d386ca11894f781v var res = ""; 1305727e995b7bba3c57fb1e5c156d386ca11894f781v var len = 1; 1306727e995b7bba3c57fb1e5c156d386ca11894f781v // every round doubles the size of fill. 1307727e995b7bba3c57fb1e5c156d386ca11894f781v while (k >= len) { 1308727e995b7bba3c57fb1e5c156d386ca11894f781v if (k & len) 1309727e995b7bba3c57fb1e5c156d386ca11894f781v res = res.concat(fill); 1310727e995b7bba3c57fb1e5c156d386ca11894f781v fill = fill.concat(fill); 1311727e995b7bba3c57fb1e5c156d386ca11894f781v len *= 2; 1312727e995b7bba3c57fb1e5c156d386ca11894f781v } 1313727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 1314727e995b7bba3c57fb1e5c156d386ca11894f781v} 1315727e995b7bba3c57fb1e5c156d386ca11894f781v 1316727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_makejsString(k, c) { 1317727e995b7bba3c57fb1e5c156d386ca11894f781v var fill; 1318727e995b7bba3c57fb1e5c156d386ca11894f781v if (c) 1319727e995b7bba3c57fb1e5c156d386ca11894f781v fill = c.val; 1320727e995b7bba3c57fb1e5c156d386ca11894f781v else 1321727e995b7bba3c57fb1e5c156d386ca11894f781v fill = " "; 1322727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_makeJSStringOfLength(k, fill); 1323727e995b7bba3c57fb1e5c156d386ca11894f781v} 1324727e995b7bba3c57fb1e5c156d386ca11894f781v 1325727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_jsstring2list(s) { 1326727e995b7bba3c57fb1e5c156d386ca11894f781v var res = null; 1327727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = s.length - 1; i >= 0; i--) 1328727e995b7bba3c57fb1e5c156d386ca11894f781v res = sc_cons(new sc_Char(s.charAt(i)), res); 1329727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 1330727e995b7bba3c57fb1e5c156d386ca11894f781v} 1331727e995b7bba3c57fb1e5c156d386ca11894f781v 1332727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_list2jsstring(l) { 1333727e995b7bba3c57fb1e5c156d386ca11894f781v var a = new Array(); 1334727e995b7bba3c57fb1e5c156d386ca11894f781v while(l !== null) { 1335727e995b7bba3c57fb1e5c156d386ca11894f781v a.push(l.car.val); 1336727e995b7bba3c57fb1e5c156d386ca11894f781v l = l.cdr; 1337727e995b7bba3c57fb1e5c156d386ca11894f781v } 1338727e995b7bba3c57fb1e5c156d386ca11894f781v return "".concat.apply("", a); 1339727e995b7bba3c57fb1e5c156d386ca11894f781v} 1340727e995b7bba3c57fb1e5c156d386ca11894f781v 1341727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_Vector = Array; 1342727e995b7bba3c57fb1e5c156d386ca11894f781v 1343727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Vector.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) { 1344727e995b7bba3c57fb1e5c156d386ca11894f781v if (this.length === 0) return "#()"; 1345727e995b7bba3c57fb1e5c156d386ca11894f781v 1346727e995b7bba3c57fb1e5c156d386ca11894f781v var res = "#(" + writeOrDisplay(this[0]); 1347727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 1; i < this.length; i++) 1348727e995b7bba3c57fb1e5c156d386ca11894f781v res += " " + writeOrDisplay(this[i]); 1349727e995b7bba3c57fb1e5c156d386ca11894f781v res += ")"; 1350727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 1351727e995b7bba3c57fb1e5c156d386ca11894f781v}; 1352727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Vector.prototype.sc_toDisplayString = function() { 1353727e995b7bba3c57fb1e5c156d386ca11894f781v return this.sc_toWriteOrDisplayString(sc_toDisplayString); 1354727e995b7bba3c57fb1e5c156d386ca11894f781v}; 1355727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Vector.prototype.sc_toWriteString = function() { 1356727e995b7bba3c57fb1e5c156d386ca11894f781v return this.sc_toWriteOrDisplayString(sc_toWriteString); 1357727e995b7bba3c57fb1e5c156d386ca11894f781v}; 1358727e995b7bba3c57fb1e5c156d386ca11894f781v 1359727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export vector? array?) 1360727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1361727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix " instanceof sc_Vector"))) 1362727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1363727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isVector(v) { 1364727e995b7bba3c57fb1e5c156d386ca11894f781v return (v instanceof sc_Vector); 1365727e995b7bba3c57fb1e5c156d386ca11894f781v} 1366727e995b7bba3c57fb1e5c156d386ca11894f781v 1367727e995b7bba3c57fb1e5c156d386ca11894f781v// only applies to vectors 1368727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isVectorEqual(v1, v2, comp) { 1369727e995b7bba3c57fb1e5c156d386ca11894f781v if (v1.length !== v2.length) return false; 1370727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < v1.length; i++) 1371727e995b7bba3c57fb1e5c156d386ca11894f781v if (!comp(v1[i], v2[i])) return false; 1372727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 1373727e995b7bba3c57fb1e5c156d386ca11894f781v} 1374727e995b7bba3c57fb1e5c156d386ca11894f781v 1375727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export make-vector make-array)) */ 1376727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_makeVector(size, fill) { 1377727e995b7bba3c57fb1e5c156d386ca11894f781v var a = new sc_Vector(size); 1378727e995b7bba3c57fb1e5c156d386ca11894f781v if (fill !== undefined) 1379727e995b7bba3c57fb1e5c156d386ca11894f781v sc_vectorFillBang(a, fill); 1380727e995b7bba3c57fb1e5c156d386ca11894f781v return a; 1381727e995b7bba3c57fb1e5c156d386ca11894f781v} 1382727e995b7bba3c57fb1e5c156d386ca11894f781v 1383727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export vector array) 1384727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (vector))) 1385727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1386727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_vector() { 1387727e995b7bba3c57fb1e5c156d386ca11894f781v var a = new sc_Vector(); 1388727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < arguments.length; i++) 1389727e995b7bba3c57fb1e5c156d386ca11894f781v a.push(arguments[i]); 1390727e995b7bba3c57fb1e5c156d386ca11894f781v return a; 1391727e995b7bba3c57fb1e5c156d386ca11894f781v} 1392727e995b7bba3c57fb1e5c156d386ca11894f781v 1393727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export vector-length array-length) 1394727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".length"))) 1395727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1396727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_vectorLength(v) { 1397727e995b7bba3c57fb1e5c156d386ca11894f781v return v.length; 1398727e995b7bba3c57fb1e5c156d386ca11894f781v} 1399727e995b7bba3c57fb1e5c156d386ca11894f781v 1400727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export vector-ref array-ref) 1401727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 v "[" pos "]"))) 1402727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1403727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_vectorRef(v, pos) { 1404727e995b7bba3c57fb1e5c156d386ca11894f781v return v[pos]; 1405727e995b7bba3c57fb1e5c156d386ca11894f781v} 1406727e995b7bba3c57fb1e5c156d386ca11894f781v 1407727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export vector-set! array-set!) 1408727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 3 v "[" pos "] = " val))) 1409727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1410727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_vectorSetBang(v, pos, val) { 1411727e995b7bba3c57fb1e5c156d386ca11894f781v v[pos] = val; 1412727e995b7bba3c57fb1e5c156d386ca11894f781v} 1413727e995b7bba3c57fb1e5c156d386ca11894f781v 1414727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export vector->list array->list)) */ 1415727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_vector2list(a) { 1416727e995b7bba3c57fb1e5c156d386ca11894f781v var res = null; 1417727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = a.length-1; i >= 0; i--) 1418727e995b7bba3c57fb1e5c156d386ca11894f781v res = sc_cons(a[i], res); 1419727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 1420727e995b7bba3c57fb1e5c156d386ca11894f781v} 1421727e995b7bba3c57fb1e5c156d386ca11894f781v 1422727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export list->vector list->array)) */ 1423727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_list2vector(l) { 1424727e995b7bba3c57fb1e5c156d386ca11894f781v var a = new sc_Vector(); 1425727e995b7bba3c57fb1e5c156d386ca11894f781v while(l !== null) { 1426727e995b7bba3c57fb1e5c156d386ca11894f781v a.push(l.car); 1427727e995b7bba3c57fb1e5c156d386ca11894f781v l = l.cdr; 1428727e995b7bba3c57fb1e5c156d386ca11894f781v } 1429727e995b7bba3c57fb1e5c156d386ca11894f781v return a; 1430727e995b7bba3c57fb1e5c156d386ca11894f781v} 1431727e995b7bba3c57fb1e5c156d386ca11894f781v 1432727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export vector-fill! array-fill!)) */ 1433727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_vectorFillBang(a, fill) { 1434727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < a.length; i++) 1435727e995b7bba3c57fb1e5c156d386ca11894f781v a[i] = fill; 1436727e995b7bba3c57fb1e5c156d386ca11894f781v} 1437727e995b7bba3c57fb1e5c156d386ca11894f781v 1438727e995b7bba3c57fb1e5c156d386ca11894f781v 1439727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1440727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_copyVector(a, len) { 1441727e995b7bba3c57fb1e5c156d386ca11894f781v if (len <= a.length) 1442727e995b7bba3c57fb1e5c156d386ca11894f781v return a.slice(0, len); 1443727e995b7bba3c57fb1e5c156d386ca11894f781v else { 1444727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = a.concat(); 1445727e995b7bba3c57fb1e5c156d386ca11894f781v tmp.length = len; 1446727e995b7bba3c57fb1e5c156d386ca11894f781v return tmp; 1447727e995b7bba3c57fb1e5c156d386ca11894f781v } 1448727e995b7bba3c57fb1e5c156d386ca11894f781v} 1449727e995b7bba3c57fb1e5c156d386ca11894f781v 1450727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1451727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 3 a ".slice(" start "," end ")"))) 1452727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1453727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_vectorCopy(a, start, end) { 1454727e995b7bba3c57fb1e5c156d386ca11894f781v return a.slice(start, end); 1455727e995b7bba3c57fb1e5c156d386ca11894f781v} 1456727e995b7bba3c57fb1e5c156d386ca11894f781v 1457727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1458727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_vectorCopyBang(target, tstart, source, sstart, send) { 1459727e995b7bba3c57fb1e5c156d386ca11894f781v if (!sstart) sstart = 0; 1460727e995b7bba3c57fb1e5c156d386ca11894f781v if (!send) send = source.length; 1461727e995b7bba3c57fb1e5c156d386ca11894f781v 1462727e995b7bba3c57fb1e5c156d386ca11894f781v // if target == source we don't want to overwrite not yet copied elements. 1463727e995b7bba3c57fb1e5c156d386ca11894f781v if (tstart <= sstart) { 1464727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = tstart, j = sstart; j < send; i++, j++) { 1465727e995b7bba3c57fb1e5c156d386ca11894f781v target[i] = source[j]; 1466727e995b7bba3c57fb1e5c156d386ca11894f781v } 1467727e995b7bba3c57fb1e5c156d386ca11894f781v } else { 1468727e995b7bba3c57fb1e5c156d386ca11894f781v var diff = send - sstart; 1469727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = tstart + diff - 1, j = send - 1; 1470727e995b7bba3c57fb1e5c156d386ca11894f781v j >= sstart; 1471727e995b7bba3c57fb1e5c156d386ca11894f781v i--, j--) { 1472727e995b7bba3c57fb1e5c156d386ca11894f781v target[i] = source[j]; 1473727e995b7bba3c57fb1e5c156d386ca11894f781v } 1474727e995b7bba3c57fb1e5c156d386ca11894f781v } 1475727e995b7bba3c57fb1e5c156d386ca11894f781v return target; 1476727e995b7bba3c57fb1e5c156d386ca11894f781v} 1477727e995b7bba3c57fb1e5c156d386ca11894f781v 1478727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1479727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1480727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 1 "typeof " o " === 'function'"))) 1481727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1482727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isProcedure(o) { 1483727e995b7bba3c57fb1e5c156d386ca11894f781v return (typeof o === "function"); 1484727e995b7bba3c57fb1e5c156d386ca11894f781v} 1485727e995b7bba3c57fb1e5c156d386ca11894f781v 1486727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1487727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_apply(proc) { 1488727e995b7bba3c57fb1e5c156d386ca11894f781v var args = new Array(); 1489727e995b7bba3c57fb1e5c156d386ca11894f781v // first part of arguments are not in list-form. 1490727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 1; i < arguments.length - 1; i++) 1491727e995b7bba3c57fb1e5c156d386ca11894f781v args.push(arguments[i]); 1492727e995b7bba3c57fb1e5c156d386ca11894f781v var l = arguments[arguments.length - 1]; 1493727e995b7bba3c57fb1e5c156d386ca11894f781v while (l !== null) { 1494727e995b7bba3c57fb1e5c156d386ca11894f781v args.push(l.car); 1495727e995b7bba3c57fb1e5c156d386ca11894f781v l = l.cdr; 1496727e995b7bba3c57fb1e5c156d386ca11894f781v } 1497727e995b7bba3c57fb1e5c156d386ca11894f781v return proc.apply(null, args); 1498727e995b7bba3c57fb1e5c156d386ca11894f781v} 1499727e995b7bba3c57fb1e5c156d386ca11894f781v 1500727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1501727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_map(proc, l1) { 1502727e995b7bba3c57fb1e5c156d386ca11894f781v if (l1 === undefined) 1503727e995b7bba3c57fb1e5c156d386ca11894f781v return null; 1504727e995b7bba3c57fb1e5c156d386ca11894f781v // else 1505727e995b7bba3c57fb1e5c156d386ca11894f781v var nbApplyArgs = arguments.length - 1; 1506727e995b7bba3c57fb1e5c156d386ca11894f781v var applyArgs = new Array(nbApplyArgs); 1507727e995b7bba3c57fb1e5c156d386ca11894f781v var revres = null; 1508727e995b7bba3c57fb1e5c156d386ca11894f781v while (l1 !== null) { 1509727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < nbApplyArgs; i++) { 1510727e995b7bba3c57fb1e5c156d386ca11894f781v applyArgs[i] = arguments[i + 1].car; 1511727e995b7bba3c57fb1e5c156d386ca11894f781v arguments[i + 1] = arguments[i + 1].cdr; 1512727e995b7bba3c57fb1e5c156d386ca11894f781v } 1513727e995b7bba3c57fb1e5c156d386ca11894f781v revres = sc_cons(proc.apply(null, applyArgs), revres); 1514727e995b7bba3c57fb1e5c156d386ca11894f781v } 1515727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_reverseAppendBang(revres, null); 1516727e995b7bba3c57fb1e5c156d386ca11894f781v} 1517727e995b7bba3c57fb1e5c156d386ca11894f781v 1518727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1519727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_mapBang(proc, l1) { 1520727e995b7bba3c57fb1e5c156d386ca11894f781v if (l1 === undefined) 1521727e995b7bba3c57fb1e5c156d386ca11894f781v return null; 1522727e995b7bba3c57fb1e5c156d386ca11894f781v // else 1523727e995b7bba3c57fb1e5c156d386ca11894f781v var l1_orig = l1; 1524727e995b7bba3c57fb1e5c156d386ca11894f781v var nbApplyArgs = arguments.length - 1; 1525727e995b7bba3c57fb1e5c156d386ca11894f781v var applyArgs = new Array(nbApplyArgs); 1526727e995b7bba3c57fb1e5c156d386ca11894f781v while (l1 !== null) { 1527727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = l1; 1528727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < nbApplyArgs; i++) { 1529727e995b7bba3c57fb1e5c156d386ca11894f781v applyArgs[i] = arguments[i + 1].car; 1530727e995b7bba3c57fb1e5c156d386ca11894f781v arguments[i + 1] = arguments[i + 1].cdr; 1531727e995b7bba3c57fb1e5c156d386ca11894f781v } 1532727e995b7bba3c57fb1e5c156d386ca11894f781v tmp.car = proc.apply(null, applyArgs); 1533727e995b7bba3c57fb1e5c156d386ca11894f781v } 1534727e995b7bba3c57fb1e5c156d386ca11894f781v return l1_orig; 1535727e995b7bba3c57fb1e5c156d386ca11894f781v} 15361805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 1537727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1538727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_forEach(proc, l1) { 1539727e995b7bba3c57fb1e5c156d386ca11894f781v if (l1 === undefined) 1540727e995b7bba3c57fb1e5c156d386ca11894f781v return undefined; 1541727e995b7bba3c57fb1e5c156d386ca11894f781v // else 1542727e995b7bba3c57fb1e5c156d386ca11894f781v var nbApplyArgs = arguments.length - 1; 1543727e995b7bba3c57fb1e5c156d386ca11894f781v var applyArgs = new Array(nbApplyArgs); 1544727e995b7bba3c57fb1e5c156d386ca11894f781v while (l1 !== null) { 1545727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < nbApplyArgs; i++) { 1546727e995b7bba3c57fb1e5c156d386ca11894f781v applyArgs[i] = arguments[i + 1].car; 1547727e995b7bba3c57fb1e5c156d386ca11894f781v arguments[i + 1] = arguments[i + 1].cdr; 1548727e995b7bba3c57fb1e5c156d386ca11894f781v } 1549727e995b7bba3c57fb1e5c156d386ca11894f781v proc.apply(null, applyArgs); 1550727e995b7bba3c57fb1e5c156d386ca11894f781v } 1551727e995b7bba3c57fb1e5c156d386ca11894f781v // add return so FF does not complain. 1552727e995b7bba3c57fb1e5c156d386ca11894f781v return undefined; 1553727e995b7bba3c57fb1e5c156d386ca11894f781v} 1554727e995b7bba3c57fb1e5c156d386ca11894f781v 1555727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1556727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_filter(proc, l1) { 1557727e995b7bba3c57fb1e5c156d386ca11894f781v var dummy = { cdr : null }; 1558727e995b7bba3c57fb1e5c156d386ca11894f781v var tail = dummy; 1559727e995b7bba3c57fb1e5c156d386ca11894f781v while (l1 !== null) { 1560727e995b7bba3c57fb1e5c156d386ca11894f781v if (proc(l1.car) !== false) { 1561727e995b7bba3c57fb1e5c156d386ca11894f781v tail.cdr = sc_cons(l1.car, null); 1562727e995b7bba3c57fb1e5c156d386ca11894f781v tail = tail.cdr; 1563727e995b7bba3c57fb1e5c156d386ca11894f781v } 1564727e995b7bba3c57fb1e5c156d386ca11894f781v l1 = l1.cdr; 1565727e995b7bba3c57fb1e5c156d386ca11894f781v } 1566727e995b7bba3c57fb1e5c156d386ca11894f781v return dummy.cdr; 1567727e995b7bba3c57fb1e5c156d386ca11894f781v} 1568727e995b7bba3c57fb1e5c156d386ca11894f781v 1569727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1570727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_filterBang(proc, l1) { 1571727e995b7bba3c57fb1e5c156d386ca11894f781v var head = sc_cons("dummy", l1); 1572727e995b7bba3c57fb1e5c156d386ca11894f781v var it = head; 1573727e995b7bba3c57fb1e5c156d386ca11894f781v var next = l1; 1574727e995b7bba3c57fb1e5c156d386ca11894f781v while (next !== null) { 1575727e995b7bba3c57fb1e5c156d386ca11894f781v if (proc(next.car) !== false) { 1576727e995b7bba3c57fb1e5c156d386ca11894f781v it.cdr = next 1577727e995b7bba3c57fb1e5c156d386ca11894f781v it = next; 1578727e995b7bba3c57fb1e5c156d386ca11894f781v } 1579727e995b7bba3c57fb1e5c156d386ca11894f781v next = next.cdr; 1580727e995b7bba3c57fb1e5c156d386ca11894f781v } 1581727e995b7bba3c57fb1e5c156d386ca11894f781v it.cdr = null; 1582727e995b7bba3c57fb1e5c156d386ca11894f781v return head.cdr; 1583727e995b7bba3c57fb1e5c156d386ca11894f781v} 1584727e995b7bba3c57fb1e5c156d386ca11894f781v 1585727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_filterMap1(proc, l1) { 1586727e995b7bba3c57fb1e5c156d386ca11894f781v var revres = null; 1587727e995b7bba3c57fb1e5c156d386ca11894f781v while (l1 !== null) { 1588727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = proc(l1.car) 1589727e995b7bba3c57fb1e5c156d386ca11894f781v if (tmp !== false) revres = sc_cons(tmp, revres); 1590727e995b7bba3c57fb1e5c156d386ca11894f781v l1 = l1.cdr; 1591727e995b7bba3c57fb1e5c156d386ca11894f781v } 1592727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_reverseAppendBang(revres, null); 1593727e995b7bba3c57fb1e5c156d386ca11894f781v} 1594727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_filterMap2(proc, l1, l2) { 1595727e995b7bba3c57fb1e5c156d386ca11894f781v var revres = null; 1596727e995b7bba3c57fb1e5c156d386ca11894f781v while (l1 !== null) { 1597727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = proc(l1.car, l2.car); 1598727e995b7bba3c57fb1e5c156d386ca11894f781v if(tmp !== false) revres = sc_cons(tmp, revres); 1599727e995b7bba3c57fb1e5c156d386ca11894f781v l1 = l1.cdr; 1600727e995b7bba3c57fb1e5c156d386ca11894f781v l2 = l2.cdr 1601727e995b7bba3c57fb1e5c156d386ca11894f781v } 1602727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_reverseAppendBang(revres, null); 1603727e995b7bba3c57fb1e5c156d386ca11894f781v} 1604727e995b7bba3c57fb1e5c156d386ca11894f781v 1605727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1606727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_filterMap(proc, l1, l2, l3) { 1607727e995b7bba3c57fb1e5c156d386ca11894f781v if (l2 === undefined) 1608727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_filterMap1(proc, l1); 1609727e995b7bba3c57fb1e5c156d386ca11894f781v else if (l3 === undefined) 1610727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_filterMap2(proc, l1, l2); 1611727e995b7bba3c57fb1e5c156d386ca11894f781v // else 1612727e995b7bba3c57fb1e5c156d386ca11894f781v var nbApplyArgs = arguments.length - 1; 1613727e995b7bba3c57fb1e5c156d386ca11894f781v var applyArgs = new Array(nbApplyArgs); 1614727e995b7bba3c57fb1e5c156d386ca11894f781v var revres = null; 1615727e995b7bba3c57fb1e5c156d386ca11894f781v while (l1 !== null) { 1616727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < nbApplyArgs; i++) { 1617727e995b7bba3c57fb1e5c156d386ca11894f781v applyArgs[i] = arguments[i + 1].car; 1618727e995b7bba3c57fb1e5c156d386ca11894f781v arguments[i + 1] = arguments[i + 1].cdr; 1619727e995b7bba3c57fb1e5c156d386ca11894f781v } 1620727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = proc.apply(null, applyArgs); 1621727e995b7bba3c57fb1e5c156d386ca11894f781v if(tmp !== false) revres = sc_cons(tmp, revres); 1622727e995b7bba3c57fb1e5c156d386ca11894f781v } 1623727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_reverseAppendBang(revres, null); 1624727e995b7bba3c57fb1e5c156d386ca11894f781v} 1625727e995b7bba3c57fb1e5c156d386ca11894f781v 1626727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1627727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_any(proc, l) { 1628727e995b7bba3c57fb1e5c156d386ca11894f781v var revres = null; 1629727e995b7bba3c57fb1e5c156d386ca11894f781v while (l !== null) { 1630727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = proc(l.car); 1631727e995b7bba3c57fb1e5c156d386ca11894f781v if(tmp !== false) return tmp; 1632727e995b7bba3c57fb1e5c156d386ca11894f781v l = l.cdr; 1633727e995b7bba3c57fb1e5c156d386ca11894f781v } 1634727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 1635727e995b7bba3c57fb1e5c156d386ca11894f781v} 1636727e995b7bba3c57fb1e5c156d386ca11894f781v 1637727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export any?) 1638727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 "sc_any(" proc "," l ") !== false"))) 1639727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1640727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_anyPred(proc, l) { 1641727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_any(proc, l)!== false; 1642727e995b7bba3c57fb1e5c156d386ca11894f781v} 1643727e995b7bba3c57fb1e5c156d386ca11894f781v 1644727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1645727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_every(proc, l) { 1646727e995b7bba3c57fb1e5c156d386ca11894f781v var revres = null; 1647727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = true; 1648727e995b7bba3c57fb1e5c156d386ca11894f781v while (l !== null) { 1649727e995b7bba3c57fb1e5c156d386ca11894f781v tmp = proc(l.car); 1650727e995b7bba3c57fb1e5c156d386ca11894f781v if (tmp === false) return false; 1651727e995b7bba3c57fb1e5c156d386ca11894f781v l = l.cdr; 1652727e995b7bba3c57fb1e5c156d386ca11894f781v } 1653727e995b7bba3c57fb1e5c156d386ca11894f781v return tmp; 1654727e995b7bba3c57fb1e5c156d386ca11894f781v} 1655727e995b7bba3c57fb1e5c156d386ca11894f781v 1656727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export every?) 1657727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 "sc_every(" proc "," l ") !== false"))) 1658727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1659727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_everyPred(proc, l) { 1660727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = sc_every(proc, l); 1661727e995b7bba3c57fb1e5c156d386ca11894f781v if (tmp !== false) return true; 1662727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 1663727e995b7bba3c57fb1e5c156d386ca11894f781v} 1664727e995b7bba3c57fb1e5c156d386ca11894f781v 1665727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1666727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix "()"))) 1667727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1668727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_force(o) { 1669727e995b7bba3c57fb1e5c156d386ca11894f781v return o(); 1670727e995b7bba3c57fb1e5c156d386ca11894f781v} 1671727e995b7bba3c57fb1e5c156d386ca11894f781v 1672727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1673727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_makePromise(proc) { 1674727e995b7bba3c57fb1e5c156d386ca11894f781v var isResultReady = false; 1675727e995b7bba3c57fb1e5c156d386ca11894f781v var result = undefined; 1676727e995b7bba3c57fb1e5c156d386ca11894f781v return function() { 1677727e995b7bba3c57fb1e5c156d386ca11894f781v if (!isResultReady) { 1678727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = proc(); 1679727e995b7bba3c57fb1e5c156d386ca11894f781v if (!isResultReady) { 1680727e995b7bba3c57fb1e5c156d386ca11894f781v isResultReady = true; 1681727e995b7bba3c57fb1e5c156d386ca11894f781v result = tmp; 1682727e995b7bba3c57fb1e5c156d386ca11894f781v } 1683727e995b7bba3c57fb1e5c156d386ca11894f781v } 1684727e995b7bba3c57fb1e5c156d386ca11894f781v return result; 1685727e995b7bba3c57fb1e5c156d386ca11894f781v }; 1686727e995b7bba3c57fb1e5c156d386ca11894f781v} 1687727e995b7bba3c57fb1e5c156d386ca11894f781v 1688727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_Values(values) { 1689727e995b7bba3c57fb1e5c156d386ca11894f781v this.values = values; 1690727e995b7bba3c57fb1e5c156d386ca11894f781v} 1691727e995b7bba3c57fb1e5c156d386ca11894f781v 1692727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1693727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (values))) 1694727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1695727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_values() { 1696727e995b7bba3c57fb1e5c156d386ca11894f781v if (arguments.length === 1) 1697727e995b7bba3c57fb1e5c156d386ca11894f781v return arguments[0]; 1698727e995b7bba3c57fb1e5c156d386ca11894f781v else 1699727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Values(arguments); 1700727e995b7bba3c57fb1e5c156d386ca11894f781v} 1701727e995b7bba3c57fb1e5c156d386ca11894f781v 1702727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1703727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_callWithValues(producer, consumer) { 1704727e995b7bba3c57fb1e5c156d386ca11894f781v var produced = producer(); 1705727e995b7bba3c57fb1e5c156d386ca11894f781v if (produced instanceof sc_Values) 1706727e995b7bba3c57fb1e5c156d386ca11894f781v return consumer.apply(null, produced.values); 1707727e995b7bba3c57fb1e5c156d386ca11894f781v else 1708727e995b7bba3c57fb1e5c156d386ca11894f781v return consumer(produced); 1709727e995b7bba3c57fb1e5c156d386ca11894f781v} 1710727e995b7bba3c57fb1e5c156d386ca11894f781v 1711727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1712727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_dynamicWind(before, thunk, after) { 1713727e995b7bba3c57fb1e5c156d386ca11894f781v before(); 1714727e995b7bba3c57fb1e5c156d386ca11894f781v try { 1715727e995b7bba3c57fb1e5c156d386ca11894f781v var res = thunk(); 1716727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 1717727e995b7bba3c57fb1e5c156d386ca11894f781v } finally { 1718727e995b7bba3c57fb1e5c156d386ca11894f781v after(); 1719727e995b7bba3c57fb1e5c156d386ca11894f781v } 1720727e995b7bba3c57fb1e5c156d386ca11894f781v} 1721727e995b7bba3c57fb1e5c156d386ca11894f781v 1722727e995b7bba3c57fb1e5c156d386ca11894f781v 1723727e995b7bba3c57fb1e5c156d386ca11894f781v// TODO: eval/scheme-report-environment/null-environment/interaction-environment 1724727e995b7bba3c57fb1e5c156d386ca11894f781v 1725727e995b7bba3c57fb1e5c156d386ca11894f781v// LIMITATION: 'load' doesn't exist without files. 1726727e995b7bba3c57fb1e5c156d386ca11894f781v// LIMITATION: transcript-on/transcript-off doesn't exist without files. 1727727e995b7bba3c57fb1e5c156d386ca11894f781v 1728727e995b7bba3c57fb1e5c156d386ca11894f781v 1729727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_Struct(name) { 1730727e995b7bba3c57fb1e5c156d386ca11894f781v this.name = name; 1731727e995b7bba3c57fb1e5c156d386ca11894f781v} 1732727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Struct.prototype.sc_toDisplayString = function() { 1733727e995b7bba3c57fb1e5c156d386ca11894f781v return "#<struct" + sc_hash(this) + ">"; 1734727e995b7bba3c57fb1e5c156d386ca11894f781v}; 1735727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Struct.prototype.sc_toWriteString = sc_Struct.prototype.sc_toDisplayString; 1736727e995b7bba3c57fb1e5c156d386ca11894f781v 1737727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1738727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 1 "new sc_Struct(" name ")"))) 1739727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1740727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_makeStruct(name) { 1741727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Struct(name); 1742727e995b7bba3c57fb1e5c156d386ca11894f781v} 1743727e995b7bba3c57fb1e5c156d386ca11894f781v 1744727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1745727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1746727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix " instanceof sc_Struct"))) 1747727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1748727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isStruct(o) { 1749727e995b7bba3c57fb1e5c156d386ca11894f781v return (o instanceof sc_Struct); 1750727e995b7bba3c57fb1e5c156d386ca11894f781v} 1751727e995b7bba3c57fb1e5c156d386ca11894f781v 1752727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1753727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 1754727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 "(" 1 " instanceof sc_Struct) && ( " 1 ".name === " 0 ")"))) 1755727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1756727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isStructNamed(name, s) { 1757727e995b7bba3c57fb1e5c156d386ca11894f781v return ((s instanceof sc_Struct) && (s.name === name)); 1758727e995b7bba3c57fb1e5c156d386ca11894f781v} 1759727e995b7bba3c57fb1e5c156d386ca11894f781v 1760727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export struct-field) 1761727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 3 0 "[" 2 "]"))) 1762727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1763727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_getStructField(s, name, field) { 1764727e995b7bba3c57fb1e5c156d386ca11894f781v return s[field]; 1765727e995b7bba3c57fb1e5c156d386ca11894f781v} 1766727e995b7bba3c57fb1e5c156d386ca11894f781v 1767727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export struct-field-set!) 1768727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 4 0 "[" 2 "] = " 3))) 1769727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1770727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_setStructFieldBang(s, name, field, val) { 1771727e995b7bba3c57fb1e5c156d386ca11894f781v s[field] = val; 1772727e995b7bba3c57fb1e5c156d386ca11894f781v} 1773727e995b7bba3c57fb1e5c156d386ca11894f781v 1774727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1775727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (prefix "~"))) 1776727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1777727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_bitNot(x) { 1778727e995b7bba3c57fb1e5c156d386ca11894f781v return ~x; 1779727e995b7bba3c57fb1e5c156d386ca11894f781v} 1780727e995b7bba3c57fb1e5c156d386ca11894f781v 1781727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1782727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 2 2 "&"))) 1783727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1784727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_bitAnd(x, y) { 1785727e995b7bba3c57fb1e5c156d386ca11894f781v return x & y; 1786727e995b7bba3c57fb1e5c156d386ca11894f781v} 1787727e995b7bba3c57fb1e5c156d386ca11894f781v 1788727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1789727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 2 2 "|"))) 1790727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1791727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_bitOr(x, y) { 1792727e995b7bba3c57fb1e5c156d386ca11894f781v return x | y; 1793727e995b7bba3c57fb1e5c156d386ca11894f781v} 1794727e995b7bba3c57fb1e5c156d386ca11894f781v 1795727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1796727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 2 2 "^"))) 1797727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1798727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_bitXor(x, y) { 1799727e995b7bba3c57fb1e5c156d386ca11894f781v return x ^ y; 1800727e995b7bba3c57fb1e5c156d386ca11894f781v} 1801727e995b7bba3c57fb1e5c156d386ca11894f781v 1802727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1803727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 2 2 "<<"))) 1804727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1805727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_bitLsh(x, y) { 1806727e995b7bba3c57fb1e5c156d386ca11894f781v return x << y; 1807727e995b7bba3c57fb1e5c156d386ca11894f781v} 1808727e995b7bba3c57fb1e5c156d386ca11894f781v 1809727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1810727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 2 2 ">>"))) 1811727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1812727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_bitRsh(x, y) { 1813727e995b7bba3c57fb1e5c156d386ca11894f781v return x >> y; 1814727e995b7bba3c57fb1e5c156d386ca11894f781v} 1815727e995b7bba3c57fb1e5c156d386ca11894f781v 1816727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1817727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 2 2 ">>>"))) 1818727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1819727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_bitUrsh(x, y) { 1820727e995b7bba3c57fb1e5c156d386ca11894f781v return x >>> y; 1821727e995b7bba3c57fb1e5c156d386ca11894f781v} 1822727e995b7bba3c57fb1e5c156d386ca11894f781v 1823727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export js-field js-property) 1824727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 o "[" field "]"))) 1825727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1826727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_jsField(o, field) { 1827727e995b7bba3c57fb1e5c156d386ca11894f781v return o[field]; 1828727e995b7bba3c57fb1e5c156d386ca11894f781v} 1829727e995b7bba3c57fb1e5c156d386ca11894f781v 1830727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export js-field-set! js-property-set!) 1831727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 3 o "[" field "] = " val))) 1832727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1833727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_setJsFieldBang(o, field, val) { 1834727e995b7bba3c57fb1e5c156d386ca11894f781v return o[field] = val; 1835727e995b7bba3c57fb1e5c156d386ca11894f781v} 1836727e995b7bba3c57fb1e5c156d386ca11894f781v 1837727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export js-field-delete! js-property-delete!) 1838727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 "delete" o "[" field "]"))) 1839727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1840727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_deleteJsFieldBang(o, field) { 1841727e995b7bba3c57fb1e5c156d386ca11894f781v delete o[field]; 1842727e995b7bba3c57fb1e5c156d386ca11894f781v} 1843727e995b7bba3c57fb1e5c156d386ca11894f781v 1844727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1845727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (jsCall))) 1846727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1847727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_jsCall(o, fun) { 1848727e995b7bba3c57fb1e5c156d386ca11894f781v var args = new Array(); 1849727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 2; i < arguments.length; i++) 1850727e995b7bba3c57fb1e5c156d386ca11894f781v args[i-2] = arguments[i]; 1851727e995b7bba3c57fb1e5c156d386ca11894f781v return fun.apply(o, args); 1852727e995b7bba3c57fb1e5c156d386ca11894f781v} 1853727e995b7bba3c57fb1e5c156d386ca11894f781v 1854727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1855727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (jsMethodCall))) 1856727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1857727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_jsMethodCall(o, field) { 1858727e995b7bba3c57fb1e5c156d386ca11894f781v var args = new Array(); 1859727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 2; i < arguments.length; i++) 1860727e995b7bba3c57fb1e5c156d386ca11894f781v args[i-2] = arguments[i]; 1861727e995b7bba3c57fb1e5c156d386ca11894f781v return o[field].apply(o, args); 1862727e995b7bba3c57fb1e5c156d386ca11894f781v} 1863727e995b7bba3c57fb1e5c156d386ca11894f781v 1864727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export new js-new) 1865727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (jsNew))) 1866727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1867727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_jsNew(c) { 1868727e995b7bba3c57fb1e5c156d386ca11894f781v var evalStr = "new c("; 1869727e995b7bba3c57fb1e5c156d386ca11894f781v evalStr +=arguments.length > 1? "arguments[1]": ""; 1870727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 2; i < arguments.length; i++) 1871727e995b7bba3c57fb1e5c156d386ca11894f781v evalStr += ", arguments[" + i + "]"; 1872727e995b7bba3c57fb1e5c156d386ca11894f781v evalStr +=")"; 1873727e995b7bba3c57fb1e5c156d386ca11894f781v return eval(evalStr); 18741805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org} 1875727e995b7bba3c57fb1e5c156d386ca11894f781v 1876727e995b7bba3c57fb1e5c156d386ca11894f781v// ======================== RegExp ==================== 1877727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1878727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_pregexp(re) { 1879727e995b7bba3c57fb1e5c156d386ca11894f781v return new RegExp(sc_string2jsstring(re)); 1880727e995b7bba3c57fb1e5c156d386ca11894f781v} 1881727e995b7bba3c57fb1e5c156d386ca11894f781v 1882727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1883727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_pregexpMatch(re, s) { 1884727e995b7bba3c57fb1e5c156d386ca11894f781v var reg = (re instanceof RegExp) ? re : sc_pregexp(re); 1885727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = reg.exec(sc_string2jsstring(s)); 18861805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 1887727e995b7bba3c57fb1e5c156d386ca11894f781v if (tmp == null) return false; 18881805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 1889727e995b7bba3c57fb1e5c156d386ca11894f781v var res = null; 1890727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = tmp.length-1; i >= 0; i--) { 1891727e995b7bba3c57fb1e5c156d386ca11894f781v if (tmp[i] !== null) { 1892727e995b7bba3c57fb1e5c156d386ca11894f781v res = sc_cons(sc_jsstring2string(tmp[i]), res); 1893727e995b7bba3c57fb1e5c156d386ca11894f781v } else { 1894727e995b7bba3c57fb1e5c156d386ca11894f781v res = sc_cons(false, res); 1895727e995b7bba3c57fb1e5c156d386ca11894f781v } 1896727e995b7bba3c57fb1e5c156d386ca11894f781v } 1897727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 1898727e995b7bba3c57fb1e5c156d386ca11894f781v} 18991805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 1900727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1901727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_pregexpReplace(re, s1, s2) { 1902727e995b7bba3c57fb1e5c156d386ca11894f781v var reg; 1903727e995b7bba3c57fb1e5c156d386ca11894f781v var jss1 = sc_string2jsstring(s1); 1904727e995b7bba3c57fb1e5c156d386ca11894f781v var jss2 = sc_string2jsstring(s2); 1905727e995b7bba3c57fb1e5c156d386ca11894f781v 1906727e995b7bba3c57fb1e5c156d386ca11894f781v if (re instanceof RegExp) { 1907727e995b7bba3c57fb1e5c156d386ca11894f781v if (re.global) 1908727e995b7bba3c57fb1e5c156d386ca11894f781v reg = re; 1909727e995b7bba3c57fb1e5c156d386ca11894f781v else 1910727e995b7bba3c57fb1e5c156d386ca11894f781v reg = new RegExp(re.source); 1911727e995b7bba3c57fb1e5c156d386ca11894f781v } else { 1912727e995b7bba3c57fb1e5c156d386ca11894f781v reg = new RegExp(sc_string2jsstring(re)); 1913727e995b7bba3c57fb1e5c156d386ca11894f781v } 1914727e995b7bba3c57fb1e5c156d386ca11894f781v 1915727e995b7bba3c57fb1e5c156d386ca11894f781v return jss1.replace(reg, jss2); 1916727e995b7bba3c57fb1e5c156d386ca11894f781v} 19171805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 1918727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export pregexp-replace*)) */ 1919727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_pregexpReplaceAll(re, s1, s2) { 1920727e995b7bba3c57fb1e5c156d386ca11894f781v var reg; 1921727e995b7bba3c57fb1e5c156d386ca11894f781v var jss1 = sc_string2jsstring(s1); 1922727e995b7bba3c57fb1e5c156d386ca11894f781v var jss2 = sc_string2jsstring(s2); 1923727e995b7bba3c57fb1e5c156d386ca11894f781v 1924727e995b7bba3c57fb1e5c156d386ca11894f781v if (re instanceof RegExp) { 1925727e995b7bba3c57fb1e5c156d386ca11894f781v if (re.global) 1926727e995b7bba3c57fb1e5c156d386ca11894f781v reg = re; 1927727e995b7bba3c57fb1e5c156d386ca11894f781v else 1928727e995b7bba3c57fb1e5c156d386ca11894f781v reg = new RegExp(re.source, "g"); 1929727e995b7bba3c57fb1e5c156d386ca11894f781v } else { 1930727e995b7bba3c57fb1e5c156d386ca11894f781v reg = new RegExp(sc_string2jsstring(re), "g"); 1931727e995b7bba3c57fb1e5c156d386ca11894f781v } 1932727e995b7bba3c57fb1e5c156d386ca11894f781v 1933727e995b7bba3c57fb1e5c156d386ca11894f781v return jss1.replace(reg, jss2); 1934727e995b7bba3c57fb1e5c156d386ca11894f781v} 1935727e995b7bba3c57fb1e5c156d386ca11894f781v 1936727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1937727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_pregexpSplit(re, s) { 1938727e995b7bba3c57fb1e5c156d386ca11894f781v var reg = ((re instanceof RegExp) ? 1939727e995b7bba3c57fb1e5c156d386ca11894f781v re : 1940727e995b7bba3c57fb1e5c156d386ca11894f781v new RegExp(sc_string2jsstring(re))); 1941727e995b7bba3c57fb1e5c156d386ca11894f781v var jss = sc_string2jsstring(s); 1942727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = jss.split(reg); 1943727e995b7bba3c57fb1e5c156d386ca11894f781v 1944727e995b7bba3c57fb1e5c156d386ca11894f781v if (tmp == null) return false; 1945727e995b7bba3c57fb1e5c156d386ca11894f781v 1946727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_vector2list(tmp); 1947727e995b7bba3c57fb1e5c156d386ca11894f781v} 19481805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 1949727e995b7bba3c57fb1e5c156d386ca11894f781v 1950727e995b7bba3c57fb1e5c156d386ca11894f781v/* =========================================================================== */ 1951727e995b7bba3c57fb1e5c156d386ca11894f781v/* Other library stuff */ 1952727e995b7bba3c57fb1e5c156d386ca11894f781v/* =========================================================================== */ 1953727e995b7bba3c57fb1e5c156d386ca11894f781v 1954727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1955727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 1 "Math.floor(Math.random()*" 'n ")"))) 1956727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1957727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_random(n) { 1958727e995b7bba3c57fb1e5c156d386ca11894f781v return Math.floor(Math.random()*n); 1959727e995b7bba3c57fb1e5c156d386ca11894f781v} 1960727e995b7bba3c57fb1e5c156d386ca11894f781v 1961727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export current-date) 1962727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 0 "new Date()"))) 1963727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1964727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_currentDate() { 1965727e995b7bba3c57fb1e5c156d386ca11894f781v return new Date(); 1966727e995b7bba3c57fb1e5c156d386ca11894f781v} 1967727e995b7bba3c57fb1e5c156d386ca11894f781v 1968727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_Hashtable() { 1969727e995b7bba3c57fb1e5c156d386ca11894f781v} 1970727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Hashtable.prototype.toString = function() { 1971727e995b7bba3c57fb1e5c156d386ca11894f781v return "#{%hashtable}"; 1972727e995b7bba3c57fb1e5c156d386ca11894f781v}; 1973727e995b7bba3c57fb1e5c156d386ca11894f781v// sc_toWriteString == sc_toDisplayString == toString 1974727e995b7bba3c57fb1e5c156d386ca11894f781v 1975727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_HashtableElement(key, val) { 1976727e995b7bba3c57fb1e5c156d386ca11894f781v this.key = key; 1977727e995b7bba3c57fb1e5c156d386ca11894f781v this.val = val; 1978727e995b7bba3c57fb1e5c156d386ca11894f781v} 1979727e995b7bba3c57fb1e5c156d386ca11894f781v 1980727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 1981727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 0 "new sc_Hashtable()"))) 1982727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 1983727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_makeHashtable() { 1984727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Hashtable(); 1985727e995b7bba3c57fb1e5c156d386ca11894f781v} 1986727e995b7bba3c57fb1e5c156d386ca11894f781v 1987727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1988727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_hashtablePutBang(ht, key, val) { 1989727e995b7bba3c57fb1e5c156d386ca11894f781v var hash = sc_hash(key); 1990727e995b7bba3c57fb1e5c156d386ca11894f781v ht[hash] = new sc_HashtableElement(key, val); 1991727e995b7bba3c57fb1e5c156d386ca11894f781v} 1992727e995b7bba3c57fb1e5c156d386ca11894f781v 1993727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 1994727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_hashtableGet(ht, key) { 1995727e995b7bba3c57fb1e5c156d386ca11894f781v var hash = sc_hash(key); 1996727e995b7bba3c57fb1e5c156d386ca11894f781v if (hash in ht) 1997727e995b7bba3c57fb1e5c156d386ca11894f781v return ht[hash].val; 1998727e995b7bba3c57fb1e5c156d386ca11894f781v else 1999727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 2000727e995b7bba3c57fb1e5c156d386ca11894f781v} 2001727e995b7bba3c57fb1e5c156d386ca11894f781v 2002727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2003727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_hashtableForEach(ht, f) { 2004727e995b7bba3c57fb1e5c156d386ca11894f781v for (var v in ht) { 2005727e995b7bba3c57fb1e5c156d386ca11894f781v if (ht[v] instanceof sc_HashtableElement) 2006727e995b7bba3c57fb1e5c156d386ca11894f781v f(ht[v].key, ht[v].val); 2007727e995b7bba3c57fb1e5c156d386ca11894f781v } 2008727e995b7bba3c57fb1e5c156d386ca11894f781v} 2009727e995b7bba3c57fb1e5c156d386ca11894f781v 2010727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export hashtable-contains?) 2011727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 "sc_hash(" 1 ") in " 0))) 2012727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 2013727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_hashtableContains(ht, key) { 2014727e995b7bba3c57fb1e5c156d386ca11894f781v var hash = sc_hash(key); 2015727e995b7bba3c57fb1e5c156d386ca11894f781v if (hash in ht) 2016727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 2017727e995b7bba3c57fb1e5c156d386ca11894f781v else 2018727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 2019727e995b7bba3c57fb1e5c156d386ca11894f781v} 2020727e995b7bba3c57fb1e5c156d386ca11894f781v 2021727e995b7bba3c57fb1e5c156d386ca11894f781vvar SC_HASH_COUNTER = 0; 2022727e995b7bba3c57fb1e5c156d386ca11894f781v 2023727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_hash(o) { 2024727e995b7bba3c57fb1e5c156d386ca11894f781v if (o === null) 2025727e995b7bba3c57fb1e5c156d386ca11894f781v return "null"; 2026727e995b7bba3c57fb1e5c156d386ca11894f781v else if (o === undefined) 2027727e995b7bba3c57fb1e5c156d386ca11894f781v return "undefined"; 2028727e995b7bba3c57fb1e5c156d386ca11894f781v else if (o === true) 2029727e995b7bba3c57fb1e5c156d386ca11894f781v return "true"; 2030727e995b7bba3c57fb1e5c156d386ca11894f781v else if (o === false) 2031727e995b7bba3c57fb1e5c156d386ca11894f781v return "false"; 2032727e995b7bba3c57fb1e5c156d386ca11894f781v else if (typeof o === "number") 2033727e995b7bba3c57fb1e5c156d386ca11894f781v return "num-" + o; 2034727e995b7bba3c57fb1e5c156d386ca11894f781v else if (typeof o === "string") 2035727e995b7bba3c57fb1e5c156d386ca11894f781v return "jsstr-" + o; 2036727e995b7bba3c57fb1e5c156d386ca11894f781v else if (o.sc_getHash) 2037727e995b7bba3c57fb1e5c156d386ca11894f781v return o.sc_getHash(); 2038727e995b7bba3c57fb1e5c156d386ca11894f781v else 2039727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_counterHash.call(o); 2040727e995b7bba3c57fb1e5c156d386ca11894f781v} 2041727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_counterHash() { 2042727e995b7bba3c57fb1e5c156d386ca11894f781v if (!this.sc_hash) { 2043727e995b7bba3c57fb1e5c156d386ca11894f781v this.sc_hash = "hash-" + SC_HASH_COUNTER; 2044727e995b7bba3c57fb1e5c156d386ca11894f781v SC_HASH_COUNTER++; 2045727e995b7bba3c57fb1e5c156d386ca11894f781v } 2046727e995b7bba3c57fb1e5c156d386ca11894f781v return this.sc_hash; 2047727e995b7bba3c57fb1e5c156d386ca11894f781v} 2048727e995b7bba3c57fb1e5c156d386ca11894f781v 2049727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_Trampoline(args, maxTailCalls) { 2050727e995b7bba3c57fb1e5c156d386ca11894f781v this['__trampoline return__'] = true; 2051727e995b7bba3c57fb1e5c156d386ca11894f781v this.args = args; 2052727e995b7bba3c57fb1e5c156d386ca11894f781v this.MAX_TAIL_CALLs = maxTailCalls; 2053727e995b7bba3c57fb1e5c156d386ca11894f781v} 2054727e995b7bba3c57fb1e5c156d386ca11894f781v// TODO: call/cc stuff 2055727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Trampoline.prototype.restart = function() { 2056727e995b7bba3c57fb1e5c156d386ca11894f781v var o = this; 2057727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 2058727e995b7bba3c57fb1e5c156d386ca11894f781v // set both globals. 2059727e995b7bba3c57fb1e5c156d386ca11894f781v SC_TAIL_OBJECT.calls = o.MAX_TAIL_CALLs-1; 2060727e995b7bba3c57fb1e5c156d386ca11894f781v var fun = o.args.callee; 2061727e995b7bba3c57fb1e5c156d386ca11894f781v var res = fun.apply(SC_TAIL_OBJECT, o.args); 2062727e995b7bba3c57fb1e5c156d386ca11894f781v if (res instanceof sc_Trampoline) 2063727e995b7bba3c57fb1e5c156d386ca11894f781v o = res; 2064727e995b7bba3c57fb1e5c156d386ca11894f781v else 2065727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 2066727e995b7bba3c57fb1e5c156d386ca11894f781v } 2067727e995b7bba3c57fb1e5c156d386ca11894f781v} 2068727e995b7bba3c57fb1e5c156d386ca11894f781v 2069727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export bind-exit-lambda)) */ 2070727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_bindExitLambda(proc) { 2071727e995b7bba3c57fb1e5c156d386ca11894f781v var escape_obj = new sc_BindExitException(); 2072727e995b7bba3c57fb1e5c156d386ca11894f781v var escape = function(res) { 2073727e995b7bba3c57fb1e5c156d386ca11894f781v escape_obj.res = res; 2074727e995b7bba3c57fb1e5c156d386ca11894f781v throw escape_obj; 2075727e995b7bba3c57fb1e5c156d386ca11894f781v }; 2076727e995b7bba3c57fb1e5c156d386ca11894f781v try { 2077727e995b7bba3c57fb1e5c156d386ca11894f781v return proc(escape); 2078727e995b7bba3c57fb1e5c156d386ca11894f781v } catch(e) { 2079727e995b7bba3c57fb1e5c156d386ca11894f781v if (e === escape_obj) { 2080727e995b7bba3c57fb1e5c156d386ca11894f781v return e.res; 2081727e995b7bba3c57fb1e5c156d386ca11894f781v } 2082727e995b7bba3c57fb1e5c156d386ca11894f781v throw e; 2083727e995b7bba3c57fb1e5c156d386ca11894f781v } 2084727e995b7bba3c57fb1e5c156d386ca11894f781v} 2085727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_BindExitException() { 2086727e995b7bba3c57fb1e5c156d386ca11894f781v this._internalException = true; 2087727e995b7bba3c57fb1e5c156d386ca11894f781v} 2088727e995b7bba3c57fb1e5c156d386ca11894f781v 2089727e995b7bba3c57fb1e5c156d386ca11894f781vvar SC_SCM2JS_GLOBALS = new Object(); 2090727e995b7bba3c57fb1e5c156d386ca11894f781v 2091727e995b7bba3c57fb1e5c156d386ca11894f781v// default tail-call depth. 2092727e995b7bba3c57fb1e5c156d386ca11894f781v// normally the program should set it again. but just in case... 2093727e995b7bba3c57fb1e5c156d386ca11894f781vvar SC_TAIL_OBJECT = new Object(); 2094727e995b7bba3c57fb1e5c156d386ca11894f781vSC_SCM2JS_GLOBALS.TAIL_OBJECT = SC_TAIL_OBJECT; 2095727e995b7bba3c57fb1e5c156d386ca11894f781v// ======================== I/O ======================= 2096727e995b7bba3c57fb1e5c156d386ca11894f781v 2097727e995b7bba3c57fb1e5c156d386ca11894f781v/*------------------------------------------------------------------*/ 2098727e995b7bba3c57fb1e5c156d386ca11894f781v 2099727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_EOF() { 2100727e995b7bba3c57fb1e5c156d386ca11894f781v} 2101727e995b7bba3c57fb1e5c156d386ca11894f781vvar SC_EOF_OBJECT = new sc_EOF(); 2102727e995b7bba3c57fb1e5c156d386ca11894f781v 2103727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_Port() { 2104727e995b7bba3c57fb1e5c156d386ca11894f781v} 2105727e995b7bba3c57fb1e5c156d386ca11894f781v 2106727e995b7bba3c57fb1e5c156d386ca11894f781v/* --------------- Input ports -------------------------------------*/ 2107727e995b7bba3c57fb1e5c156d386ca11894f781v 2108727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_InputPort() { 2109727e995b7bba3c57fb1e5c156d386ca11894f781v} 2110727e995b7bba3c57fb1e5c156d386ca11894f781vsc_InputPort.prototype = new sc_Port(); 2111727e995b7bba3c57fb1e5c156d386ca11894f781v 2112727e995b7bba3c57fb1e5c156d386ca11894f781vsc_InputPort.prototype.peekChar = function() { 2113727e995b7bba3c57fb1e5c156d386ca11894f781v if (!("peeked" in this)) 2114727e995b7bba3c57fb1e5c156d386ca11894f781v this.peeked = this.getNextChar(); 2115727e995b7bba3c57fb1e5c156d386ca11894f781v return this.peeked; 2116727e995b7bba3c57fb1e5c156d386ca11894f781v} 2117727e995b7bba3c57fb1e5c156d386ca11894f781vsc_InputPort.prototype.readChar = function() { 2118727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = this.peekChar(); 2119727e995b7bba3c57fb1e5c156d386ca11894f781v delete this.peeked; 2120727e995b7bba3c57fb1e5c156d386ca11894f781v return tmp; 2121727e995b7bba3c57fb1e5c156d386ca11894f781v} 2122727e995b7bba3c57fb1e5c156d386ca11894f781vsc_InputPort.prototype.isCharReady = function() { 2123727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 2124727e995b7bba3c57fb1e5c156d386ca11894f781v} 2125727e995b7bba3c57fb1e5c156d386ca11894f781vsc_InputPort.prototype.close = function() { 2126727e995b7bba3c57fb1e5c156d386ca11894f781v // do nothing 2127727e995b7bba3c57fb1e5c156d386ca11894f781v} 2128727e995b7bba3c57fb1e5c156d386ca11894f781v 2129727e995b7bba3c57fb1e5c156d386ca11894f781v/* .............. String port ..........................*/ 2130727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_ErrorInputPort() { 2131727e995b7bba3c57fb1e5c156d386ca11894f781v}; 2132727e995b7bba3c57fb1e5c156d386ca11894f781vsc_ErrorInputPort.prototype = new sc_InputPort(); 2133727e995b7bba3c57fb1e5c156d386ca11894f781vsc_ErrorInputPort.prototype.getNextChar = function() { 2134727e995b7bba3c57fb1e5c156d386ca11894f781v throw "can't read from error-port."; 2135727e995b7bba3c57fb1e5c156d386ca11894f781v}; 2136727e995b7bba3c57fb1e5c156d386ca11894f781vsc_ErrorInputPort.prototype.isCharReady = function() { 2137727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 2138727e995b7bba3c57fb1e5c156d386ca11894f781v}; 21391805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 2140727e995b7bba3c57fb1e5c156d386ca11894f781v 2141727e995b7bba3c57fb1e5c156d386ca11894f781v/* .............. String port ..........................*/ 2142727e995b7bba3c57fb1e5c156d386ca11894f781v 2143727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_StringInputPort(jsStr) { 2144727e995b7bba3c57fb1e5c156d386ca11894f781v // we are going to do some charAts on the str. 2145727e995b7bba3c57fb1e5c156d386ca11894f781v // instead of recreating all the time a String-object, we 2146727e995b7bba3c57fb1e5c156d386ca11894f781v // create one in the beginning. (not sure, if this is really an optim) 2147727e995b7bba3c57fb1e5c156d386ca11894f781v this.str = new String(jsStr); 2148727e995b7bba3c57fb1e5c156d386ca11894f781v this.pos = 0; 2149727e995b7bba3c57fb1e5c156d386ca11894f781v} 2150727e995b7bba3c57fb1e5c156d386ca11894f781vsc_StringInputPort.prototype = new sc_InputPort(); 2151727e995b7bba3c57fb1e5c156d386ca11894f781vsc_StringInputPort.prototype.getNextChar = function() { 2152727e995b7bba3c57fb1e5c156d386ca11894f781v if (this.pos >= this.str.length) 2153727e995b7bba3c57fb1e5c156d386ca11894f781v return SC_EOF_OBJECT; 2154727e995b7bba3c57fb1e5c156d386ca11894f781v return this.str.charAt(this.pos++); 2155727e995b7bba3c57fb1e5c156d386ca11894f781v}; 2156727e995b7bba3c57fb1e5c156d386ca11894f781v 2157727e995b7bba3c57fb1e5c156d386ca11894f781v/* ------------- Read and other lib-funs -------------------------------*/ 2158727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_Token(type, val, pos) { 2159727e995b7bba3c57fb1e5c156d386ca11894f781v this.type = type; 2160727e995b7bba3c57fb1e5c156d386ca11894f781v this.val = val; 2161727e995b7bba3c57fb1e5c156d386ca11894f781v this.pos = pos; 2162727e995b7bba3c57fb1e5c156d386ca11894f781v} 2163727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.EOF = 0/*EOF*/; 2164727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.OPEN_PAR = 1/*OPEN_PAR*/; 2165727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.CLOSE_PAR = 2/*CLOSE_PAR*/; 2166727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.OPEN_BRACE = 3/*OPEN_BRACE*/; 2167727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.CLOSE_BRACE = 4/*CLOSE_BRACE*/; 2168727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.OPEN_BRACKET = 5/*OPEN_BRACKET*/; 2169727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.CLOSE_BRACKET = 6/*CLOSE_BRACKET*/; 2170727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.WHITESPACE = 7/*WHITESPACE*/; 2171727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.QUOTE = 8/*QUOTE*/; 2172727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.ID = 9/*ID*/; 2173727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.DOT = 10/*DOT*/; 2174727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.STRING = 11/*STRING*/; 2175727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.NUMBER = 12/*NUMBER*/; 2176727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.ERROR = 13/*ERROR*/; 2177727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.VECTOR_BEGIN = 14/*VECTOR_BEGIN*/; 2178727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.TRUE = 15/*TRUE*/; 2179727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.FALSE = 16/*FALSE*/; 2180727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.UNSPECIFIED = 17/*UNSPECIFIED*/; 2181727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.REFERENCE = 18/*REFERENCE*/; 2182727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.STORE = 19/*STORE*/; 2183727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Token.CHAR = 20/*CHAR*/; 2184727e995b7bba3c57fb1e5c156d386ca11894f781v 2185727e995b7bba3c57fb1e5c156d386ca11894f781vvar SC_ID_CLASS = SC_LOWER_CLASS + SC_UPPER_CLASS + "!$%*+-./:<=>?@^_~"; 2186727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_Tokenizer(port) { 2187727e995b7bba3c57fb1e5c156d386ca11894f781v this.port = port; 2188727e995b7bba3c57fb1e5c156d386ca11894f781v} 2189727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Tokenizer.prototype.peekToken = function() { 2190727e995b7bba3c57fb1e5c156d386ca11894f781v if (this.peeked) 2191727e995b7bba3c57fb1e5c156d386ca11894f781v return this.peeked; 2192727e995b7bba3c57fb1e5c156d386ca11894f781v var newToken = this.nextToken(); 2193727e995b7bba3c57fb1e5c156d386ca11894f781v this.peeked = newToken; 2194727e995b7bba3c57fb1e5c156d386ca11894f781v return newToken; 2195727e995b7bba3c57fb1e5c156d386ca11894f781v}; 2196727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Tokenizer.prototype.readToken = function() { 2197727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = this.peekToken(); 2198727e995b7bba3c57fb1e5c156d386ca11894f781v delete this.peeked; 2199727e995b7bba3c57fb1e5c156d386ca11894f781v return tmp; 2200727e995b7bba3c57fb1e5c156d386ca11894f781v}; 2201727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Tokenizer.prototype.nextToken = function() { 2202727e995b7bba3c57fb1e5c156d386ca11894f781v var port = this.port; 22031805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 2204727e995b7bba3c57fb1e5c156d386ca11894f781v function isNumberChar(c) { 2205727e995b7bba3c57fb1e5c156d386ca11894f781v return (c >= "0" && c <= "9"); 2206727e995b7bba3c57fb1e5c156d386ca11894f781v }; 2207727e995b7bba3c57fb1e5c156d386ca11894f781v function isIdOrNumberChar(c) { 2208727e995b7bba3c57fb1e5c156d386ca11894f781v return SC_ID_CLASS.indexOf(c) != -1 || // ID-char 2209727e995b7bba3c57fb1e5c156d386ca11894f781v (c >= "0" && c <= "9"); 2210727e995b7bba3c57fb1e5c156d386ca11894f781v } 2211727e995b7bba3c57fb1e5c156d386ca11894f781v function isWhitespace(c) { 2212727e995b7bba3c57fb1e5c156d386ca11894f781v return c === " " || c === "\r" || c === "\n" || c === "\t" || c === "\f"; 2213727e995b7bba3c57fb1e5c156d386ca11894f781v }; 2214727e995b7bba3c57fb1e5c156d386ca11894f781v function isWhitespaceOrEOF(c) { 2215727e995b7bba3c57fb1e5c156d386ca11894f781v return isWhitespace(c) || c === SC_EOF_OBJECT; 2216727e995b7bba3c57fb1e5c156d386ca11894f781v }; 2217727e995b7bba3c57fb1e5c156d386ca11894f781v 2218727e995b7bba3c57fb1e5c156d386ca11894f781v function readString() { 2219727e995b7bba3c57fb1e5c156d386ca11894f781v res = ""; 2220727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 2221727e995b7bba3c57fb1e5c156d386ca11894f781v var c = port.readChar(); 2222727e995b7bba3c57fb1e5c156d386ca11894f781v switch (c) { 2223727e995b7bba3c57fb1e5c156d386ca11894f781v case '"': 2224727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(11/*STRING*/, res); 2225727e995b7bba3c57fb1e5c156d386ca11894f781v case "\\": 2226727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = port.readChar(); 2227727e995b7bba3c57fb1e5c156d386ca11894f781v switch (tmp) { 2228727e995b7bba3c57fb1e5c156d386ca11894f781v case '0': res += "\0"; break; 2229727e995b7bba3c57fb1e5c156d386ca11894f781v case 'a': res += "\a"; break; 2230727e995b7bba3c57fb1e5c156d386ca11894f781v case 'b': res += "\b"; break; 2231727e995b7bba3c57fb1e5c156d386ca11894f781v case 'f': res += "\f"; break; 2232727e995b7bba3c57fb1e5c156d386ca11894f781v case 'n': res += "\n"; break; 2233727e995b7bba3c57fb1e5c156d386ca11894f781v case 'r': res += "\r"; break; 2234727e995b7bba3c57fb1e5c156d386ca11894f781v case 't': res += "\t"; break; 2235727e995b7bba3c57fb1e5c156d386ca11894f781v case 'v': res += "\v"; break; 2236727e995b7bba3c57fb1e5c156d386ca11894f781v case '"': res += '"'; break; 2237727e995b7bba3c57fb1e5c156d386ca11894f781v case '\\': res += '\\'; break; 2238727e995b7bba3c57fb1e5c156d386ca11894f781v case 'x': 2239727e995b7bba3c57fb1e5c156d386ca11894f781v /* hexa-number */ 2240727e995b7bba3c57fb1e5c156d386ca11894f781v var nb = 0; 2241727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 2242727e995b7bba3c57fb1e5c156d386ca11894f781v var hexC = port.peekChar(); 2243727e995b7bba3c57fb1e5c156d386ca11894f781v if (hexC >= '0' && hexC <= '9') { 2244727e995b7bba3c57fb1e5c156d386ca11894f781v port.readChar(); 2245727e995b7bba3c57fb1e5c156d386ca11894f781v nb = nb * 16 + hexC.charCodeAt(0) - '0'.charCodeAt(0); 2246727e995b7bba3c57fb1e5c156d386ca11894f781v } else if (hexC >= 'a' && hexC <= 'f') { 2247727e995b7bba3c57fb1e5c156d386ca11894f781v port.readChar(); 2248727e995b7bba3c57fb1e5c156d386ca11894f781v nb = nb * 16 + hexC.charCodeAt(0) - 'a'.charCodeAt(0); 2249727e995b7bba3c57fb1e5c156d386ca11894f781v } else if (hexC >= 'A' && hexC <= 'F') { 2250727e995b7bba3c57fb1e5c156d386ca11894f781v port.readChar(); 2251727e995b7bba3c57fb1e5c156d386ca11894f781v nb = nb * 16 + hexC.charCodeAt(0) - 'A'.charCodeAt(0); 2252727e995b7bba3c57fb1e5c156d386ca11894f781v } else { 2253727e995b7bba3c57fb1e5c156d386ca11894f781v // next char isn't part of hex. 2254727e995b7bba3c57fb1e5c156d386ca11894f781v res += String.fromCharCode(nb); 2255727e995b7bba3c57fb1e5c156d386ca11894f781v break; 2256727e995b7bba3c57fb1e5c156d386ca11894f781v } 2257727e995b7bba3c57fb1e5c156d386ca11894f781v } 2258727e995b7bba3c57fb1e5c156d386ca11894f781v break; 2259727e995b7bba3c57fb1e5c156d386ca11894f781v default: 2260727e995b7bba3c57fb1e5c156d386ca11894f781v if (tmp === SC_EOF_OBJECT) { 2261727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res); 2262727e995b7bba3c57fb1e5c156d386ca11894f781v } 2263727e995b7bba3c57fb1e5c156d386ca11894f781v res += tmp; 2264727e995b7bba3c57fb1e5c156d386ca11894f781v } 2265727e995b7bba3c57fb1e5c156d386ca11894f781v break; 2266727e995b7bba3c57fb1e5c156d386ca11894f781v default: 2267727e995b7bba3c57fb1e5c156d386ca11894f781v if (c === SC_EOF_OBJECT) { 2268727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res); 2269727e995b7bba3c57fb1e5c156d386ca11894f781v } 2270727e995b7bba3c57fb1e5c156d386ca11894f781v res += c; 2271727e995b7bba3c57fb1e5c156d386ca11894f781v } 2272727e995b7bba3c57fb1e5c156d386ca11894f781v } 2273727e995b7bba3c57fb1e5c156d386ca11894f781v }; 2274727e995b7bba3c57fb1e5c156d386ca11894f781v function readIdOrNumber(firstChar) { 2275727e995b7bba3c57fb1e5c156d386ca11894f781v var res = firstChar; 2276727e995b7bba3c57fb1e5c156d386ca11894f781v while (isIdOrNumberChar(port.peekChar())) 2277727e995b7bba3c57fb1e5c156d386ca11894f781v res += port.readChar(); 2278727e995b7bba3c57fb1e5c156d386ca11894f781v if (isNaN(res)) 2279727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(9/*ID*/, res); 2280727e995b7bba3c57fb1e5c156d386ca11894f781v else 2281727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(12/*NUMBER*/, res - 0); 2282727e995b7bba3c57fb1e5c156d386ca11894f781v }; 22831805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 2284727e995b7bba3c57fb1e5c156d386ca11894f781v function skipWhitespaceAndComments() { 2285727e995b7bba3c57fb1e5c156d386ca11894f781v var done = false; 2286727e995b7bba3c57fb1e5c156d386ca11894f781v while (!done) { 2287727e995b7bba3c57fb1e5c156d386ca11894f781v done = true; 2288727e995b7bba3c57fb1e5c156d386ca11894f781v while (isWhitespace(port.peekChar())) 2289727e995b7bba3c57fb1e5c156d386ca11894f781v port.readChar(); 2290727e995b7bba3c57fb1e5c156d386ca11894f781v if (port.peekChar() === ';') { 2291727e995b7bba3c57fb1e5c156d386ca11894f781v port.readChar(); 2292727e995b7bba3c57fb1e5c156d386ca11894f781v done = false; 2293727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 2294727e995b7bba3c57fb1e5c156d386ca11894f781v curChar = port.readChar(); 2295727e995b7bba3c57fb1e5c156d386ca11894f781v if (curChar === SC_EOF_OBJECT || 2296727e995b7bba3c57fb1e5c156d386ca11894f781v curChar === '\n') 2297727e995b7bba3c57fb1e5c156d386ca11894f781v break; 2298727e995b7bba3c57fb1e5c156d386ca11894f781v } 2299727e995b7bba3c57fb1e5c156d386ca11894f781v } 2300727e995b7bba3c57fb1e5c156d386ca11894f781v } 2301727e995b7bba3c57fb1e5c156d386ca11894f781v }; 23021805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 2303727e995b7bba3c57fb1e5c156d386ca11894f781v function readDot() { 2304727e995b7bba3c57fb1e5c156d386ca11894f781v if (isWhitespace(port.peekChar())) 2305727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(10/*DOT*/); 2306727e995b7bba3c57fb1e5c156d386ca11894f781v else 2307727e995b7bba3c57fb1e5c156d386ca11894f781v return readIdOrNumber("."); 2308727e995b7bba3c57fb1e5c156d386ca11894f781v }; 2309727e995b7bba3c57fb1e5c156d386ca11894f781v 2310727e995b7bba3c57fb1e5c156d386ca11894f781v function readSharp() { 2311727e995b7bba3c57fb1e5c156d386ca11894f781v var c = port.readChar(); 2312727e995b7bba3c57fb1e5c156d386ca11894f781v if (isWhitespace(c)) 2313727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(13/*ERROR*/, "bad #-pattern0."); 2314727e995b7bba3c57fb1e5c156d386ca11894f781v 2315727e995b7bba3c57fb1e5c156d386ca11894f781v // reference 2316727e995b7bba3c57fb1e5c156d386ca11894f781v if (isNumberChar(c)) { 2317727e995b7bba3c57fb1e5c156d386ca11894f781v var nb = c - 0; 2318727e995b7bba3c57fb1e5c156d386ca11894f781v while (isNumberChar(port.peekChar())) 2319727e995b7bba3c57fb1e5c156d386ca11894f781v nb = nb*10 + (port.readChar() - 0); 2320727e995b7bba3c57fb1e5c156d386ca11894f781v switch (port.readChar()) { 2321727e995b7bba3c57fb1e5c156d386ca11894f781v case '#': 2322727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(18/*REFERENCE*/, nb); 2323727e995b7bba3c57fb1e5c156d386ca11894f781v case '=': 2324727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(19/*STORE*/, nb); 2325727e995b7bba3c57fb1e5c156d386ca11894f781v default: 2326727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(13/*ERROR*/, "bad #-pattern1." + nb); 2327727e995b7bba3c57fb1e5c156d386ca11894f781v } 2328727e995b7bba3c57fb1e5c156d386ca11894f781v } 2329727e995b7bba3c57fb1e5c156d386ca11894f781v 2330727e995b7bba3c57fb1e5c156d386ca11894f781v if (c === "(") 2331727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(14/*VECTOR_BEGIN*/); 2332727e995b7bba3c57fb1e5c156d386ca11894f781v 2333727e995b7bba3c57fb1e5c156d386ca11894f781v if (c === "\\") { // character 2334727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = "" 2335727e995b7bba3c57fb1e5c156d386ca11894f781v while (!isWhitespaceOrEOF(port.peekChar())) 2336727e995b7bba3c57fb1e5c156d386ca11894f781v tmp += port.readChar(); 2337727e995b7bba3c57fb1e5c156d386ca11894f781v switch (tmp.length) { 2338727e995b7bba3c57fb1e5c156d386ca11894f781v case 0: // it's escaping a whitespace char: 2339727e995b7bba3c57fb1e5c156d386ca11894f781v if (sc_isEOFObject(port.peekChar)) 2340727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(13/*ERROR*/, "bad #-pattern2."); 2341727e995b7bba3c57fb1e5c156d386ca11894f781v else 2342727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(20/*CHAR*/, port.readChar()); 2343727e995b7bba3c57fb1e5c156d386ca11894f781v case 1: 2344727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(20/*CHAR*/, tmp); 2345727e995b7bba3c57fb1e5c156d386ca11894f781v default: 2346727e995b7bba3c57fb1e5c156d386ca11894f781v var entry = sc_Char.readable2char[tmp.toLowerCase()]; 2347727e995b7bba3c57fb1e5c156d386ca11894f781v if (entry) 2348727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(20/*CHAR*/, entry); 2349727e995b7bba3c57fb1e5c156d386ca11894f781v else 2350727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(13/*ERROR*/, "unknown character description: #\\" + tmp); 2351727e995b7bba3c57fb1e5c156d386ca11894f781v } 2352727e995b7bba3c57fb1e5c156d386ca11894f781v } 2353727e995b7bba3c57fb1e5c156d386ca11894f781v 2354727e995b7bba3c57fb1e5c156d386ca11894f781v // some constants (#t, #f, #unspecified) 2355727e995b7bba3c57fb1e5c156d386ca11894f781v var res; 2356727e995b7bba3c57fb1e5c156d386ca11894f781v var needing; 2357727e995b7bba3c57fb1e5c156d386ca11894f781v switch (c) { 2358727e995b7bba3c57fb1e5c156d386ca11894f781v case 't': res = new sc_Token(15/*TRUE*/, true); needing = ""; break; 2359727e995b7bba3c57fb1e5c156d386ca11894f781v case 'f': res = new sc_Token(16/*FALSE*/, false); needing = ""; break; 2360727e995b7bba3c57fb1e5c156d386ca11894f781v case 'u': res = new sc_Token(17/*UNSPECIFIED*/, undefined); needing = "nspecified"; break; 2361727e995b7bba3c57fb1e5c156d386ca11894f781v default: 2362727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(13/*ERROR*/, "bad #-pattern3: " + c); 2363727e995b7bba3c57fb1e5c156d386ca11894f781v } 2364727e995b7bba3c57fb1e5c156d386ca11894f781v while(true) { 2365727e995b7bba3c57fb1e5c156d386ca11894f781v c = port.peekChar(); 2366727e995b7bba3c57fb1e5c156d386ca11894f781v if ((isWhitespaceOrEOF(c) || c === ')') && 2367727e995b7bba3c57fb1e5c156d386ca11894f781v needing == "") 2368727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 2369727e995b7bba3c57fb1e5c156d386ca11894f781v else if (isWhitespace(c) || needing == "") 2370727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(13/*ERROR*/, "bad #-pattern4 " + c + " " + needing); 2371727e995b7bba3c57fb1e5c156d386ca11894f781v else if (needing.charAt(0) == c) { 2372727e995b7bba3c57fb1e5c156d386ca11894f781v port.readChar(); // consume 2373727e995b7bba3c57fb1e5c156d386ca11894f781v needing = needing.slice(1); 2374727e995b7bba3c57fb1e5c156d386ca11894f781v } else 2375727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(13/*ERROR*/, "bad #-pattern5"); 2376727e995b7bba3c57fb1e5c156d386ca11894f781v } 2377727e995b7bba3c57fb1e5c156d386ca11894f781v 2378727e995b7bba3c57fb1e5c156d386ca11894f781v }; 2379727e995b7bba3c57fb1e5c156d386ca11894f781v 2380727e995b7bba3c57fb1e5c156d386ca11894f781v skipWhitespaceAndComments(); 2381727e995b7bba3c57fb1e5c156d386ca11894f781v var curChar = port.readChar(); 2382727e995b7bba3c57fb1e5c156d386ca11894f781v if (curChar === SC_EOF_OBJECT) 2383727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(0/*EOF*/, curChar); 2384727e995b7bba3c57fb1e5c156d386ca11894f781v switch (curChar) 2385727e995b7bba3c57fb1e5c156d386ca11894f781v { 2386727e995b7bba3c57fb1e5c156d386ca11894f781v case " ": 2387727e995b7bba3c57fb1e5c156d386ca11894f781v case "\n": 2388727e995b7bba3c57fb1e5c156d386ca11894f781v case "\t": 2389727e995b7bba3c57fb1e5c156d386ca11894f781v return readWhitespace(); 2390727e995b7bba3c57fb1e5c156d386ca11894f781v case "(": 2391727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(1/*OPEN_PAR*/); 2392727e995b7bba3c57fb1e5c156d386ca11894f781v case ")": 2393727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(2/*CLOSE_PAR*/); 2394727e995b7bba3c57fb1e5c156d386ca11894f781v case "{": 2395727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(3/*OPEN_BRACE*/); 2396727e995b7bba3c57fb1e5c156d386ca11894f781v case "}": 2397727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(4/*CLOSE_BRACE*/); 2398727e995b7bba3c57fb1e5c156d386ca11894f781v case "[": 2399727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(5/*OPEN_BRACKET*/); 2400727e995b7bba3c57fb1e5c156d386ca11894f781v case "]": 2401727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(6/*CLOSE_BRACKET*/); 2402727e995b7bba3c57fb1e5c156d386ca11894f781v case "'": 2403727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Token(8/*QUOTE*/); 2404727e995b7bba3c57fb1e5c156d386ca11894f781v case "#": 2405727e995b7bba3c57fb1e5c156d386ca11894f781v return readSharp(); 2406727e995b7bba3c57fb1e5c156d386ca11894f781v case ".": 2407727e995b7bba3c57fb1e5c156d386ca11894f781v return readDot(); 2408727e995b7bba3c57fb1e5c156d386ca11894f781v case '"': 2409727e995b7bba3c57fb1e5c156d386ca11894f781v return readString(); 2410727e995b7bba3c57fb1e5c156d386ca11894f781v default: 2411727e995b7bba3c57fb1e5c156d386ca11894f781v if (isIdOrNumberChar(curChar)) 2412727e995b7bba3c57fb1e5c156d386ca11894f781v return readIdOrNumber(curChar); 2413727e995b7bba3c57fb1e5c156d386ca11894f781v throw "unexpected character: " + curChar; 2414727e995b7bba3c57fb1e5c156d386ca11894f781v } 2415727e995b7bba3c57fb1e5c156d386ca11894f781v}; 2416727e995b7bba3c57fb1e5c156d386ca11894f781v 2417727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_Reader(tokenizer) { 2418727e995b7bba3c57fb1e5c156d386ca11894f781v this.tokenizer = tokenizer; 2419727e995b7bba3c57fb1e5c156d386ca11894f781v this.backref = new Array(); 2420727e995b7bba3c57fb1e5c156d386ca11894f781v} 2421727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Reader.prototype.read = function() { 2422727e995b7bba3c57fb1e5c156d386ca11894f781v function readList(listBeginType) { 2423727e995b7bba3c57fb1e5c156d386ca11894f781v function matchesPeer(open, close) { 2424727e995b7bba3c57fb1e5c156d386ca11894f781v return open === 1/*OPEN_PAR*/ && close === 2/*CLOSE_PAR*/ 2425727e995b7bba3c57fb1e5c156d386ca11894f781v || open === 3/*OPEN_BRACE*/ && close === 4/*CLOSE_BRACE*/ 2426727e995b7bba3c57fb1e5c156d386ca11894f781v || open === 5/*OPEN_BRACKET*/ && close === 6/*CLOSE_BRACKET*/; 2427727e995b7bba3c57fb1e5c156d386ca11894f781v }; 2428727e995b7bba3c57fb1e5c156d386ca11894f781v var res = null; 2429727e995b7bba3c57fb1e5c156d386ca11894f781v 2430727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 2431727e995b7bba3c57fb1e5c156d386ca11894f781v var token = tokenizer.peekToken(); 24321805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 2433727e995b7bba3c57fb1e5c156d386ca11894f781v switch (token.type) { 2434727e995b7bba3c57fb1e5c156d386ca11894f781v case 2/*CLOSE_PAR*/: 2435727e995b7bba3c57fb1e5c156d386ca11894f781v case 4/*CLOSE_BRACE*/: 2436727e995b7bba3c57fb1e5c156d386ca11894f781v case 6/*CLOSE_BRACKET*/: 2437727e995b7bba3c57fb1e5c156d386ca11894f781v if (matchesPeer(listBeginType, token.type)) { 2438727e995b7bba3c57fb1e5c156d386ca11894f781v tokenizer.readToken(); // consume token 2439727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_reverseBang(res); 2440727e995b7bba3c57fb1e5c156d386ca11894f781v } else 2441727e995b7bba3c57fb1e5c156d386ca11894f781v throw "closing par doesn't match: " + listBeginType 2442727e995b7bba3c57fb1e5c156d386ca11894f781v + " " + listEndType; 2443727e995b7bba3c57fb1e5c156d386ca11894f781v 2444727e995b7bba3c57fb1e5c156d386ca11894f781v case 0/*EOF*/: 2445727e995b7bba3c57fb1e5c156d386ca11894f781v throw "unexpected end of file"; 2446727e995b7bba3c57fb1e5c156d386ca11894f781v 2447727e995b7bba3c57fb1e5c156d386ca11894f781v case 10/*DOT*/: 2448727e995b7bba3c57fb1e5c156d386ca11894f781v tokenizer.readToken(); // consume token 2449727e995b7bba3c57fb1e5c156d386ca11894f781v var cdr = this.read(); 2450727e995b7bba3c57fb1e5c156d386ca11894f781v var par = tokenizer.readToken(); 2451727e995b7bba3c57fb1e5c156d386ca11894f781v if (!matchesPeer(listBeginType, par.type)) 2452727e995b7bba3c57fb1e5c156d386ca11894f781v throw "closing par doesn't match: " + listBeginType 2453727e995b7bba3c57fb1e5c156d386ca11894f781v + " " + par.type; 2454727e995b7bba3c57fb1e5c156d386ca11894f781v else 2455727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_reverseAppendBang(res, cdr); 2456727e995b7bba3c57fb1e5c156d386ca11894f781v 2457727e995b7bba3c57fb1e5c156d386ca11894f781v 2458727e995b7bba3c57fb1e5c156d386ca11894f781v default: 2459727e995b7bba3c57fb1e5c156d386ca11894f781v res = sc_cons(this.read(), res); 2460727e995b7bba3c57fb1e5c156d386ca11894f781v } 2461727e995b7bba3c57fb1e5c156d386ca11894f781v } 2462727e995b7bba3c57fb1e5c156d386ca11894f781v }; 2463727e995b7bba3c57fb1e5c156d386ca11894f781v function readQuote() { 2464727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_cons("quote", sc_cons(this.read(), null)); 2465727e995b7bba3c57fb1e5c156d386ca11894f781v }; 2466727e995b7bba3c57fb1e5c156d386ca11894f781v function readVector() { 2467727e995b7bba3c57fb1e5c156d386ca11894f781v // opening-parenthesis is already consumed 2468727e995b7bba3c57fb1e5c156d386ca11894f781v var a = new Array(); 2469727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 2470727e995b7bba3c57fb1e5c156d386ca11894f781v var token = tokenizer.peekToken(); 2471727e995b7bba3c57fb1e5c156d386ca11894f781v switch (token.type) { 2472727e995b7bba3c57fb1e5c156d386ca11894f781v case 2/*CLOSE_PAR*/: 2473727e995b7bba3c57fb1e5c156d386ca11894f781v tokenizer.readToken(); 2474727e995b7bba3c57fb1e5c156d386ca11894f781v return a; 2475727e995b7bba3c57fb1e5c156d386ca11894f781v 2476727e995b7bba3c57fb1e5c156d386ca11894f781v default: 2477727e995b7bba3c57fb1e5c156d386ca11894f781v a.push(this.read()); 2478727e995b7bba3c57fb1e5c156d386ca11894f781v } 2479727e995b7bba3c57fb1e5c156d386ca11894f781v } 2480727e995b7bba3c57fb1e5c156d386ca11894f781v }; 2481727e995b7bba3c57fb1e5c156d386ca11894f781v 2482727e995b7bba3c57fb1e5c156d386ca11894f781v function storeRefence(nb) { 2483727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = this.read(); 2484727e995b7bba3c57fb1e5c156d386ca11894f781v this.backref[nb] = tmp; 2485727e995b7bba3c57fb1e5c156d386ca11894f781v return tmp; 2486727e995b7bba3c57fb1e5c156d386ca11894f781v }; 2487727e995b7bba3c57fb1e5c156d386ca11894f781v 2488727e995b7bba3c57fb1e5c156d386ca11894f781v function readReference(nb) { 2489727e995b7bba3c57fb1e5c156d386ca11894f781v if (nb in this.backref) 2490727e995b7bba3c57fb1e5c156d386ca11894f781v return this.backref[nb]; 2491727e995b7bba3c57fb1e5c156d386ca11894f781v else 2492727e995b7bba3c57fb1e5c156d386ca11894f781v throw "bad reference: " + nb; 2493727e995b7bba3c57fb1e5c156d386ca11894f781v }; 24941805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 2495727e995b7bba3c57fb1e5c156d386ca11894f781v var tokenizer = this.tokenizer; 2496727e995b7bba3c57fb1e5c156d386ca11894f781v 2497727e995b7bba3c57fb1e5c156d386ca11894f781v var token = tokenizer.readToken(); 2498727e995b7bba3c57fb1e5c156d386ca11894f781v 2499727e995b7bba3c57fb1e5c156d386ca11894f781v // handle error 2500727e995b7bba3c57fb1e5c156d386ca11894f781v if (token.type === 13/*ERROR*/) 2501727e995b7bba3c57fb1e5c156d386ca11894f781v throw token.val; 25021805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 2503727e995b7bba3c57fb1e5c156d386ca11894f781v switch (token.type) { 2504727e995b7bba3c57fb1e5c156d386ca11894f781v case 1/*OPEN_PAR*/: 2505727e995b7bba3c57fb1e5c156d386ca11894f781v case 3/*OPEN_BRACE*/: 2506727e995b7bba3c57fb1e5c156d386ca11894f781v case 5/*OPEN_BRACKET*/: 2507727e995b7bba3c57fb1e5c156d386ca11894f781v return readList.call(this, token.type); 2508727e995b7bba3c57fb1e5c156d386ca11894f781v case 8/*QUOTE*/: 2509727e995b7bba3c57fb1e5c156d386ca11894f781v return readQuote.call(this); 2510727e995b7bba3c57fb1e5c156d386ca11894f781v case 11/*STRING*/: 2511727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_jsstring2string(token.val); 2512727e995b7bba3c57fb1e5c156d386ca11894f781v case 20/*CHAR*/: 2513727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Char(token.val); 2514727e995b7bba3c57fb1e5c156d386ca11894f781v case 14/*VECTOR_BEGIN*/: 2515727e995b7bba3c57fb1e5c156d386ca11894f781v return readVector.call(this); 2516727e995b7bba3c57fb1e5c156d386ca11894f781v case 18/*REFERENCE*/: 2517727e995b7bba3c57fb1e5c156d386ca11894f781v return readReference.call(this, token.val); 2518727e995b7bba3c57fb1e5c156d386ca11894f781v case 19/*STORE*/: 2519727e995b7bba3c57fb1e5c156d386ca11894f781v return storeRefence.call(this, token.val); 2520727e995b7bba3c57fb1e5c156d386ca11894f781v case 9/*ID*/: 2521727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_jsstring2symbol(token.val); 2522727e995b7bba3c57fb1e5c156d386ca11894f781v case 0/*EOF*/: 2523727e995b7bba3c57fb1e5c156d386ca11894f781v case 12/*NUMBER*/: 2524727e995b7bba3c57fb1e5c156d386ca11894f781v case 15/*TRUE*/: 2525727e995b7bba3c57fb1e5c156d386ca11894f781v case 16/*FALSE*/: 2526727e995b7bba3c57fb1e5c156d386ca11894f781v case 17/*UNSPECIFIED*/: 2527727e995b7bba3c57fb1e5c156d386ca11894f781v return token.val; 2528727e995b7bba3c57fb1e5c156d386ca11894f781v default: 2529727e995b7bba3c57fb1e5c156d386ca11894f781v throw "unexpected token " + token.type + " " + token.val; 2530727e995b7bba3c57fb1e5c156d386ca11894f781v } 2531727e995b7bba3c57fb1e5c156d386ca11894f781v}; 2532727e995b7bba3c57fb1e5c156d386ca11894f781v 2533727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2534727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_read(port) { 2535727e995b7bba3c57fb1e5c156d386ca11894f781v if (port === undefined) // we assume the port hasn't been given. 2536727e995b7bba3c57fb1e5c156d386ca11894f781v port = SC_DEFAULT_IN; // THREAD: shared var... 2537727e995b7bba3c57fb1e5c156d386ca11894f781v var reader = new sc_Reader(new sc_Tokenizer(port)); 2538727e995b7bba3c57fb1e5c156d386ca11894f781v return reader.read(); 2539727e995b7bba3c57fb1e5c156d386ca11894f781v} 2540727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2541727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_readChar(port) { 2542727e995b7bba3c57fb1e5c156d386ca11894f781v if (port === undefined) // we assume the port hasn't been given. 2543727e995b7bba3c57fb1e5c156d386ca11894f781v port = SC_DEFAULT_IN; // THREAD: shared var... 2544727e995b7bba3c57fb1e5c156d386ca11894f781v var t = port.readChar(); 2545727e995b7bba3c57fb1e5c156d386ca11894f781v return t === SC_EOF_OBJECT? t: new sc_Char(t); 2546727e995b7bba3c57fb1e5c156d386ca11894f781v} 2547727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2548727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_peekChar(port) { 2549727e995b7bba3c57fb1e5c156d386ca11894f781v if (port === undefined) // we assume the port hasn't been given. 2550727e995b7bba3c57fb1e5c156d386ca11894f781v port = SC_DEFAULT_IN; // THREAD: shared var... 2551727e995b7bba3c57fb1e5c156d386ca11894f781v var t = port.peekChar(); 2552727e995b7bba3c57fb1e5c156d386ca11894f781v return t === SC_EOF_OBJECT? t: new sc_Char(t); 25531805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org} 2554727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 2555727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 2556727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 2557727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isCharReady(port) { 2558727e995b7bba3c57fb1e5c156d386ca11894f781v if (port === undefined) // we assume the port hasn't been given. 2559727e995b7bba3c57fb1e5c156d386ca11894f781v port = SC_DEFAULT_IN; // THREAD: shared var... 2560727e995b7bba3c57fb1e5c156d386ca11894f781v return port.isCharReady(); 2561727e995b7bba3c57fb1e5c156d386ca11894f781v} 2562727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 2563727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".close()"))) 2564727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 2565727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_closeInputPort(p) { 2566727e995b7bba3c57fb1e5c156d386ca11894f781v return p.close(); 2567727e995b7bba3c57fb1e5c156d386ca11894f781v} 2568727e995b7bba3c57fb1e5c156d386ca11894f781v 2569727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 2570727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 2571727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix " instanceof sc_InputPort"))) 2572727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 2573727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isInputPort(o) { 2574727e995b7bba3c57fb1e5c156d386ca11894f781v return (o instanceof sc_InputPort); 2575727e995b7bba3c57fb1e5c156d386ca11894f781v} 2576727e995b7bba3c57fb1e5c156d386ca11894f781v 2577727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export eof-object?) 2578727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 2579727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix " === SC_EOF_OBJECT"))) 2580727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 2581727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isEOFObject(o) { 2582727e995b7bba3c57fb1e5c156d386ca11894f781v return o === SC_EOF_OBJECT; 2583727e995b7bba3c57fb1e5c156d386ca11894f781v} 2584727e995b7bba3c57fb1e5c156d386ca11894f781v 2585727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 2586727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 0 "SC_DEFAULT_IN"))) 2587727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 2588727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_currentInputPort() { 2589727e995b7bba3c57fb1e5c156d386ca11894f781v return SC_DEFAULT_IN; 2590727e995b7bba3c57fb1e5c156d386ca11894f781v} 2591727e995b7bba3c57fb1e5c156d386ca11894f781v 2592727e995b7bba3c57fb1e5c156d386ca11894f781v/* ------------ file operations are not supported -----------*/ 2593727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2594727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_callWithInputFile(s, proc) { 2595727e995b7bba3c57fb1e5c156d386ca11894f781v throw "can't open " + s; 2596727e995b7bba3c57fb1e5c156d386ca11894f781v} 2597727e995b7bba3c57fb1e5c156d386ca11894f781v 2598727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2599727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_callWithOutputFile(s, proc) { 2600727e995b7bba3c57fb1e5c156d386ca11894f781v throw "can't open " + s; 2601727e995b7bba3c57fb1e5c156d386ca11894f781v} 2602727e995b7bba3c57fb1e5c156d386ca11894f781v 2603727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2604727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_withInputFromFile(s, thunk) { 2605727e995b7bba3c57fb1e5c156d386ca11894f781v throw "can't open " + s; 2606727e995b7bba3c57fb1e5c156d386ca11894f781v} 2607727e995b7bba3c57fb1e5c156d386ca11894f781v 2608727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2609727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_withOutputToFile(s, thunk) { 2610727e995b7bba3c57fb1e5c156d386ca11894f781v throw "can't open " + s; 2611727e995b7bba3c57fb1e5c156d386ca11894f781v} 2612727e995b7bba3c57fb1e5c156d386ca11894f781v 2613727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2614727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_openInputFile(s) { 2615727e995b7bba3c57fb1e5c156d386ca11894f781v throw "can't open " + s; 2616727e995b7bba3c57fb1e5c156d386ca11894f781v} 2617727e995b7bba3c57fb1e5c156d386ca11894f781v 2618727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2619727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_openOutputFile(s) { 2620727e995b7bba3c57fb1e5c156d386ca11894f781v throw "can't open " + s; 2621727e995b7bba3c57fb1e5c156d386ca11894f781v} 2622727e995b7bba3c57fb1e5c156d386ca11894f781v 2623727e995b7bba3c57fb1e5c156d386ca11894f781v/* ----------------------------------------------------------------------------*/ 2624727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2625727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_basename(p) { 2626727e995b7bba3c57fb1e5c156d386ca11894f781v var i = p.lastIndexOf('/'); 2627727e995b7bba3c57fb1e5c156d386ca11894f781v 2628727e995b7bba3c57fb1e5c156d386ca11894f781v if(i >= 0) 2629727e995b7bba3c57fb1e5c156d386ca11894f781v return p.substring(i + 1, p.length); 2630727e995b7bba3c57fb1e5c156d386ca11894f781v else 2631727e995b7bba3c57fb1e5c156d386ca11894f781v return ''; 2632727e995b7bba3c57fb1e5c156d386ca11894f781v} 2633727e995b7bba3c57fb1e5c156d386ca11894f781v 2634727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2635727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_dirname(p) { 2636727e995b7bba3c57fb1e5c156d386ca11894f781v var i = p.lastIndexOf('/'); 2637727e995b7bba3c57fb1e5c156d386ca11894f781v 2638727e995b7bba3c57fb1e5c156d386ca11894f781v if(i >= 0) 2639727e995b7bba3c57fb1e5c156d386ca11894f781v return p.substring(0, i); 2640727e995b7bba3c57fb1e5c156d386ca11894f781v else 2641727e995b7bba3c57fb1e5c156d386ca11894f781v return ''; 2642727e995b7bba3c57fb1e5c156d386ca11894f781v} 2643727e995b7bba3c57fb1e5c156d386ca11894f781v 2644727e995b7bba3c57fb1e5c156d386ca11894f781v/* ----------------------------------------------------------------------------*/ 2645727e995b7bba3c57fb1e5c156d386ca11894f781v 2646727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2647727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_withInputFromPort(p, thunk) { 2648727e995b7bba3c57fb1e5c156d386ca11894f781v try { 2649727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = SC_DEFAULT_IN; // THREAD: shared var. 2650727e995b7bba3c57fb1e5c156d386ca11894f781v SC_DEFAULT_IN = p; 2651727e995b7bba3c57fb1e5c156d386ca11894f781v return thunk(); 2652727e995b7bba3c57fb1e5c156d386ca11894f781v } finally { 2653727e995b7bba3c57fb1e5c156d386ca11894f781v SC_DEFAULT_IN = tmp; 2654727e995b7bba3c57fb1e5c156d386ca11894f781v } 2655727e995b7bba3c57fb1e5c156d386ca11894f781v} 2656727e995b7bba3c57fb1e5c156d386ca11894f781v 2657727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2658727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_withInputFromString(s, thunk) { 2659727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_withInputFromPort(new sc_StringInputPort(sc_string2jsstring(s)), thunk); 2660727e995b7bba3c57fb1e5c156d386ca11894f781v} 2661727e995b7bba3c57fb1e5c156d386ca11894f781v 2662727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2663727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_withOutputToPort(p, thunk) { 2664727e995b7bba3c57fb1e5c156d386ca11894f781v try { 2665727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp = SC_DEFAULT_OUT; // THREAD: shared var. 2666727e995b7bba3c57fb1e5c156d386ca11894f781v SC_DEFAULT_OUT = p; 2667727e995b7bba3c57fb1e5c156d386ca11894f781v return thunk(); 2668727e995b7bba3c57fb1e5c156d386ca11894f781v } finally { 2669727e995b7bba3c57fb1e5c156d386ca11894f781v SC_DEFAULT_OUT = tmp; 2670727e995b7bba3c57fb1e5c156d386ca11894f781v } 2671727e995b7bba3c57fb1e5c156d386ca11894f781v} 2672727e995b7bba3c57fb1e5c156d386ca11894f781v 2673727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2674727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_withOutputToString(thunk) { 2675727e995b7bba3c57fb1e5c156d386ca11894f781v var p = new sc_StringOutputPort(); 2676727e995b7bba3c57fb1e5c156d386ca11894f781v sc_withOutputToPort(p, thunk); 2677727e995b7bba3c57fb1e5c156d386ca11894f781v return p.close(); 2678727e995b7bba3c57fb1e5c156d386ca11894f781v} 2679727e995b7bba3c57fb1e5c156d386ca11894f781v 2680727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2681727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_withOutputToProcedure(proc, thunk) { 2682727e995b7bba3c57fb1e5c156d386ca11894f781v var t = function(s) { proc(sc_jsstring2string(s)); }; 2683727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_withOutputToPort(new sc_GenericOutputPort(t), thunk); 2684727e995b7bba3c57fb1e5c156d386ca11894f781v} 2685727e995b7bba3c57fb1e5c156d386ca11894f781v 2686727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 2687727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 0 "new sc_StringOutputPort()"))) 2688727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 2689727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_openOutputString() { 2690727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_StringOutputPort(); 2691727e995b7bba3c57fb1e5c156d386ca11894f781v} 2692727e995b7bba3c57fb1e5c156d386ca11894f781v 2693727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2694727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_openInputString(str) { 2695727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_StringInputPort(sc_string2jsstring(str)); 2696727e995b7bba3c57fb1e5c156d386ca11894f781v} 2697727e995b7bba3c57fb1e5c156d386ca11894f781v 2698727e995b7bba3c57fb1e5c156d386ca11894f781v/* ----------------------------------------------------------------------------*/ 2699727e995b7bba3c57fb1e5c156d386ca11894f781v 2700727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_OutputPort() { 2701727e995b7bba3c57fb1e5c156d386ca11894f781v} 2702727e995b7bba3c57fb1e5c156d386ca11894f781vsc_OutputPort.prototype = new sc_Port(); 2703727e995b7bba3c57fb1e5c156d386ca11894f781vsc_OutputPort.prototype.appendJSString = function(obj) { 2704727e995b7bba3c57fb1e5c156d386ca11894f781v /* do nothing */ 2705727e995b7bba3c57fb1e5c156d386ca11894f781v} 2706727e995b7bba3c57fb1e5c156d386ca11894f781vsc_OutputPort.prototype.close = function() { 2707727e995b7bba3c57fb1e5c156d386ca11894f781v /* do nothing */ 2708727e995b7bba3c57fb1e5c156d386ca11894f781v} 2709727e995b7bba3c57fb1e5c156d386ca11894f781v 2710727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_StringOutputPort() { 2711727e995b7bba3c57fb1e5c156d386ca11894f781v this.res = ""; 2712727e995b7bba3c57fb1e5c156d386ca11894f781v} 2713727e995b7bba3c57fb1e5c156d386ca11894f781vsc_StringOutputPort.prototype = new sc_OutputPort(); 2714727e995b7bba3c57fb1e5c156d386ca11894f781vsc_StringOutputPort.prototype.appendJSString = function(s) { 2715727e995b7bba3c57fb1e5c156d386ca11894f781v this.res += s; 2716727e995b7bba3c57fb1e5c156d386ca11894f781v} 2717727e995b7bba3c57fb1e5c156d386ca11894f781vsc_StringOutputPort.prototype.close = function() { 2718727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_jsstring2string(this.res); 2719727e995b7bba3c57fb1e5c156d386ca11894f781v} 2720727e995b7bba3c57fb1e5c156d386ca11894f781v 2721727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2722727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_getOutputString(sp) { 2723727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_jsstring2string(sp.res); 2724727e995b7bba3c57fb1e5c156d386ca11894f781v} 27251805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 2726727e995b7bba3c57fb1e5c156d386ca11894f781v 2727727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_ErrorOutputPort() { 2728727e995b7bba3c57fb1e5c156d386ca11894f781v} 2729727e995b7bba3c57fb1e5c156d386ca11894f781vsc_ErrorOutputPort.prototype = new sc_OutputPort(); 2730727e995b7bba3c57fb1e5c156d386ca11894f781vsc_ErrorOutputPort.prototype.appendJSString = function(s) { 2731727e995b7bba3c57fb1e5c156d386ca11894f781v throw "don't write on ErrorPort!"; 2732727e995b7bba3c57fb1e5c156d386ca11894f781v} 2733727e995b7bba3c57fb1e5c156d386ca11894f781vsc_ErrorOutputPort.prototype.close = function() { 2734727e995b7bba3c57fb1e5c156d386ca11894f781v /* do nothing */ 2735727e995b7bba3c57fb1e5c156d386ca11894f781v} 2736727e995b7bba3c57fb1e5c156d386ca11894f781v 2737727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_GenericOutputPort(appendJSString, close) { 2738727e995b7bba3c57fb1e5c156d386ca11894f781v this.appendJSString = appendJSString; 2739727e995b7bba3c57fb1e5c156d386ca11894f781v if (close) 2740727e995b7bba3c57fb1e5c156d386ca11894f781v this.close = close; 2741727e995b7bba3c57fb1e5c156d386ca11894f781v} 2742727e995b7bba3c57fb1e5c156d386ca11894f781vsc_GenericOutputPort.prototype = new sc_OutputPort(); 2743727e995b7bba3c57fb1e5c156d386ca11894f781v 2744727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 2745727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 2746727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix " instanceof sc_OutputPort"))) 2747727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 2748727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isOutputPort(o) { 2749727e995b7bba3c57fb1e5c156d386ca11894f781v return (o instanceof sc_OutputPort); 2750727e995b7bba3c57fb1e5c156d386ca11894f781v} 2751727e995b7bba3c57fb1e5c156d386ca11894f781v 2752727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 2753727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".close()"))) 2754727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 2755727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_closeOutputPort(p) { 2756727e995b7bba3c57fb1e5c156d386ca11894f781v return p.close(); 2757727e995b7bba3c57fb1e5c156d386ca11894f781v} 2758727e995b7bba3c57fb1e5c156d386ca11894f781v 2759727e995b7bba3c57fb1e5c156d386ca11894f781v/* ------------------ write ---------------------------------------------------*/ 2760727e995b7bba3c57fb1e5c156d386ca11894f781v 2761727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2762727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_write(o, p) { 2763727e995b7bba3c57fb1e5c156d386ca11894f781v if (p === undefined) // we assume not given 2764727e995b7bba3c57fb1e5c156d386ca11894f781v p = SC_DEFAULT_OUT; 2765727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString(sc_toWriteString(o)); 2766727e995b7bba3c57fb1e5c156d386ca11894f781v} 2767727e995b7bba3c57fb1e5c156d386ca11894f781v 2768727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_toWriteString(o) { 2769727e995b7bba3c57fb1e5c156d386ca11894f781v if (o === null) 2770727e995b7bba3c57fb1e5c156d386ca11894f781v return "()"; 2771727e995b7bba3c57fb1e5c156d386ca11894f781v else if (o === true) 2772727e995b7bba3c57fb1e5c156d386ca11894f781v return "#t"; 2773727e995b7bba3c57fb1e5c156d386ca11894f781v else if (o === false) 2774727e995b7bba3c57fb1e5c156d386ca11894f781v return "#f"; 2775727e995b7bba3c57fb1e5c156d386ca11894f781v else if (o === undefined) 2776727e995b7bba3c57fb1e5c156d386ca11894f781v return "#unspecified"; 2777727e995b7bba3c57fb1e5c156d386ca11894f781v else if (typeof o === 'function') 2778727e995b7bba3c57fb1e5c156d386ca11894f781v return "#<procedure " + sc_hash(o) + ">"; 2779727e995b7bba3c57fb1e5c156d386ca11894f781v else if (o.sc_toWriteString) 2780727e995b7bba3c57fb1e5c156d386ca11894f781v return o.sc_toWriteString(); 2781727e995b7bba3c57fb1e5c156d386ca11894f781v else 2782727e995b7bba3c57fb1e5c156d386ca11894f781v return o.toString(); 2783727e995b7bba3c57fb1e5c156d386ca11894f781v} 2784727e995b7bba3c57fb1e5c156d386ca11894f781v 2785727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_escapeWriteString(s) { 2786727e995b7bba3c57fb1e5c156d386ca11894f781v var res = ""; 2787727e995b7bba3c57fb1e5c156d386ca11894f781v var j = 0; 2788727e995b7bba3c57fb1e5c156d386ca11894f781v for (i = 0; i < s.length; i++) { 2789727e995b7bba3c57fb1e5c156d386ca11894f781v switch (s.charAt(i)) { 2790727e995b7bba3c57fb1e5c156d386ca11894f781v case "\0": res += s.substring(j, i) + "\\0"; j = i + 1; break; 2791727e995b7bba3c57fb1e5c156d386ca11894f781v case "\b": res += s.substring(j, i) + "\\b"; j = i + 1; break; 2792727e995b7bba3c57fb1e5c156d386ca11894f781v case "\f": res += s.substring(j, i) + "\\f"; j = i + 1; break; 2793727e995b7bba3c57fb1e5c156d386ca11894f781v case "\n": res += s.substring(j, i) + "\\n"; j = i + 1; break; 2794727e995b7bba3c57fb1e5c156d386ca11894f781v case "\r": res += s.substring(j, i) + "\\r"; j = i + 1; break; 2795727e995b7bba3c57fb1e5c156d386ca11894f781v case "\t": res += s.substring(j, i) + "\\t"; j = i + 1; break; 2796727e995b7bba3c57fb1e5c156d386ca11894f781v case "\v": res += s.substring(j, i) + "\\v"; j = i + 1; break; 2797727e995b7bba3c57fb1e5c156d386ca11894f781v case '"': res += s.substring(j, i) + '\\"'; j = i + 1; break; 2798727e995b7bba3c57fb1e5c156d386ca11894f781v case "\\": res += s.substring(j, i) + "\\\\"; j = i + 1; break; 2799727e995b7bba3c57fb1e5c156d386ca11894f781v default: 2800727e995b7bba3c57fb1e5c156d386ca11894f781v var c = s.charAt(i); 2801727e995b7bba3c57fb1e5c156d386ca11894f781v if ("\a" !== "a" && c == "\a") { 2802727e995b7bba3c57fb1e5c156d386ca11894f781v res += s.substring(j, i) + "\\a"; j = i + 1; continue; 2803727e995b7bba3c57fb1e5c156d386ca11894f781v } 2804727e995b7bba3c57fb1e5c156d386ca11894f781v if ("\v" !== "v" && c == "\v") { 2805727e995b7bba3c57fb1e5c156d386ca11894f781v res += s.substring(j, i) + "\\v"; j = i + 1; continue; 2806727e995b7bba3c57fb1e5c156d386ca11894f781v } 2807727e995b7bba3c57fb1e5c156d386ca11894f781v //if (s.charAt(i) < ' ' || s.charCodeAt(i) > 127) { 2808727e995b7bba3c57fb1e5c156d386ca11894f781v // CARE: Manuel is this OK with HOP? 2809727e995b7bba3c57fb1e5c156d386ca11894f781v if (s.charAt(i) < ' ') { 2810727e995b7bba3c57fb1e5c156d386ca11894f781v /* non printable character and special chars */ 2811727e995b7bba3c57fb1e5c156d386ca11894f781v res += s.substring(j, i) + "\\x" + s.charCodeAt(i).toString(16); 2812727e995b7bba3c57fb1e5c156d386ca11894f781v j = i + 1; 2813727e995b7bba3c57fb1e5c156d386ca11894f781v } 2814727e995b7bba3c57fb1e5c156d386ca11894f781v // else just let i increase... 2815727e995b7bba3c57fb1e5c156d386ca11894f781v } 2816727e995b7bba3c57fb1e5c156d386ca11894f781v } 2817727e995b7bba3c57fb1e5c156d386ca11894f781v res += s.substring(j, i); 2818727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 2819727e995b7bba3c57fb1e5c156d386ca11894f781v} 2820727e995b7bba3c57fb1e5c156d386ca11894f781v 2821727e995b7bba3c57fb1e5c156d386ca11894f781v/* ------------------ display ---------------------------------------------------*/ 2822727e995b7bba3c57fb1e5c156d386ca11894f781v 2823727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2824727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_display(o, p) { 2825727e995b7bba3c57fb1e5c156d386ca11894f781v if (p === undefined) // we assume not given 2826727e995b7bba3c57fb1e5c156d386ca11894f781v p = SC_DEFAULT_OUT; 2827727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString(sc_toDisplayString(o)); 2828727e995b7bba3c57fb1e5c156d386ca11894f781v} 2829727e995b7bba3c57fb1e5c156d386ca11894f781v 2830727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_toDisplayString(o) { 2831727e995b7bba3c57fb1e5c156d386ca11894f781v if (o === null) 2832727e995b7bba3c57fb1e5c156d386ca11894f781v return "()"; 2833727e995b7bba3c57fb1e5c156d386ca11894f781v else if (o === true) 2834727e995b7bba3c57fb1e5c156d386ca11894f781v return "#t"; 2835727e995b7bba3c57fb1e5c156d386ca11894f781v else if (o === false) 2836727e995b7bba3c57fb1e5c156d386ca11894f781v return "#f"; 2837727e995b7bba3c57fb1e5c156d386ca11894f781v else if (o === undefined) 2838727e995b7bba3c57fb1e5c156d386ca11894f781v return "#unspecified"; 2839727e995b7bba3c57fb1e5c156d386ca11894f781v else if (typeof o === 'function') 2840727e995b7bba3c57fb1e5c156d386ca11894f781v return "#<procedure " + sc_hash(o) + ">"; 2841727e995b7bba3c57fb1e5c156d386ca11894f781v else if (o.sc_toDisplayString) 2842727e995b7bba3c57fb1e5c156d386ca11894f781v return o.sc_toDisplayString(); 2843727e995b7bba3c57fb1e5c156d386ca11894f781v else 2844727e995b7bba3c57fb1e5c156d386ca11894f781v return o.toString(); 2845727e995b7bba3c57fb1e5c156d386ca11894f781v} 2846727e995b7bba3c57fb1e5c156d386ca11894f781v 2847727e995b7bba3c57fb1e5c156d386ca11894f781v/* ------------------ newline ---------------------------------------------------*/ 2848727e995b7bba3c57fb1e5c156d386ca11894f781v 2849727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2850727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_newline(p) { 2851727e995b7bba3c57fb1e5c156d386ca11894f781v if (p === undefined) // we assume not given 2852727e995b7bba3c57fb1e5c156d386ca11894f781v p = SC_DEFAULT_OUT; 2853727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString("\n"); 2854727e995b7bba3c57fb1e5c156d386ca11894f781v} 28551805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 2856727e995b7bba3c57fb1e5c156d386ca11894f781v/* ------------------ write-char ---------------------------------------------------*/ 2857727e995b7bba3c57fb1e5c156d386ca11894f781v 2858727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2859727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_writeChar(c, p) { 2860727e995b7bba3c57fb1e5c156d386ca11894f781v if (p === undefined) // we assume not given 2861727e995b7bba3c57fb1e5c156d386ca11894f781v p = SC_DEFAULT_OUT; 2862727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString(c.val); 2863727e995b7bba3c57fb1e5c156d386ca11894f781v} 2864727e995b7bba3c57fb1e5c156d386ca11894f781v 2865727e995b7bba3c57fb1e5c156d386ca11894f781v/* ------------------ write-circle ---------------------------------------------------*/ 2866727e995b7bba3c57fb1e5c156d386ca11894f781v 2867727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2868727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_writeCircle(o, p) { 2869727e995b7bba3c57fb1e5c156d386ca11894f781v if (p === undefined) // we assume not given 2870727e995b7bba3c57fb1e5c156d386ca11894f781v p = SC_DEFAULT_OUT; 2871727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString(sc_toWriteCircleString(o)); 2872727e995b7bba3c57fb1e5c156d386ca11894f781v} 2873727e995b7bba3c57fb1e5c156d386ca11894f781v 2874727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_toWriteCircleString(o) { 2875727e995b7bba3c57fb1e5c156d386ca11894f781v var symb = sc_gensym("writeCircle"); 2876727e995b7bba3c57fb1e5c156d386ca11894f781v var nbPointer = new Object(); 2877727e995b7bba3c57fb1e5c156d386ca11894f781v nbPointer.nb = 0; 2878727e995b7bba3c57fb1e5c156d386ca11894f781v sc_prepWriteCircle(o, symb, nbPointer); 2879727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_genToWriteCircleString(o, symb); 2880727e995b7bba3c57fb1e5c156d386ca11894f781v} 2881727e995b7bba3c57fb1e5c156d386ca11894f781v 2882727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_prepWriteCircle(o, symb, nbPointer) { 2883727e995b7bba3c57fb1e5c156d386ca11894f781v // TODO sc_Struct 2884727e995b7bba3c57fb1e5c156d386ca11894f781v if (o instanceof sc_Pair || 2885727e995b7bba3c57fb1e5c156d386ca11894f781v o instanceof sc_Vector) { 2886727e995b7bba3c57fb1e5c156d386ca11894f781v if (o[symb] !== undefined) { 2887727e995b7bba3c57fb1e5c156d386ca11894f781v // not the first visit. 2888727e995b7bba3c57fb1e5c156d386ca11894f781v o[symb]++; 2889727e995b7bba3c57fb1e5c156d386ca11894f781v // unless there is already a number, assign one. 2890727e995b7bba3c57fb1e5c156d386ca11894f781v if (!o[symb + "nb"]) o[symb + "nb"] = nbPointer.nb++; 2891727e995b7bba3c57fb1e5c156d386ca11894f781v return; 2892727e995b7bba3c57fb1e5c156d386ca11894f781v } 2893727e995b7bba3c57fb1e5c156d386ca11894f781v o[symb] = 0; 2894727e995b7bba3c57fb1e5c156d386ca11894f781v if (o instanceof sc_Pair) { 2895727e995b7bba3c57fb1e5c156d386ca11894f781v sc_prepWriteCircle(o.car, symb, nbPointer); 2896727e995b7bba3c57fb1e5c156d386ca11894f781v sc_prepWriteCircle(o.cdr, symb, nbPointer); 2897727e995b7bba3c57fb1e5c156d386ca11894f781v } else { 2898727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < o.length; i++) 2899727e995b7bba3c57fb1e5c156d386ca11894f781v sc_prepWriteCircle(o[i], symb, nbPointer); 2900727e995b7bba3c57fb1e5c156d386ca11894f781v } 2901727e995b7bba3c57fb1e5c156d386ca11894f781v } 2902727e995b7bba3c57fb1e5c156d386ca11894f781v} 2903727e995b7bba3c57fb1e5c156d386ca11894f781v 2904727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_genToWriteCircleString(o, symb) { 2905727e995b7bba3c57fb1e5c156d386ca11894f781v if (!(o instanceof sc_Pair || 2906727e995b7bba3c57fb1e5c156d386ca11894f781v o instanceof sc_Vector)) 2907727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_toWriteString(o); 2908727e995b7bba3c57fb1e5c156d386ca11894f781v return o.sc_toWriteCircleString(symb); 2909727e995b7bba3c57fb1e5c156d386ca11894f781v} 2910727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Pair.prototype.sc_toWriteCircleString = function(symb, inList) { 2911727e995b7bba3c57fb1e5c156d386ca11894f781v if (this[symb + "use"]) { // use-flag is set. Just use it. 2912727e995b7bba3c57fb1e5c156d386ca11894f781v var nb = this[symb + "nb"]; 2913727e995b7bba3c57fb1e5c156d386ca11894f781v if (this[symb]-- === 0) { // if we are the last use. remove all fields. 2914727e995b7bba3c57fb1e5c156d386ca11894f781v delete this[symb]; 2915727e995b7bba3c57fb1e5c156d386ca11894f781v delete this[symb + "nb"]; 2916727e995b7bba3c57fb1e5c156d386ca11894f781v delete this[symb + "use"]; 2917727e995b7bba3c57fb1e5c156d386ca11894f781v } 2918727e995b7bba3c57fb1e5c156d386ca11894f781v if (inList) 2919727e995b7bba3c57fb1e5c156d386ca11894f781v return '. #' + nb + '#'; 2920727e995b7bba3c57fb1e5c156d386ca11894f781v else 2921727e995b7bba3c57fb1e5c156d386ca11894f781v return '#' + nb + '#'; 2922727e995b7bba3c57fb1e5c156d386ca11894f781v } 2923727e995b7bba3c57fb1e5c156d386ca11894f781v if (this[symb]-- === 0) { // if we are the last use. remove all fields. 2924727e995b7bba3c57fb1e5c156d386ca11894f781v delete this[symb]; 2925727e995b7bba3c57fb1e5c156d386ca11894f781v delete this[symb + "nb"]; 2926727e995b7bba3c57fb1e5c156d386ca11894f781v delete this[symb + "use"]; 2927727e995b7bba3c57fb1e5c156d386ca11894f781v } 2928727e995b7bba3c57fb1e5c156d386ca11894f781v 2929727e995b7bba3c57fb1e5c156d386ca11894f781v var res = ""; 29301805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 2931727e995b7bba3c57fb1e5c156d386ca11894f781v if (this[symb] !== undefined) { // implies > 0 2932727e995b7bba3c57fb1e5c156d386ca11894f781v this[symb + "use"] = true; 2933727e995b7bba3c57fb1e5c156d386ca11894f781v if (inList) 2934727e995b7bba3c57fb1e5c156d386ca11894f781v res += '. #' + this[symb + "nb"] + '='; 2935727e995b7bba3c57fb1e5c156d386ca11894f781v else 2936727e995b7bba3c57fb1e5c156d386ca11894f781v res += '#' + this[symb + "nb"] + '='; 2937727e995b7bba3c57fb1e5c156d386ca11894f781v inList = false; 2938727e995b7bba3c57fb1e5c156d386ca11894f781v } 2939727e995b7bba3c57fb1e5c156d386ca11894f781v 2940727e995b7bba3c57fb1e5c156d386ca11894f781v if (!inList) 2941727e995b7bba3c57fb1e5c156d386ca11894f781v res += "("; 29421805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 2943727e995b7bba3c57fb1e5c156d386ca11894f781v // print car 2944727e995b7bba3c57fb1e5c156d386ca11894f781v res += sc_genToWriteCircleString(this.car, symb); 29451805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 2946727e995b7bba3c57fb1e5c156d386ca11894f781v if (sc_isPair(this.cdr)) { 2947727e995b7bba3c57fb1e5c156d386ca11894f781v res += " " + this.cdr.sc_toWriteCircleString(symb, true); 2948727e995b7bba3c57fb1e5c156d386ca11894f781v } else if (this.cdr !== null) { 2949727e995b7bba3c57fb1e5c156d386ca11894f781v res += " . " + sc_genToWriteCircleString(this.cdr, symb); 2950727e995b7bba3c57fb1e5c156d386ca11894f781v } 2951727e995b7bba3c57fb1e5c156d386ca11894f781v if (!inList) 2952727e995b7bba3c57fb1e5c156d386ca11894f781v res += ")"; 2953727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 2954727e995b7bba3c57fb1e5c156d386ca11894f781v}; 2955727e995b7bba3c57fb1e5c156d386ca11894f781vsc_Vector.prototype.sc_toWriteCircleString = function(symb) { 2956727e995b7bba3c57fb1e5c156d386ca11894f781v if (this[symb + "use"]) { // use-flag is set. Just use it. 2957727e995b7bba3c57fb1e5c156d386ca11894f781v var nb = this[symb + "nb"]; 2958727e995b7bba3c57fb1e5c156d386ca11894f781v if (this[symb]-- === 0) { // if we are the last use. remove all fields. 2959727e995b7bba3c57fb1e5c156d386ca11894f781v delete this[symb]; 2960727e995b7bba3c57fb1e5c156d386ca11894f781v delete this[symb + "nb"]; 2961727e995b7bba3c57fb1e5c156d386ca11894f781v delete this[symb + "use"]; 2962727e995b7bba3c57fb1e5c156d386ca11894f781v } 2963727e995b7bba3c57fb1e5c156d386ca11894f781v return '#' + nb + '#'; 2964727e995b7bba3c57fb1e5c156d386ca11894f781v } 2965727e995b7bba3c57fb1e5c156d386ca11894f781v if (this[symb]-- === 0) { // if we are the last use. remove all fields. 2966727e995b7bba3c57fb1e5c156d386ca11894f781v delete this[symb]; 2967727e995b7bba3c57fb1e5c156d386ca11894f781v delete this[symb + "nb"]; 2968727e995b7bba3c57fb1e5c156d386ca11894f781v delete this[symb + "use"]; 2969727e995b7bba3c57fb1e5c156d386ca11894f781v } 2970727e995b7bba3c57fb1e5c156d386ca11894f781v 2971727e995b7bba3c57fb1e5c156d386ca11894f781v var res = ""; 2972727e995b7bba3c57fb1e5c156d386ca11894f781v if (this[symb] !== undefined) { // implies > 0 2973727e995b7bba3c57fb1e5c156d386ca11894f781v this[symb + "use"] = true; 2974727e995b7bba3c57fb1e5c156d386ca11894f781v res += '#' + this[symb + "nb"] + '='; 2975727e995b7bba3c57fb1e5c156d386ca11894f781v } 2976727e995b7bba3c57fb1e5c156d386ca11894f781v res += "#("; 2977727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < this.length; i++) { 2978727e995b7bba3c57fb1e5c156d386ca11894f781v res += sc_genToWriteCircleString(this[i], symb); 2979727e995b7bba3c57fb1e5c156d386ca11894f781v if (i < this.length - 1) res += " "; 2980727e995b7bba3c57fb1e5c156d386ca11894f781v } 2981727e995b7bba3c57fb1e5c156d386ca11894f781v res += ")"; 2982727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 2983727e995b7bba3c57fb1e5c156d386ca11894f781v}; 2984727e995b7bba3c57fb1e5c156d386ca11894f781v 2985727e995b7bba3c57fb1e5c156d386ca11894f781v 2986727e995b7bba3c57fb1e5c156d386ca11894f781v/* ------------------ print ---------------------------------------------------*/ 2987727e995b7bba3c57fb1e5c156d386ca11894f781v 2988727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 2989727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_print(s) { 2990727e995b7bba3c57fb1e5c156d386ca11894f781v if (arguments.length === 1) { 2991727e995b7bba3c57fb1e5c156d386ca11894f781v sc_display(s); 2992727e995b7bba3c57fb1e5c156d386ca11894f781v sc_newline(); 2993727e995b7bba3c57fb1e5c156d386ca11894f781v } 2994727e995b7bba3c57fb1e5c156d386ca11894f781v else { 2995727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < arguments.length; i++) 2996727e995b7bba3c57fb1e5c156d386ca11894f781v sc_display(arguments[i]); 2997727e995b7bba3c57fb1e5c156d386ca11894f781v sc_newline(); 2998727e995b7bba3c57fb1e5c156d386ca11894f781v } 2999727e995b7bba3c57fb1e5c156d386ca11894f781v} 3000727e995b7bba3c57fb1e5c156d386ca11894f781v 3001727e995b7bba3c57fb1e5c156d386ca11894f781v/* ------------------ format ---------------------------------------------------*/ 3002727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 3003727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_format(s, args) { 3004727e995b7bba3c57fb1e5c156d386ca11894f781v var len = s.length; 3005727e995b7bba3c57fb1e5c156d386ca11894f781v var p = new sc_StringOutputPort(); 3006727e995b7bba3c57fb1e5c156d386ca11894f781v var i = 0, j = 1; 3007727e995b7bba3c57fb1e5c156d386ca11894f781v 3008727e995b7bba3c57fb1e5c156d386ca11894f781v while( i < len ) { 3009727e995b7bba3c57fb1e5c156d386ca11894f781v var i2 = s.indexOf("~", i); 3010727e995b7bba3c57fb1e5c156d386ca11894f781v 3011727e995b7bba3c57fb1e5c156d386ca11894f781v if (i2 == -1) { 3012727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString( s.substring( i, len ) ); 3013727e995b7bba3c57fb1e5c156d386ca11894f781v return p.close(); 3014727e995b7bba3c57fb1e5c156d386ca11894f781v } else { 3015727e995b7bba3c57fb1e5c156d386ca11894f781v if (i2 > i) { 3016727e995b7bba3c57fb1e5c156d386ca11894f781v if (i2 == (len - 1)) { 3017727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString(s.substring(i, len)); 3018727e995b7bba3c57fb1e5c156d386ca11894f781v return p.close(); 3019727e995b7bba3c57fb1e5c156d386ca11894f781v } else { 3020727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString(s.substring(i, i2)); 3021727e995b7bba3c57fb1e5c156d386ca11894f781v i = i2; 3022727e995b7bba3c57fb1e5c156d386ca11894f781v } 3023727e995b7bba3c57fb1e5c156d386ca11894f781v } 3024727e995b7bba3c57fb1e5c156d386ca11894f781v 3025727e995b7bba3c57fb1e5c156d386ca11894f781v switch(s.charCodeAt(i2 + 1)) { 3026727e995b7bba3c57fb1e5c156d386ca11894f781v case 65: 3027727e995b7bba3c57fb1e5c156d386ca11894f781v case 97: 3028727e995b7bba3c57fb1e5c156d386ca11894f781v // a 3029727e995b7bba3c57fb1e5c156d386ca11894f781v sc_display(arguments[j], p); 3030727e995b7bba3c57fb1e5c156d386ca11894f781v i += 2; j++; 3031727e995b7bba3c57fb1e5c156d386ca11894f781v break; 3032727e995b7bba3c57fb1e5c156d386ca11894f781v 3033727e995b7bba3c57fb1e5c156d386ca11894f781v case 83: 3034727e995b7bba3c57fb1e5c156d386ca11894f781v case 115: 3035727e995b7bba3c57fb1e5c156d386ca11894f781v // s 3036727e995b7bba3c57fb1e5c156d386ca11894f781v sc_write(arguments[j], p); 3037727e995b7bba3c57fb1e5c156d386ca11894f781v i += 2; j++; 3038727e995b7bba3c57fb1e5c156d386ca11894f781v break; 3039727e995b7bba3c57fb1e5c156d386ca11894f781v 3040727e995b7bba3c57fb1e5c156d386ca11894f781v case 86: 3041727e995b7bba3c57fb1e5c156d386ca11894f781v case 118: 3042727e995b7bba3c57fb1e5c156d386ca11894f781v // v 3043727e995b7bba3c57fb1e5c156d386ca11894f781v sc_display(arguments[j], p); 3044727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString("\n"); 3045727e995b7bba3c57fb1e5c156d386ca11894f781v i += 2; j++; 3046727e995b7bba3c57fb1e5c156d386ca11894f781v break; 3047727e995b7bba3c57fb1e5c156d386ca11894f781v 3048727e995b7bba3c57fb1e5c156d386ca11894f781v case 67: 3049727e995b7bba3c57fb1e5c156d386ca11894f781v case 99: 3050727e995b7bba3c57fb1e5c156d386ca11894f781v // c 3051727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString(String.fromCharCode(arguments[j])); 3052727e995b7bba3c57fb1e5c156d386ca11894f781v i += 2; j++; 3053727e995b7bba3c57fb1e5c156d386ca11894f781v break; 3054727e995b7bba3c57fb1e5c156d386ca11894f781v 3055727e995b7bba3c57fb1e5c156d386ca11894f781v case 88: 3056727e995b7bba3c57fb1e5c156d386ca11894f781v case 120: 3057727e995b7bba3c57fb1e5c156d386ca11894f781v // x 3058727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString(arguments[j].toString(6)); 3059727e995b7bba3c57fb1e5c156d386ca11894f781v i += 2; j++; 3060727e995b7bba3c57fb1e5c156d386ca11894f781v break; 3061727e995b7bba3c57fb1e5c156d386ca11894f781v 3062727e995b7bba3c57fb1e5c156d386ca11894f781v case 79: 3063727e995b7bba3c57fb1e5c156d386ca11894f781v case 111: 3064727e995b7bba3c57fb1e5c156d386ca11894f781v // o 3065727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString(arguments[j].toString(8)); 3066727e995b7bba3c57fb1e5c156d386ca11894f781v i += 2; j++; 3067727e995b7bba3c57fb1e5c156d386ca11894f781v break; 3068727e995b7bba3c57fb1e5c156d386ca11894f781v 3069727e995b7bba3c57fb1e5c156d386ca11894f781v case 66: 3070727e995b7bba3c57fb1e5c156d386ca11894f781v case 98: 3071727e995b7bba3c57fb1e5c156d386ca11894f781v // b 3072727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString(arguments[j].toString(2)); 3073727e995b7bba3c57fb1e5c156d386ca11894f781v i += 2; j++; 3074727e995b7bba3c57fb1e5c156d386ca11894f781v break; 30751805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 3076727e995b7bba3c57fb1e5c156d386ca11894f781v case 37: 3077727e995b7bba3c57fb1e5c156d386ca11894f781v case 110: 3078727e995b7bba3c57fb1e5c156d386ca11894f781v // %, n 3079727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString("\n"); 3080727e995b7bba3c57fb1e5c156d386ca11894f781v i += 2; break; 3081727e995b7bba3c57fb1e5c156d386ca11894f781v 3082727e995b7bba3c57fb1e5c156d386ca11894f781v case 114: 3083727e995b7bba3c57fb1e5c156d386ca11894f781v // r 3084727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString("\r"); 3085727e995b7bba3c57fb1e5c156d386ca11894f781v i += 2; break; 3086727e995b7bba3c57fb1e5c156d386ca11894f781v 3087727e995b7bba3c57fb1e5c156d386ca11894f781v case 126: 3088727e995b7bba3c57fb1e5c156d386ca11894f781v // ~ 3089727e995b7bba3c57fb1e5c156d386ca11894f781v p.appendJSString("~"); 3090727e995b7bba3c57fb1e5c156d386ca11894f781v i += 2; break; 3091727e995b7bba3c57fb1e5c156d386ca11894f781v 3092727e995b7bba3c57fb1e5c156d386ca11894f781v default: 3093727e995b7bba3c57fb1e5c156d386ca11894f781v sc_error( "format: illegal ~" 3094727e995b7bba3c57fb1e5c156d386ca11894f781v + String.fromCharCode(s.charCodeAt(i2 + 1)) 3095727e995b7bba3c57fb1e5c156d386ca11894f781v + " sequence" ); 3096727e995b7bba3c57fb1e5c156d386ca11894f781v return ""; 3097727e995b7bba3c57fb1e5c156d386ca11894f781v } 3098727e995b7bba3c57fb1e5c156d386ca11894f781v } 3099727e995b7bba3c57fb1e5c156d386ca11894f781v } 3100727e995b7bba3c57fb1e5c156d386ca11894f781v 3101727e995b7bba3c57fb1e5c156d386ca11894f781v return p.close(); 3102727e995b7bba3c57fb1e5c156d386ca11894f781v} 3103727e995b7bba3c57fb1e5c156d386ca11894f781v 3104727e995b7bba3c57fb1e5c156d386ca11894f781v/* ------------------ global ports ---------------------------------------------------*/ 3105727e995b7bba3c57fb1e5c156d386ca11894f781v 3106727e995b7bba3c57fb1e5c156d386ca11894f781vvar SC_DEFAULT_IN = new sc_ErrorInputPort(); 3107727e995b7bba3c57fb1e5c156d386ca11894f781vvar SC_DEFAULT_OUT = new sc_ErrorOutputPort(); 3108727e995b7bba3c57fb1e5c156d386ca11894f781vvar SC_ERROR_OUT = new sc_ErrorOutputPort(); 3109727e995b7bba3c57fb1e5c156d386ca11894f781v 3110727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_SYMBOL_PREFIX = "\u1E9C"; 3111727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_KEYWORD_PREFIX = "\u1E9D"; 3112727e995b7bba3c57fb1e5c156d386ca11894f781v 3113727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3114727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (id))) */ 3115727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_jsstring2string(s) { 3116727e995b7bba3c57fb1e5c156d386ca11894f781v return s; 3117727e995b7bba3c57fb1e5c156d386ca11894f781v} 3118727e995b7bba3c57fb1e5c156d386ca11894f781v 3119727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3120727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (prefix "'\\u1E9C' +"))) 3121727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3122727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_jsstring2symbol(s) { 3123727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_SYMBOL_PREFIX + s; 3124727e995b7bba3c57fb1e5c156d386ca11894f781v} 3125727e995b7bba3c57fb1e5c156d386ca11894f781v 3126727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3127727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (id))) 3128727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3129727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_string2jsstring(s) { 3130727e995b7bba3c57fb1e5c156d386ca11894f781v return s; 3131727e995b7bba3c57fb1e5c156d386ca11894f781v} 3132727e995b7bba3c57fb1e5c156d386ca11894f781v 3133727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3134727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (symbol2jsstring_immutable))) 3135727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3136727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_symbol2jsstring(s) { 3137727e995b7bba3c57fb1e5c156d386ca11894f781v return s.slice(1); 3138727e995b7bba3c57fb1e5c156d386ca11894f781v} 3139727e995b7bba3c57fb1e5c156d386ca11894f781v 3140727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3141727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".slice(1)"))) 3142727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3143727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_keyword2jsstring(k) { 3144727e995b7bba3c57fb1e5c156d386ca11894f781v return k.slice(1); 3145727e995b7bba3c57fb1e5c156d386ca11894f781v} 3146727e995b7bba3c57fb1e5c156d386ca11894f781v 3147727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3148727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (prefix "'\\u1E9D' +"))) 3149727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3150727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_jsstring2keyword(s) { 3151727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_KEYWORD_PREFIX + s; 3152727e995b7bba3c57fb1e5c156d386ca11894f781v} 3153727e995b7bba3c57fb1e5c156d386ca11894f781v 3154727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3155727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 3156727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3157727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isKeyword(s) { 3158727e995b7bba3c57fb1e5c156d386ca11894f781v return (typeof s === "string") && 3159727e995b7bba3c57fb1e5c156d386ca11894f781v (s.charAt(0) === sc_KEYWORD_PREFIX); 3160727e995b7bba3c57fb1e5c156d386ca11894f781v} 3161727e995b7bba3c57fb1e5c156d386ca11894f781v 3162727e995b7bba3c57fb1e5c156d386ca11894f781v 3163727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 3164727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_gensym = function() { 3165727e995b7bba3c57fb1e5c156d386ca11894f781v var counter = 1000; 3166727e995b7bba3c57fb1e5c156d386ca11894f781v return function(sym) { 3167727e995b7bba3c57fb1e5c156d386ca11894f781v counter++; 3168727e995b7bba3c57fb1e5c156d386ca11894f781v if (!sym) sym = sc_SYMBOL_PREFIX; 3169727e995b7bba3c57fb1e5c156d386ca11894f781v return sym + "s" + counter + "~" + "^sC-GeNsYm "; 3170727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3171727e995b7bba3c57fb1e5c156d386ca11894f781v}(); 3172727e995b7bba3c57fb1e5c156d386ca11894f781v 3173727e995b7bba3c57fb1e5c156d386ca11894f781v 3174727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3175727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 3176727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3177727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isEqual(o1, o2) { 3178727e995b7bba3c57fb1e5c156d386ca11894f781v return ((o1 === o2) || 3179727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_isPair(o1) && sc_isPair(o2) 3180727e995b7bba3c57fb1e5c156d386ca11894f781v && sc_isPairEqual(o1, o2, sc_isEqual)) || 3181727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_isVector(o1) && sc_isVector(o2) 3182727e995b7bba3c57fb1e5c156d386ca11894f781v && sc_isVectorEqual(o1, o2, sc_isEqual))); 3183727e995b7bba3c57fb1e5c156d386ca11894f781v} 3184727e995b7bba3c57fb1e5c156d386ca11894f781v 3185727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export number->symbol integer->symbol)) */ 3186727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_number2symbol(x, radix) { 3187727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_SYMBOL_PREFIX + sc_number2jsstring(x, radix); 3188727e995b7bba3c57fb1e5c156d386ca11894f781v} 31891805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org 3190727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export number->string integer->string)) */ 3191727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_number2string = sc_number2jsstring; 3192727e995b7bba3c57fb1e5c156d386ca11894f781v 3193727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 3194727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_symbol2number(s, radix) { 3195727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_jsstring2number(s.slice(1), radix); 3196727e995b7bba3c57fb1e5c156d386ca11894f781v} 3197727e995b7bba3c57fb1e5c156d386ca11894f781v 3198727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 3199727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_string2number = sc_jsstring2number; 3200727e995b7bba3c57fb1e5c156d386ca11894f781v 3201727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3202727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (prefix "+" s))) 3203727e995b7bba3c57fb1e5c156d386ca11894f781v ;; peephole will only apply if no radix is given. 3204727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3205727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_string2integer(s, radix) { 3206727e995b7bba3c57fb1e5c156d386ca11894f781v if (!radix) return +s; 3207727e995b7bba3c57fb1e5c156d386ca11894f781v return parseInt(s, radix); 3208727e995b7bba3c57fb1e5c156d386ca11894f781v} 3209727e995b7bba3c57fb1e5c156d386ca11894f781v 3210727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3211727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (prefix "+"))) 3212727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3213727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_string2real(s) { 3214727e995b7bba3c57fb1e5c156d386ca11894f781v return +s; 3215727e995b7bba3c57fb1e5c156d386ca11894f781v} 3216727e995b7bba3c57fb1e5c156d386ca11894f781v 3217727e995b7bba3c57fb1e5c156d386ca11894f781v 3218727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3219727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 3220727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3221727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isSymbol(s) { 3222727e995b7bba3c57fb1e5c156d386ca11894f781v return (typeof s === "string") && 3223727e995b7bba3c57fb1e5c156d386ca11894f781v (s.charAt(0) === sc_SYMBOL_PREFIX); 3224727e995b7bba3c57fb1e5c156d386ca11894f781v} 3225727e995b7bba3c57fb1e5c156d386ca11894f781v 3226727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3227727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (symbol2string_immutable))) 3228727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3229727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_symbol2string(s) { 3230727e995b7bba3c57fb1e5c156d386ca11894f781v return s.slice(1); 3231727e995b7bba3c57fb1e5c156d386ca11894f781v} 3232727e995b7bba3c57fb1e5c156d386ca11894f781v 3233727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3234727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (prefix "'\\u1E9C' +"))) 3235727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3236727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_string2symbol(s) { 3237727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_SYMBOL_PREFIX + s; 3238727e995b7bba3c57fb1e5c156d386ca11894f781v} 3239727e995b7bba3c57fb1e5c156d386ca11894f781v 3240727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export symbol-append) 3241727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (symbolAppend_immutable))) 3242727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3243727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_symbolAppend() { 3244727e995b7bba3c57fb1e5c156d386ca11894f781v var res = sc_SYMBOL_PREFIX; 3245727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < arguments.length; i++) 3246727e995b7bba3c57fb1e5c156d386ca11894f781v res += arguments[i].slice(1); 3247727e995b7bba3c57fb1e5c156d386ca11894f781v return res; 3248727e995b7bba3c57fb1e5c156d386ca11894f781v} 3249727e995b7bba3c57fb1e5c156d386ca11894f781v 3250727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3251727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".val"))) 3252727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3253727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_char2string(c) { return c.val; } 3254727e995b7bba3c57fb1e5c156d386ca11894f781v 3255727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3256727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 1 "'\\u1E9C' + " c ".val"))) 3257727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3258727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_char2symbol(c) { return sc_SYMBOL_PREFIX + c.val; } 3259727e995b7bba3c57fb1e5c156d386ca11894f781v 3260727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3261727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool)) 3262727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3263727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isString(s) { 3264727e995b7bba3c57fb1e5c156d386ca11894f781v return (typeof s === "string") && 3265727e995b7bba3c57fb1e5c156d386ca11894f781v (s.charAt(0) !== sc_SYMBOL_PREFIX); 3266727e995b7bba3c57fb1e5c156d386ca11894f781v} 3267727e995b7bba3c57fb1e5c156d386ca11894f781v 3268727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 3269727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_makeString = sc_makejsString; 3270727e995b7bba3c57fb1e5c156d386ca11894f781v 3271727e995b7bba3c57fb1e5c156d386ca11894f781v 3272727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 3273727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_string() { 3274727e995b7bba3c57fb1e5c156d386ca11894f781v for (var i = 0; i < arguments.length; i++) 3275727e995b7bba3c57fb1e5c156d386ca11894f781v arguments[i] = arguments[i].val; 3276727e995b7bba3c57fb1e5c156d386ca11894f781v return "".concat.apply("", arguments); 3277727e995b7bba3c57fb1e5c156d386ca11894f781v} 3278727e995b7bba3c57fb1e5c156d386ca11894f781v 3279727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3280727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".length"))) 3281727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3282727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_stringLength(s) { return s.length; } 3283727e995b7bba3c57fb1e5c156d386ca11894f781v 3284727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 3285727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_stringRef(s, k) { 3286727e995b7bba3c57fb1e5c156d386ca11894f781v return new sc_Char(s.charAt(k)); 3287727e995b7bba3c57fb1e5c156d386ca11894f781v} 3288727e995b7bba3c57fb1e5c156d386ca11894f781v 3289727e995b7bba3c57fb1e5c156d386ca11894f781v/* there's no stringSet in the immutable version 3290727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_stringSet(s, k, c) 3291727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3292727e995b7bba3c57fb1e5c156d386ca11894f781v 3293727e995b7bba3c57fb1e5c156d386ca11894f781v 3294727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export string=?) 3295727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 3296727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 str1 " === " str2))) 3297727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3298727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isStringEqual(s1, s2) { 3299727e995b7bba3c57fb1e5c156d386ca11894f781v return s1 === s2; 3300727e995b7bba3c57fb1e5c156d386ca11894f781v} 3301727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export string<?) 3302727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 3303727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 str1 " < " str2))) 3304727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3305727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isStringLess(s1, s2) { 3306727e995b7bba3c57fb1e5c156d386ca11894f781v return s1 < s2; 3307727e995b7bba3c57fb1e5c156d386ca11894f781v} 3308727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export string>?) 3309727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 3310727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 str1 " > " str2))) 3311727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3312727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isStringGreater(s1, s2) { 3313727e995b7bba3c57fb1e5c156d386ca11894f781v return s1 > s2; 3314727e995b7bba3c57fb1e5c156d386ca11894f781v} 3315727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export string<=?) 3316727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 3317727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 str1 " <= " str2))) 3318727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3319727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isStringLessEqual(s1, s2) { 3320727e995b7bba3c57fb1e5c156d386ca11894f781v return s1 <= s2; 3321727e995b7bba3c57fb1e5c156d386ca11894f781v} 3322727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export string>=?) 3323727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 3324727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 str1 " >= " str2))) 3325727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3326727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isStringGreaterEqual(s1, s2) { 3327727e995b7bba3c57fb1e5c156d386ca11894f781v return s1 >= s2; 3328727e995b7bba3c57fb1e5c156d386ca11894f781v} 3329727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export string-ci=?) 3330727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 3331727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 str1 ".toLowerCase() === " str2 ".toLowerCase()"))) 3332727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3333727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isStringCIEqual(s1, s2) { 3334727e995b7bba3c57fb1e5c156d386ca11894f781v return s1.toLowerCase() === s2.toLowerCase(); 3335727e995b7bba3c57fb1e5c156d386ca11894f781v} 3336727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export string-ci<?) 3337727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 3338727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 str1 ".toLowerCase() < " str2 ".toLowerCase()"))) 3339727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3340727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isStringCILess(s1, s2) { 3341727e995b7bba3c57fb1e5c156d386ca11894f781v return s1.toLowerCase() < s2.toLowerCase(); 3342727e995b7bba3c57fb1e5c156d386ca11894f781v} 3343727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export string-ci>?) 3344727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 3345727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 str1 ".toLowerCase() > " str2 ".toLowerCase()"))) 3346727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3347727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isStringCIGreater(s1, s2) { 3348727e995b7bba3c57fb1e5c156d386ca11894f781v return s1.toLowerCase() > s2.toLowerCase(); 3349727e995b7bba3c57fb1e5c156d386ca11894f781v} 3350727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export string-ci<=?) 3351727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 3352727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 str1 ".toLowerCase() <= " str2 ".toLowerCase()"))) 3353727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3354727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isStringCILessEqual(s1, s2) { 3355727e995b7bba3c57fb1e5c156d386ca11894f781v return s1.toLowerCase() <= s2.toLowerCase(); 3356727e995b7bba3c57fb1e5c156d386ca11894f781v} 3357727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export string-ci>=?) 3358727e995b7bba3c57fb1e5c156d386ca11894f781v (type bool) 3359727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 2 str1 ".toLowerCase() >= " str2 ".toLowerCase()"))) 3360727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3361727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isStringCIGreaterEqual(s1, s2) { 3362727e995b7bba3c57fb1e5c156d386ca11894f781v return s1.toLowerCase() >= s2.toLowerCase(); 3363727e995b7bba3c57fb1e5c156d386ca11894f781v} 3364727e995b7bba3c57fb1e5c156d386ca11894f781v 3365727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3366727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (hole 3 s ".substring(" start ", " end ")"))) 3367727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3368727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_substring(s, start, end) { 3369727e995b7bba3c57fb1e5c156d386ca11894f781v return s.substring(start, end); 3370727e995b7bba3c57fb1e5c156d386ca11894f781v} 3371727e995b7bba3c57fb1e5c156d386ca11894f781v 3372727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) 3373727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3374727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_isSubstring_at(s1, s2, i) { 3375727e995b7bba3c57fb1e5c156d386ca11894f781v return s2 == s1.substring(i, i+ s2.length); 3376727e995b7bba3c57fb1e5c156d386ca11894f781v} 3377727e995b7bba3c57fb1e5c156d386ca11894f781v 3378727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3379727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (infix 0 #f "+" "''"))) 3380727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3381727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_stringAppend() { 3382727e995b7bba3c57fb1e5c156d386ca11894f781v return "".concat.apply("", arguments); 3383727e995b7bba3c57fb1e5c156d386ca11894f781v} 3384727e995b7bba3c57fb1e5c156d386ca11894f781v 3385727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 3386727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_string2list = sc_jsstring2list; 3387727e995b7bba3c57fb1e5c156d386ca11894f781v 3388727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t)) */ 3389727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_list2string = sc_list2jsstring; 3390727e995b7bba3c57fb1e5c156d386ca11894f781v 3391727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3392727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (id))) 3393727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3394727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_stringCopy(s) { 3395727e995b7bba3c57fb1e5c156d386ca11894f781v return s; 3396727e995b7bba3c57fb1e5c156d386ca11894f781v} 3397727e995b7bba3c57fb1e5c156d386ca11894f781v 3398727e995b7bba3c57fb1e5c156d386ca11894f781v/* there's no string-fill in the immutable version 3399727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_stringFill(s, c) 3400727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3401727e995b7bba3c57fb1e5c156d386ca11894f781v 3402727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3403727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (postfix ".slice(1)"))) 3404727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3405727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_keyword2string(o) { 3406727e995b7bba3c57fb1e5c156d386ca11894f781v return o.slice(1); 3407727e995b7bba3c57fb1e5c156d386ca11894f781v} 3408727e995b7bba3c57fb1e5c156d386ca11894f781v 3409727e995b7bba3c57fb1e5c156d386ca11894f781v/*** META ((export #t) 3410727e995b7bba3c57fb1e5c156d386ca11894f781v (peephole (prefix "'\\u1E9D' +"))) 3411727e995b7bba3c57fb1e5c156d386ca11894f781v*/ 3412727e995b7bba3c57fb1e5c156d386ca11894f781vfunction sc_string2keyword(o) { 3413727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_KEYWORD_PREFIX + o; 3414727e995b7bba3c57fb1e5c156d386ca11894f781v} 3415727e995b7bba3c57fb1e5c156d386ca11894f781v 3416727e995b7bba3c57fb1e5c156d386ca11894f781vString.prototype.sc_toDisplayString = function() { 3417727e995b7bba3c57fb1e5c156d386ca11894f781v if (this.charAt(0) === sc_SYMBOL_PREFIX) 3418727e995b7bba3c57fb1e5c156d386ca11894f781v // TODO: care for symbols with spaces (escape-chars symbols). 3419727e995b7bba3c57fb1e5c156d386ca11894f781v return this.slice(1); 3420727e995b7bba3c57fb1e5c156d386ca11894f781v else if (this.charAt(0) === sc_KEYWORD_PREFIX) 3421727e995b7bba3c57fb1e5c156d386ca11894f781v return ":" + this.slice(1); 3422727e995b7bba3c57fb1e5c156d386ca11894f781v else 3423727e995b7bba3c57fb1e5c156d386ca11894f781v return this.toString(); 3424727e995b7bba3c57fb1e5c156d386ca11894f781v}; 3425727e995b7bba3c57fb1e5c156d386ca11894f781v 3426727e995b7bba3c57fb1e5c156d386ca11894f781vString.prototype.sc_toWriteString = function() { 3427727e995b7bba3c57fb1e5c156d386ca11894f781v if (this.charAt(0) === sc_SYMBOL_PREFIX) 3428727e995b7bba3c57fb1e5c156d386ca11894f781v // TODO: care for symbols with spaces (escape-chars symbols). 3429727e995b7bba3c57fb1e5c156d386ca11894f781v return this.slice(1); 3430727e995b7bba3c57fb1e5c156d386ca11894f781v else if (this.charAt(0) === sc_KEYWORD_PREFIX) 3431727e995b7bba3c57fb1e5c156d386ca11894f781v return ":" + this.slice(1); 3432727e995b7bba3c57fb1e5c156d386ca11894f781v else 3433727e995b7bba3c57fb1e5c156d386ca11894f781v return '"' + sc_escapeWriteString(this) + '"'; 3434727e995b7bba3c57fb1e5c156d386ca11894f781v}; 3435727e995b7bba3c57fb1e5c156d386ca11894f781v/* Exported Variables */ 3436727e995b7bba3c57fb1e5c156d386ca11894f781vvar BgL_testzd2boyerzd2; 3437727e995b7bba3c57fb1e5c156d386ca11894f781vvar BgL_nboyerzd2benchmarkzd2; 3438727e995b7bba3c57fb1e5c156d386ca11894f781vvar BgL_setupzd2boyerzd2; 3439727e995b7bba3c57fb1e5c156d386ca11894f781v/* End Exports */ 3440727e995b7bba3c57fb1e5c156d386ca11894f781v 3441727e995b7bba3c57fb1e5c156d386ca11894f781vvar translate_term_nboyer; 3442727e995b7bba3c57fb1e5c156d386ca11894f781vvar translate_args_nboyer; 3443727e995b7bba3c57fb1e5c156d386ca11894f781vvar untranslate_term_nboyer; 3444727e995b7bba3c57fb1e5c156d386ca11894f781vvar BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer; 3445727e995b7bba3c57fb1e5c156d386ca11894f781vvar BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer; 3446727e995b7bba3c57fb1e5c156d386ca11894f781vvar translate_alist_nboyer; 3447727e995b7bba3c57fb1e5c156d386ca11894f781vvar apply_subst_nboyer; 3448727e995b7bba3c57fb1e5c156d386ca11894f781vvar apply_subst_lst_nboyer; 3449727e995b7bba3c57fb1e5c156d386ca11894f781vvar tautologyp_nboyer; 3450727e995b7bba3c57fb1e5c156d386ca11894f781vvar if_constructor_nboyer; 3451727e995b7bba3c57fb1e5c156d386ca11894f781vvar rewrite_count_nboyer; 3452727e995b7bba3c57fb1e5c156d386ca11894f781vvar rewrite_nboyer; 3453727e995b7bba3c57fb1e5c156d386ca11894f781vvar rewrite_args_nboyer; 3454727e995b7bba3c57fb1e5c156d386ca11894f781vvar unify_subst_nboyer; 3455727e995b7bba3c57fb1e5c156d386ca11894f781vvar one_way_unify1_nboyer; 3456727e995b7bba3c57fb1e5c156d386ca11894f781vvar false_term_nboyer; 3457727e995b7bba3c57fb1e5c156d386ca11894f781vvar true_term_nboyer; 3458727e995b7bba3c57fb1e5c156d386ca11894f781vvar trans_of_implies1_nboyer; 3459727e995b7bba3c57fb1e5c156d386ca11894f781vvar is_term_equal_nboyer; 3460727e995b7bba3c57fb1e5c156d386ca11894f781vvar is_term_member_nboyer; 3461727e995b7bba3c57fb1e5c156d386ca11894f781vvar const_nboyer; 3462727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_const_3_nboyer; 3463727e995b7bba3c57fb1e5c156d386ca11894f781vvar sc_const_4_nboyer; 3464727e995b7bba3c57fb1e5c156d386ca11894f781v{ 3465727e995b7bba3c57fb1e5c156d386ca11894f781v (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))))))); 3466727e995b7bba3c57fb1e5c156d386ca11894f781v (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)))))))); 3467727e995b7bba3c57fb1e5c156d386ca11894f781v (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))))))))))); 3468727e995b7bba3c57fb1e5c156d386ca11894f781v BgL_nboyerzd2benchmarkzd2 = function() { 3469727e995b7bba3c57fb1e5c156d386ca11894f781v var args = null; 3470727e995b7bba3c57fb1e5c156d386ca11894f781v for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) { 3471727e995b7bba3c57fb1e5c156d386ca11894f781v args = sc_cons(arguments[sc_tmp], args); 3472727e995b7bba3c57fb1e5c156d386ca11894f781v } 3473727e995b7bba3c57fb1e5c156d386ca11894f781v var n; 3474727e995b7bba3c57fb1e5c156d386ca11894f781v return ((n = ((args === null)?(0):(args.car))), (BgL_setupzd2boyerzd2()), (BgL_runzd2benchmarkzd2(("nboyer"+(sc_number2string(n))), (1), function() { 3475727e995b7bba3c57fb1e5c156d386ca11894f781v return (BgL_testzd2boyerzd2(n)); 3476727e995b7bba3c57fb1e5c156d386ca11894f781v }, function(rewrites) { 3477727e995b7bba3c57fb1e5c156d386ca11894f781v if ((sc_isNumber(rewrites))) 3478727e995b7bba3c57fb1e5c156d386ca11894f781v switch (n) { 3479727e995b7bba3c57fb1e5c156d386ca11894f781v case (0): 3480727e995b7bba3c57fb1e5c156d386ca11894f781v return (rewrites===(95024)); 3481727e995b7bba3c57fb1e5c156d386ca11894f781v break; 3482727e995b7bba3c57fb1e5c156d386ca11894f781v case (1): 3483727e995b7bba3c57fb1e5c156d386ca11894f781v return (rewrites===(591777)); 3484727e995b7bba3c57fb1e5c156d386ca11894f781v break; 3485727e995b7bba3c57fb1e5c156d386ca11894f781v case (2): 3486727e995b7bba3c57fb1e5c156d386ca11894f781v return (rewrites===(1813975)); 3487727e995b7bba3c57fb1e5c156d386ca11894f781v break; 3488727e995b7bba3c57fb1e5c156d386ca11894f781v case (3): 3489727e995b7bba3c57fb1e5c156d386ca11894f781v return (rewrites===(5375678)); 3490727e995b7bba3c57fb1e5c156d386ca11894f781v break; 3491727e995b7bba3c57fb1e5c156d386ca11894f781v case (4): 3492727e995b7bba3c57fb1e5c156d386ca11894f781v return (rewrites===(16445406)); 3493727e995b7bba3c57fb1e5c156d386ca11894f781v break; 3494727e995b7bba3c57fb1e5c156d386ca11894f781v case (5): 3495727e995b7bba3c57fb1e5c156d386ca11894f781v return (rewrites===(51507739)); 3496727e995b7bba3c57fb1e5c156d386ca11894f781v break; 3497727e995b7bba3c57fb1e5c156d386ca11894f781v default: 3498727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 3499727e995b7bba3c57fb1e5c156d386ca11894f781v break; 3500727e995b7bba3c57fb1e5c156d386ca11894f781v } 3501727e995b7bba3c57fb1e5c156d386ca11894f781v else 3502727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3503727e995b7bba3c57fb1e5c156d386ca11894f781v }))); 3504727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3505727e995b7bba3c57fb1e5c156d386ca11894f781v BgL_setupzd2boyerzd2 = function() { 3506727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 3507727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3508727e995b7bba3c57fb1e5c156d386ca11894f781v BgL_testzd2boyerzd2 = function() { 3509727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 3510727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3511727e995b7bba3c57fb1e5c156d386ca11894f781v translate_term_nboyer = function(term) { 3512727e995b7bba3c57fb1e5c156d386ca11894f781v var lst; 3513727e995b7bba3c57fb1e5c156d386ca11894f781v 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)))))))))); 3514727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3515727e995b7bba3c57fb1e5c156d386ca11894f781v translate_args_nboyer = function(lst) { 3516727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_lst_5; 3517727e995b7bba3c57fb1e5c156d386ca11894f781v var term; 3518727e995b7bba3c57fb1e5c156d386ca11894f781v 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)))))))))); 3519727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3520727e995b7bba3c57fb1e5c156d386ca11894f781v untranslate_term_nboyer = function(term) { 3521727e995b7bba3c57fb1e5c156d386ca11894f781v var optrOpnd; 3522727e995b7bba3c57fb1e5c156d386ca11894f781v var tail1131; 3523727e995b7bba3c57fb1e5c156d386ca11894f781v var L1127; 3524727e995b7bba3c57fb1e5c156d386ca11894f781v var falseHead1130; 3525727e995b7bba3c57fb1e5c156d386ca11894f781v var symbol_record; 3526727e995b7bba3c57fb1e5c156d386ca11894f781v if (!(term instanceof sc_Pair)) 3527727e995b7bba3c57fb1e5c156d386ca11894f781v return term; 3528727e995b7bba3c57fb1e5c156d386ca11894f781v else 3529727e995b7bba3c57fb1e5c156d386ca11894f781v { 3530727e995b7bba3c57fb1e5c156d386ca11894f781v (falseHead1130 = (new sc_Pair(null, null))); 3531727e995b7bba3c57fb1e5c156d386ca11894f781v (L1127 = (term.cdr)); 3532727e995b7bba3c57fb1e5c156d386ca11894f781v (tail1131 = falseHead1130); 3533727e995b7bba3c57fb1e5c156d386ca11894f781v while (!(L1127 === null)) { 3534727e995b7bba3c57fb1e5c156d386ca11894f781v { 3535727e995b7bba3c57fb1e5c156d386ca11894f781v (tail1131.cdr = (new sc_Pair((untranslate_term_nboyer((L1127.car))), null))); 3536727e995b7bba3c57fb1e5c156d386ca11894f781v (tail1131 = (tail1131.cdr)); 3537727e995b7bba3c57fb1e5c156d386ca11894f781v (L1127 = (L1127.cdr)); 3538727e995b7bba3c57fb1e5c156d386ca11894f781v } 3539727e995b7bba3c57fb1e5c156d386ca11894f781v } 3540727e995b7bba3c57fb1e5c156d386ca11894f781v (optrOpnd = (falseHead1130.cdr)); 3541727e995b7bba3c57fb1e5c156d386ca11894f781v return (new sc_Pair(((symbol_record = (term.car)), (symbol_record[(0)])), optrOpnd)); 3542727e995b7bba3c57fb1e5c156d386ca11894f781v } 3543727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3544727e995b7bba3c57fb1e5c156d386ca11894f781v BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer = function(sym) { 3545727e995b7bba3c57fb1e5c156d386ca11894f781v var r; 3546727e995b7bba3c57fb1e5c156d386ca11894f781v var x; 3547727e995b7bba3c57fb1e5c156d386ca11894f781v 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))); 3548727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3549727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null); 3550727e995b7bba3c57fb1e5c156d386ca11894f781v translate_alist_nboyer = function(alist) { 3551727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_alist_6; 3552727e995b7bba3c57fb1e5c156d386ca11894f781v var term; 3553727e995b7bba3c57fb1e5c156d386ca11894f781v 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)))))))))); 3554727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3555727e995b7bba3c57fb1e5c156d386ca11894f781v apply_subst_nboyer = function(alist, term) { 3556727e995b7bba3c57fb1e5c156d386ca11894f781v var lst; 3557727e995b7bba3c57fb1e5c156d386ca11894f781v var temp_temp; 3558727e995b7bba3c57fb1e5c156d386ca11894f781v 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)))))))))); 3559727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3560727e995b7bba3c57fb1e5c156d386ca11894f781v apply_subst_lst_nboyer = function(alist, lst) { 3561727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_lst_7; 3562727e995b7bba3c57fb1e5c156d386ca11894f781v 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)))))))))); 3563727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3564727e995b7bba3c57fb1e5c156d386ca11894f781v tautologyp_nboyer = function(sc_x_11, true_lst, false_lst) { 3565727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp1125; 3566727e995b7bba3c57fb1e5c156d386ca11894f781v var x; 3567727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp1126; 3568727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_x_8; 3569727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_tmp1125_9; 3570727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_tmp1126_10; 3571727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_x_11; 3572727e995b7bba3c57fb1e5c156d386ca11894f781v var true_lst; 3573727e995b7bba3c57fb1e5c156d386ca11894f781v var false_lst; 3574727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 3575727e995b7bba3c57fb1e5c156d386ca11894f781v 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)) 3576727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 3577727e995b7bba3c57fb1e5c156d386ca11894f781v else 3578727e995b7bba3c57fb1e5c156d386ca11894f781v 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)) 3579727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3580727e995b7bba3c57fb1e5c156d386ca11894f781v else 3581727e995b7bba3c57fb1e5c156d386ca11894f781v if (!(sc_x_11 instanceof sc_Pair)) 3582727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3583727e995b7bba3c57fb1e5c156d386ca11894f781v else 3584727e995b7bba3c57fb1e5c156d386ca11894f781v if (((sc_x_11.car)===if_constructor_nboyer)) 3585727e995b7bba3c57fb1e5c156d386ca11894f781v 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)) 3586727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_x_11 = (sc_x_11.cdr.cdr.car)); 3587727e995b7bba3c57fb1e5c156d386ca11894f781v else 3588727e995b7bba3c57fb1e5c156d386ca11894f781v 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)) 3589727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car)); 3590727e995b7bba3c57fb1e5c156d386ca11894f781v else 3591727e995b7bba3c57fb1e5c156d386ca11894f781v if (((tautologyp_nboyer((sc_x_11.cdr.cdr.car), (new sc_Pair((sc_x_11.cdr.car), true_lst)), false_lst))!== false)) 3592727e995b7bba3c57fb1e5c156d386ca11894f781v { 3593727e995b7bba3c57fb1e5c156d386ca11894f781v (false_lst = (new sc_Pair((sc_x_11.cdr.car), false_lst))); 3594727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car)); 3595727e995b7bba3c57fb1e5c156d386ca11894f781v } 3596727e995b7bba3c57fb1e5c156d386ca11894f781v else 3597727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3598727e995b7bba3c57fb1e5c156d386ca11894f781v else 3599727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3600727e995b7bba3c57fb1e5c156d386ca11894f781v } 3601727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3602727e995b7bba3c57fb1e5c156d386ca11894f781v (if_constructor_nboyer = "\u1E9C*"); 3603727e995b7bba3c57fb1e5c156d386ca11894f781v (rewrite_count_nboyer = (0)); 3604727e995b7bba3c57fb1e5c156d386ca11894f781v rewrite_nboyer = function(term) { 3605727e995b7bba3c57fb1e5c156d386ca11894f781v var term2; 3606727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_term_12; 3607727e995b7bba3c57fb1e5c156d386ca11894f781v var lst; 3608727e995b7bba3c57fb1e5c156d386ca11894f781v var symbol_record; 3609727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_lst_13; 3610727e995b7bba3c57fb1e5c156d386ca11894f781v { 3611727e995b7bba3c57fb1e5c156d386ca11894f781v (++rewrite_count_nboyer); 3612727e995b7bba3c57fb1e5c156d386ca11894f781v if (!(term instanceof sc_Pair)) 3613727e995b7bba3c57fb1e5c156d386ca11894f781v return term; 3614727e995b7bba3c57fb1e5c156d386ca11894f781v else 3615727e995b7bba3c57fb1e5c156d386ca11894f781v { 3616727e995b7bba3c57fb1e5c156d386ca11894f781v (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)))))))))); 3617727e995b7bba3c57fb1e5c156d386ca11894f781v (lst = ((symbol_record = (term.car)), (symbol_record[(1)]))); 3618727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 3619727e995b7bba3c57fb1e5c156d386ca11894f781v if ((lst === null)) 3620727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_term_12; 3621727e995b7bba3c57fb1e5c156d386ca11894f781v else 3622727e995b7bba3c57fb1e5c156d386ca11894f781v if ((((term2 = ((lst.car).cdr.car)), (unify_subst_nboyer = null), (one_way_unify1_nboyer(sc_term_12, term2)))!== false)) 3623727e995b7bba3c57fb1e5c156d386ca11894f781v return (rewrite_nboyer((apply_subst_nboyer(unify_subst_nboyer, ((lst.car).cdr.cdr.car))))); 3624727e995b7bba3c57fb1e5c156d386ca11894f781v else 3625727e995b7bba3c57fb1e5c156d386ca11894f781v (lst = (lst.cdr)); 3626727e995b7bba3c57fb1e5c156d386ca11894f781v } 3627727e995b7bba3c57fb1e5c156d386ca11894f781v } 3628727e995b7bba3c57fb1e5c156d386ca11894f781v } 3629727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3630727e995b7bba3c57fb1e5c156d386ca11894f781v rewrite_args_nboyer = function(lst) { 3631727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_lst_14; 3632727e995b7bba3c57fb1e5c156d386ca11894f781v 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)))))))))); 3633727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3634727e995b7bba3c57fb1e5c156d386ca11894f781v (unify_subst_nboyer = "\u1E9C*"); 3635727e995b7bba3c57fb1e5c156d386ca11894f781v one_way_unify1_nboyer = function(term1, term2) { 3636727e995b7bba3c57fb1e5c156d386ca11894f781v var lst1; 3637727e995b7bba3c57fb1e5c156d386ca11894f781v var lst2; 3638727e995b7bba3c57fb1e5c156d386ca11894f781v var temp_temp; 3639727e995b7bba3c57fb1e5c156d386ca11894f781v if (!(term2 instanceof sc_Pair)) 3640727e995b7bba3c57fb1e5c156d386ca11894f781v { 3641727e995b7bba3c57fb1e5c156d386ca11894f781v (temp_temp = (sc_assq(term2, unify_subst_nboyer))); 3642727e995b7bba3c57fb1e5c156d386ca11894f781v if ((temp_temp!== false)) 3643727e995b7bba3c57fb1e5c156d386ca11894f781v return (is_term_equal_nboyer(term1, (temp_temp.cdr))); 3644727e995b7bba3c57fb1e5c156d386ca11894f781v else 3645727e995b7bba3c57fb1e5c156d386ca11894f781v if ((sc_isNumber(term2))) 3646727e995b7bba3c57fb1e5c156d386ca11894f781v return (sc_isEqual(term1, term2)); 3647727e995b7bba3c57fb1e5c156d386ca11894f781v else 3648727e995b7bba3c57fb1e5c156d386ca11894f781v { 3649727e995b7bba3c57fb1e5c156d386ca11894f781v (unify_subst_nboyer = (new sc_Pair((new sc_Pair(term2, term1)), unify_subst_nboyer))); 3650727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 3651727e995b7bba3c57fb1e5c156d386ca11894f781v } 3652727e995b7bba3c57fb1e5c156d386ca11894f781v } 3653727e995b7bba3c57fb1e5c156d386ca11894f781v else 3654727e995b7bba3c57fb1e5c156d386ca11894f781v if (!(term1 instanceof sc_Pair)) 3655727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3656727e995b7bba3c57fb1e5c156d386ca11894f781v else 3657727e995b7bba3c57fb1e5c156d386ca11894f781v if (((term1.car)===(term2.car))) 3658727e995b7bba3c57fb1e5c156d386ca11894f781v { 3659727e995b7bba3c57fb1e5c156d386ca11894f781v (lst1 = (term1.cdr)); 3660727e995b7bba3c57fb1e5c156d386ca11894f781v (lst2 = (term2.cdr)); 3661727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 3662727e995b7bba3c57fb1e5c156d386ca11894f781v if ((lst1 === null)) 3663727e995b7bba3c57fb1e5c156d386ca11894f781v return (lst2 === null); 3664727e995b7bba3c57fb1e5c156d386ca11894f781v else 3665727e995b7bba3c57fb1e5c156d386ca11894f781v if ((lst2 === null)) 3666727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3667727e995b7bba3c57fb1e5c156d386ca11894f781v else 3668727e995b7bba3c57fb1e5c156d386ca11894f781v if (((one_way_unify1_nboyer((lst1.car), (lst2.car)))!== false)) 3669727e995b7bba3c57fb1e5c156d386ca11894f781v { 3670727e995b7bba3c57fb1e5c156d386ca11894f781v (lst1 = (lst1.cdr)); 3671727e995b7bba3c57fb1e5c156d386ca11894f781v (lst2 = (lst2.cdr)); 3672727e995b7bba3c57fb1e5c156d386ca11894f781v } 3673727e995b7bba3c57fb1e5c156d386ca11894f781v else 3674727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3675727e995b7bba3c57fb1e5c156d386ca11894f781v } 3676727e995b7bba3c57fb1e5c156d386ca11894f781v } 3677727e995b7bba3c57fb1e5c156d386ca11894f781v else 3678727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3679727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3680727e995b7bba3c57fb1e5c156d386ca11894f781v (false_term_nboyer = "\u1E9C*"); 3681727e995b7bba3c57fb1e5c156d386ca11894f781v (true_term_nboyer = "\u1E9C*"); 3682727e995b7bba3c57fb1e5c156d386ca11894f781v trans_of_implies1_nboyer = function(n) { 3683727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_n_15; 3684727e995b7bba3c57fb1e5c156d386ca11894f781v 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))))))))))); 3685727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3686727e995b7bba3c57fb1e5c156d386ca11894f781v is_term_equal_nboyer = function(x, y) { 3687727e995b7bba3c57fb1e5c156d386ca11894f781v var lst1; 3688727e995b7bba3c57fb1e5c156d386ca11894f781v var lst2; 3689727e995b7bba3c57fb1e5c156d386ca11894f781v var r2; 3690727e995b7bba3c57fb1e5c156d386ca11894f781v var r1; 3691727e995b7bba3c57fb1e5c156d386ca11894f781v if ((x instanceof sc_Pair)) 3692727e995b7bba3c57fb1e5c156d386ca11894f781v if ((y instanceof sc_Pair)) 3693727e995b7bba3c57fb1e5c156d386ca11894f781v if ((((r1 = (x.car)), (r2 = (y.car)), (r1===r2))!== false)) 3694727e995b7bba3c57fb1e5c156d386ca11894f781v { 3695727e995b7bba3c57fb1e5c156d386ca11894f781v (lst1 = (x.cdr)); 3696727e995b7bba3c57fb1e5c156d386ca11894f781v (lst2 = (y.cdr)); 3697727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 3698727e995b7bba3c57fb1e5c156d386ca11894f781v if ((lst1 === null)) 3699727e995b7bba3c57fb1e5c156d386ca11894f781v return (lst2 === null); 3700727e995b7bba3c57fb1e5c156d386ca11894f781v else 3701727e995b7bba3c57fb1e5c156d386ca11894f781v if ((lst2 === null)) 3702727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3703727e995b7bba3c57fb1e5c156d386ca11894f781v else 3704727e995b7bba3c57fb1e5c156d386ca11894f781v if (((is_term_equal_nboyer((lst1.car), (lst2.car)))!== false)) 3705727e995b7bba3c57fb1e5c156d386ca11894f781v { 3706727e995b7bba3c57fb1e5c156d386ca11894f781v (lst1 = (lst1.cdr)); 3707727e995b7bba3c57fb1e5c156d386ca11894f781v (lst2 = (lst2.cdr)); 3708727e995b7bba3c57fb1e5c156d386ca11894f781v } 3709727e995b7bba3c57fb1e5c156d386ca11894f781v else 3710727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3711727e995b7bba3c57fb1e5c156d386ca11894f781v } 3712727e995b7bba3c57fb1e5c156d386ca11894f781v } 3713727e995b7bba3c57fb1e5c156d386ca11894f781v else 3714727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3715727e995b7bba3c57fb1e5c156d386ca11894f781v else 3716727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3717727e995b7bba3c57fb1e5c156d386ca11894f781v else 3718727e995b7bba3c57fb1e5c156d386ca11894f781v return (sc_isEqual(x, y)); 3719727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3720727e995b7bba3c57fb1e5c156d386ca11894f781v is_term_member_nboyer = function(x, lst) { 3721727e995b7bba3c57fb1e5c156d386ca11894f781v var x; 3722727e995b7bba3c57fb1e5c156d386ca11894f781v var lst; 3723727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 3724727e995b7bba3c57fb1e5c156d386ca11894f781v if ((lst === null)) 3725727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3726727e995b7bba3c57fb1e5c156d386ca11894f781v else 3727727e995b7bba3c57fb1e5c156d386ca11894f781v if (((is_term_equal_nboyer(x, (lst.car)))!== false)) 3728727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 3729727e995b7bba3c57fb1e5c156d386ca11894f781v else 3730727e995b7bba3c57fb1e5c156d386ca11894f781v (lst = (lst.cdr)); 3731727e995b7bba3c57fb1e5c156d386ca11894f781v } 3732727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3733727e995b7bba3c57fb1e5c156d386ca11894f781v BgL_setupzd2boyerzd2 = function() { 3734727e995b7bba3c57fb1e5c156d386ca11894f781v var symbol_record; 3735727e995b7bba3c57fb1e5c156d386ca11894f781v var value; 3736727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_symbolzd2record_16zd2; 3737727e995b7bba3c57fb1e5c156d386ca11894f781v var sym; 3738727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_sym_17; 3739727e995b7bba3c57fb1e5c156d386ca11894f781v var term; 3740727e995b7bba3c57fb1e5c156d386ca11894f781v var lst; 3741727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_term_18; 3742727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_term_19; 3743727e995b7bba3c57fb1e5c156d386ca11894f781v { 3744727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null); 3745727e995b7bba3c57fb1e5c156d386ca11894f781v (if_constructor_nboyer = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer("\u1E9Cif"))); 3746727e995b7bba3c57fb1e5c156d386ca11894f781v (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)))))))); 3747727e995b7bba3c57fb1e5c156d386ca11894f781v (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)))))))); 3748727e995b7bba3c57fb1e5c156d386ca11894f781v (lst = sc_const_3_nboyer); 3749727e995b7bba3c57fb1e5c156d386ca11894f781v while (!(lst === null)) { 3750727e995b7bba3c57fb1e5c156d386ca11894f781v { 3751727e995b7bba3c57fb1e5c156d386ca11894f781v (term = (lst.car)); 3752727e995b7bba3c57fb1e5c156d386ca11894f781v if (((term instanceof sc_Pair)&&(((term.car)==="\u1E9Cequal")&&((term.cdr.car) instanceof sc_Pair)))) 3753727e995b7bba3c57fb1e5c156d386ca11894f781v { 3754727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_sym_17 = ((term.cdr.car).car)); 3755727e995b7bba3c57fb1e5c156d386ca11894f781v (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)]))))); 3756727e995b7bba3c57fb1e5c156d386ca11894f781v (symbol_record = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer(sc_sym_17))); 3757727e995b7bba3c57fb1e5c156d386ca11894f781v (symbol_record[(1)] = value); 3758727e995b7bba3c57fb1e5c156d386ca11894f781v } 3759727e995b7bba3c57fb1e5c156d386ca11894f781v else 3760727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_error("ADD-LEMMA did not like term: ", term)); 3761727e995b7bba3c57fb1e5c156d386ca11894f781v (lst = (lst.cdr)); 3762727e995b7bba3c57fb1e5c156d386ca11894f781v } 3763727e995b7bba3c57fb1e5c156d386ca11894f781v } 3764727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 3765727e995b7bba3c57fb1e5c156d386ca11894f781v } 3766727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3767727e995b7bba3c57fb1e5c156d386ca11894f781v BgL_testzd2boyerzd2 = function(n) { 3768727e995b7bba3c57fb1e5c156d386ca11894f781v var optrOpnd; 3769727e995b7bba3c57fb1e5c156d386ca11894f781v var term; 3770727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_n_20; 3771727e995b7bba3c57fb1e5c156d386ca11894f781v var answer; 3772727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_term_21; 3773727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_term_22; 3774727e995b7bba3c57fb1e5c156d386ca11894f781v { 3775727e995b7bba3c57fb1e5c156d386ca11894f781v (rewrite_count_nboyer = (0)); 3776727e995b7bba3c57fb1e5c156d386ca11894f781v (term = sc_const_4_nboyer); 3777727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_n_20 = n); 3778727e995b7bba3c57fb1e5c156d386ca11894f781v while (!(sc_n_20=== 0)) { 3779727e995b7bba3c57fb1e5c156d386ca11894f781v { 3780727e995b7bba3c57fb1e5c156d386ca11894f781v (term = (sc_list("\u1E9Cor", term, (new sc_Pair("\u1E9Cf",null))))); 3781727e995b7bba3c57fb1e5c156d386ca11894f781v (--sc_n_20); 3782727e995b7bba3c57fb1e5c156d386ca11894f781v } 3783727e995b7bba3c57fb1e5c156d386ca11894f781v } 3784727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_term_22 = term); 3785727e995b7bba3c57fb1e5c156d386ca11894f781v if (!(sc_term_22 instanceof sc_Pair)) 3786727e995b7bba3c57fb1e5c156d386ca11894f781v (optrOpnd = sc_term_22); 3787727e995b7bba3c57fb1e5c156d386ca11894f781v else 3788727e995b7bba3c57fb1e5c156d386ca11894f781v (optrOpnd = (new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_22.car))), (translate_args_nboyer((sc_term_22.cdr)))))); 3789727e995b7bba3c57fb1e5c156d386ca11894f781v (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))); 3790727e995b7bba3c57fb1e5c156d386ca11894f781v (answer = (tautologyp_nboyer((rewrite_nboyer(sc_term_21)), null, null))); 3791727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_write(rewrite_count_nboyer)); 3792727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_display(" rewrites")); 3793727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_newline()); 3794727e995b7bba3c57fb1e5c156d386ca11894f781v if ((answer!== false)) 3795727e995b7bba3c57fb1e5c156d386ca11894f781v return rewrite_count_nboyer; 3796727e995b7bba3c57fb1e5c156d386ca11894f781v else 3797727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3798727e995b7bba3c57fb1e5c156d386ca11894f781v } 3799727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3800727e995b7bba3c57fb1e5c156d386ca11894f781v} 3801727e995b7bba3c57fb1e5c156d386ca11894f781v/* Exported Variables */ 3802727e995b7bba3c57fb1e5c156d386ca11894f781vvar BgL_parsezd2ze3nbzd2treesze3; 3803727e995b7bba3c57fb1e5c156d386ca11894f781vvar BgL_earleyzd2benchmarkzd2; 3804727e995b7bba3c57fb1e5c156d386ca11894f781vvar BgL_parsezd2ze3parsedzf3zc2; 3805727e995b7bba3c57fb1e5c156d386ca11894f781vvar test; 3806727e995b7bba3c57fb1e5c156d386ca11894f781vvar BgL_parsezd2ze3treesz31; 3807727e995b7bba3c57fb1e5c156d386ca11894f781vvar BgL_makezd2parserzd2; 3808727e995b7bba3c57fb1e5c156d386ca11894f781v/* End Exports */ 3809727e995b7bba3c57fb1e5c156d386ca11894f781v 3810727e995b7bba3c57fb1e5c156d386ca11894f781vvar const_earley; 3811727e995b7bba3c57fb1e5c156d386ca11894f781v{ 3812727e995b7bba3c57fb1e5c156d386ca11894f781v (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))); 3813727e995b7bba3c57fb1e5c156d386ca11894f781v BgL_makezd2parserzd2 = function(grammar, lexer) { 3814727e995b7bba3c57fb1e5c156d386ca11894f781v var i; 3815727e995b7bba3c57fb1e5c156d386ca11894f781v var parser_descr; 3816727e995b7bba3c57fb1e5c156d386ca11894f781v var def_loop; 3817727e995b7bba3c57fb1e5c156d386ca11894f781v var nb_nts; 3818727e995b7bba3c57fb1e5c156d386ca11894f781v var names; 3819727e995b7bba3c57fb1e5c156d386ca11894f781v var steps; 3820727e995b7bba3c57fb1e5c156d386ca11894f781v var predictors; 3821727e995b7bba3c57fb1e5c156d386ca11894f781v var enders; 3822727e995b7bba3c57fb1e5c156d386ca11894f781v var starters; 3823727e995b7bba3c57fb1e5c156d386ca11894f781v var nts; 3824727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_names_1; 3825727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_steps_2; 3826727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_predictors_3; 3827727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_enders_4; 3828727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_starters_5; 3829727e995b7bba3c57fb1e5c156d386ca11894f781v var nb_confs; 3830727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_defzd2loop_6zd2; 3831727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_nbzd2nts_7zd2; 3832727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_nts_8; 3833727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_defzd2loop_9zd2; 3834727e995b7bba3c57fb1e5c156d386ca11894f781v var ind; 3835727e995b7bba3c57fb1e5c156d386ca11894f781v { 3836727e995b7bba3c57fb1e5c156d386ca11894f781v ind = function(nt, sc_nts_10) { 3837727e995b7bba3c57fb1e5c156d386ca11894f781v var i; 3838727e995b7bba3c57fb1e5c156d386ca11894f781v { 3839727e995b7bba3c57fb1e5c156d386ca11894f781v (i = ((sc_nts_10.length)-(1))); 3840727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 3841727e995b7bba3c57fb1e5c156d386ca11894f781v if ((i>=(0))) 3842727e995b7bba3c57fb1e5c156d386ca11894f781v if ((sc_isEqual((sc_nts_10[i]), nt))) 3843727e995b7bba3c57fb1e5c156d386ca11894f781v return i; 3844727e995b7bba3c57fb1e5c156d386ca11894f781v else 3845727e995b7bba3c57fb1e5c156d386ca11894f781v (--i); 3846727e995b7bba3c57fb1e5c156d386ca11894f781v else 3847727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 3848727e995b7bba3c57fb1e5c156d386ca11894f781v } 3849727e995b7bba3c57fb1e5c156d386ca11894f781v } 3850727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3851727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_nts_8 = ((BgL_sc_defzd2loop_9zd2 = function(defs, sc_nts_11) { 3852727e995b7bba3c57fb1e5c156d386ca11894f781v var rule_loop; 3853727e995b7bba3c57fb1e5c156d386ca11894f781v var head; 3854727e995b7bba3c57fb1e5c156d386ca11894f781v var def; 3855727e995b7bba3c57fb1e5c156d386ca11894f781v return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, sc_nts_12) { 3856727e995b7bba3c57fb1e5c156d386ca11894f781v var nt; 3857727e995b7bba3c57fb1e5c156d386ca11894f781v var l; 3858727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_nts_13; 3859727e995b7bba3c57fb1e5c156d386ca11894f781v var rule; 3860727e995b7bba3c57fb1e5c156d386ca11894f781v if ((rules instanceof sc_Pair)) 3861727e995b7bba3c57fb1e5c156d386ca11894f781v { 3862727e995b7bba3c57fb1e5c156d386ca11894f781v (rule = (rules.car)); 3863727e995b7bba3c57fb1e5c156d386ca11894f781v (l = rule); 3864727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_nts_13 = sc_nts_12); 3865727e995b7bba3c57fb1e5c156d386ca11894f781v while ((l instanceof sc_Pair)) { 3866727e995b7bba3c57fb1e5c156d386ca11894f781v { 3867727e995b7bba3c57fb1e5c156d386ca11894f781v (nt = (l.car)); 3868727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (l.cdr)); 3869727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_nts_13 = (((sc_member(nt, sc_nts_13))!== false)?sc_nts_13:(new sc_Pair(nt, sc_nts_13)))); 3870727e995b7bba3c57fb1e5c156d386ca11894f781v } 3871727e995b7bba3c57fb1e5c156d386ca11894f781v } 3872727e995b7bba3c57fb1e5c156d386ca11894f781v return (rule_loop((rules.cdr), sc_nts_13)); 3873727e995b7bba3c57fb1e5c156d386ca11894f781v } 3874727e995b7bba3c57fb1e5c156d386ca11894f781v else 3875727e995b7bba3c57fb1e5c156d386ca11894f781v return (BgL_sc_defzd2loop_9zd2((defs.cdr), sc_nts_12)); 3876727e995b7bba3c57fb1e5c156d386ca11894f781v }), (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))))); 3877727e995b7bba3c57fb1e5c156d386ca11894f781v }), (BgL_sc_defzd2loop_9zd2(grammar, null)))); 3878727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_nbzd2nts_7zd2 = (sc_nts_8.length)); 3879727e995b7bba3c57fb1e5c156d386ca11894f781v (nb_confs = (((BgL_sc_defzd2loop_6zd2 = function(defs, BgL_sc_nbzd2confs_14zd2) { 3880727e995b7bba3c57fb1e5c156d386ca11894f781v var rule_loop; 3881727e995b7bba3c57fb1e5c156d386ca11894f781v var def; 3882727e995b7bba3c57fb1e5c156d386ca11894f781v return ((defs instanceof sc_Pair)?((def = (defs.car)), (rule_loop = function(rules, BgL_sc_nbzd2confs_15zd2) { 3883727e995b7bba3c57fb1e5c156d386ca11894f781v var l; 3884727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_nbzd2confs_16zd2; 3885727e995b7bba3c57fb1e5c156d386ca11894f781v var rule; 3886727e995b7bba3c57fb1e5c156d386ca11894f781v if ((rules instanceof sc_Pair)) 3887727e995b7bba3c57fb1e5c156d386ca11894f781v { 3888727e995b7bba3c57fb1e5c156d386ca11894f781v (rule = (rules.car)); 3889727e995b7bba3c57fb1e5c156d386ca11894f781v (l = rule); 3890727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_nbzd2confs_16zd2 = BgL_sc_nbzd2confs_15zd2); 3891727e995b7bba3c57fb1e5c156d386ca11894f781v while ((l instanceof sc_Pair)) { 3892727e995b7bba3c57fb1e5c156d386ca11894f781v { 3893727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (l.cdr)); 3894727e995b7bba3c57fb1e5c156d386ca11894f781v (++BgL_sc_nbzd2confs_16zd2); 3895727e995b7bba3c57fb1e5c156d386ca11894f781v } 3896727e995b7bba3c57fb1e5c156d386ca11894f781v } 3897727e995b7bba3c57fb1e5c156d386ca11894f781v return (rule_loop((rules.cdr), (BgL_sc_nbzd2confs_16zd2+(1)))); 3898727e995b7bba3c57fb1e5c156d386ca11894f781v } 3899727e995b7bba3c57fb1e5c156d386ca11894f781v else 3900727e995b7bba3c57fb1e5c156d386ca11894f781v return (BgL_sc_defzd2loop_6zd2((defs.cdr), BgL_sc_nbzd2confs_15zd2)); 3901727e995b7bba3c57fb1e5c156d386ca11894f781v }), (rule_loop((def.cdr), BgL_sc_nbzd2confs_14zd2))):BgL_sc_nbzd2confs_14zd2); 3902727e995b7bba3c57fb1e5c156d386ca11894f781v }), (BgL_sc_defzd2loop_6zd2(grammar, (0))))+BgL_sc_nbzd2nts_7zd2)); 3903727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_starters_5 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null))); 3904727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_enders_4 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null))); 3905727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_predictors_3 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null))); 3906727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_steps_2 = (sc_makeVector(nb_confs, false))); 3907727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_names_1 = (sc_makeVector(nb_confs, false))); 3908727e995b7bba3c57fb1e5c156d386ca11894f781v (nts = sc_nts_8); 3909727e995b7bba3c57fb1e5c156d386ca11894f781v (starters = sc_starters_5); 3910727e995b7bba3c57fb1e5c156d386ca11894f781v (enders = sc_enders_4); 3911727e995b7bba3c57fb1e5c156d386ca11894f781v (predictors = sc_predictors_3); 3912727e995b7bba3c57fb1e5c156d386ca11894f781v (steps = sc_steps_2); 3913727e995b7bba3c57fb1e5c156d386ca11894f781v (names = sc_names_1); 3914727e995b7bba3c57fb1e5c156d386ca11894f781v (nb_nts = (sc_nts_8.length)); 3915727e995b7bba3c57fb1e5c156d386ca11894f781v (i = (nb_nts-(1))); 3916727e995b7bba3c57fb1e5c156d386ca11894f781v while ((i>=(0))) { 3917727e995b7bba3c57fb1e5c156d386ca11894f781v { 3918727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_steps_2[i] = (i-nb_nts)); 3919727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_names_1[i] = (sc_list((sc_nts_8[i]), (0)))); 3920727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_enders_4[i] = (sc_list(i))); 3921727e995b7bba3c57fb1e5c156d386ca11894f781v (--i); 3922727e995b7bba3c57fb1e5c156d386ca11894f781v } 3923727e995b7bba3c57fb1e5c156d386ca11894f781v } 3924727e995b7bba3c57fb1e5c156d386ca11894f781v def_loop = function(defs, conf) { 3925727e995b7bba3c57fb1e5c156d386ca11894f781v var rule_loop; 3926727e995b7bba3c57fb1e5c156d386ca11894f781v var head; 3927727e995b7bba3c57fb1e5c156d386ca11894f781v var def; 3928727e995b7bba3c57fb1e5c156d386ca11894f781v return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, conf, rule_num) { 3929727e995b7bba3c57fb1e5c156d386ca11894f781v var i; 3930727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_i_17; 3931727e995b7bba3c57fb1e5c156d386ca11894f781v var nt; 3932727e995b7bba3c57fb1e5c156d386ca11894f781v var l; 3933727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_conf_18; 3934727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_i_19; 3935727e995b7bba3c57fb1e5c156d386ca11894f781v var rule; 3936727e995b7bba3c57fb1e5c156d386ca11894f781v if ((rules instanceof sc_Pair)) 3937727e995b7bba3c57fb1e5c156d386ca11894f781v { 3938727e995b7bba3c57fb1e5c156d386ca11894f781v (rule = (rules.car)); 3939727e995b7bba3c57fb1e5c156d386ca11894f781v (names[conf] = (sc_list(head, rule_num))); 3940727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_i_19 = (ind(head, nts))); 3941727e995b7bba3c57fb1e5c156d386ca11894f781v (starters[sc_i_19] = (new sc_Pair(conf, (starters[sc_i_19])))); 3942727e995b7bba3c57fb1e5c156d386ca11894f781v (l = rule); 3943727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_conf_18 = conf); 3944727e995b7bba3c57fb1e5c156d386ca11894f781v while ((l instanceof sc_Pair)) { 3945727e995b7bba3c57fb1e5c156d386ca11894f781v { 3946727e995b7bba3c57fb1e5c156d386ca11894f781v (nt = (l.car)); 3947727e995b7bba3c57fb1e5c156d386ca11894f781v (steps[sc_conf_18] = (ind(nt, nts))); 3948727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_i_17 = (ind(nt, nts))); 3949727e995b7bba3c57fb1e5c156d386ca11894f781v (predictors[sc_i_17] = (new sc_Pair(sc_conf_18, (predictors[sc_i_17])))); 3950727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (l.cdr)); 3951727e995b7bba3c57fb1e5c156d386ca11894f781v (++sc_conf_18); 3952727e995b7bba3c57fb1e5c156d386ca11894f781v } 3953727e995b7bba3c57fb1e5c156d386ca11894f781v } 3954727e995b7bba3c57fb1e5c156d386ca11894f781v (steps[sc_conf_18] = ((ind(head, nts))-nb_nts)); 3955727e995b7bba3c57fb1e5c156d386ca11894f781v (i = (ind(head, nts))); 3956727e995b7bba3c57fb1e5c156d386ca11894f781v (enders[i] = (new sc_Pair(sc_conf_18, (enders[i])))); 3957727e995b7bba3c57fb1e5c156d386ca11894f781v return (rule_loop((rules.cdr), (sc_conf_18+(1)), (rule_num+(1)))); 3958727e995b7bba3c57fb1e5c156d386ca11894f781v } 3959727e995b7bba3c57fb1e5c156d386ca11894f781v else 3960727e995b7bba3c57fb1e5c156d386ca11894f781v return (def_loop((defs.cdr), conf)); 3961727e995b7bba3c57fb1e5c156d386ca11894f781v }), (rule_loop((def.cdr), conf, (1)))):undefined); 3962727e995b7bba3c57fb1e5c156d386ca11894f781v }; 3963727e995b7bba3c57fb1e5c156d386ca11894f781v (def_loop(grammar, (sc_nts_8.length))); 3964727e995b7bba3c57fb1e5c156d386ca11894f781v (parser_descr = [lexer, sc_nts_8, sc_starters_5, sc_enders_4, sc_predictors_3, sc_steps_2, sc_names_1]); 3965727e995b7bba3c57fb1e5c156d386ca11894f781v return function(input) { 3966727e995b7bba3c57fb1e5c156d386ca11894f781v var optrOpnd; 3967727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_optrOpnd_20; 3968727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_optrOpnd_21; 3969727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_optrOpnd_22; 3970727e995b7bba3c57fb1e5c156d386ca11894f781v var loop1; 3971727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_stateza2_23za2; 3972727e995b7bba3c57fb1e5c156d386ca11894f781v var toks; 3973727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_nbzd2nts_24zd2; 3974727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_steps_25; 3975727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_enders_26; 3976727e995b7bba3c57fb1e5c156d386ca11894f781v var state_num; 3977727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_statesza2_27za2; 3978727e995b7bba3c57fb1e5c156d386ca11894f781v var states; 3979727e995b7bba3c57fb1e5c156d386ca11894f781v var i; 3980727e995b7bba3c57fb1e5c156d386ca11894f781v var conf; 3981727e995b7bba3c57fb1e5c156d386ca11894f781v var l; 3982727e995b7bba3c57fb1e5c156d386ca11894f781v var tok_nts; 3983727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_i_28; 3984727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_i_29; 3985727e995b7bba3c57fb1e5c156d386ca11894f781v var l1; 3986727e995b7bba3c57fb1e5c156d386ca11894f781v var l2; 3987727e995b7bba3c57fb1e5c156d386ca11894f781v var tok; 3988727e995b7bba3c57fb1e5c156d386ca11894f781v var tail1129; 3989727e995b7bba3c57fb1e5c156d386ca11894f781v var L1125; 3990727e995b7bba3c57fb1e5c156d386ca11894f781v var goal_enders; 3991727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_statesza2_30za2; 3992727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_nbzd2nts_31zd2; 3993727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_nbzd2confs_32zd2; 3994727e995b7bba3c57fb1e5c156d386ca11894f781v var nb_toks; 3995727e995b7bba3c57fb1e5c156d386ca11894f781v var goal_starters; 3996727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_states_33; 3997727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_nbzd2confs_34zd2; 3998727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_nbzd2toks_35zd2; 3999727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_toks_36; 4000727e995b7bba3c57fb1e5c156d386ca11894f781v var falseHead1128; 4001727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_names_37; 4002727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_steps_38; 4003727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_predictors_39; 4004727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_enders_40; 4005727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_starters_41; 4006727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_nts_42; 4007727e995b7bba3c57fb1e5c156d386ca11894f781v var lexer; 4008727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_ind_43; 4009727e995b7bba3c57fb1e5c156d386ca11894f781v var make_states; 4010727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_confzd2setzd2getza2_44za2; 4011727e995b7bba3c57fb1e5c156d386ca11894f781v var conf_set_merge_new_bang; 4012727e995b7bba3c57fb1e5c156d386ca11894f781v var conf_set_adjoin; 4013727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_confzd2setzd2adjoinza2_45za2; 4014727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_confzd2setzd2adjoinza2za2_46z00; 4015727e995b7bba3c57fb1e5c156d386ca11894f781v var conf_set_union; 4016727e995b7bba3c57fb1e5c156d386ca11894f781v var forw; 4017727e995b7bba3c57fb1e5c156d386ca11894f781v var is_parsed; 4018727e995b7bba3c57fb1e5c156d386ca11894f781v var deriv_trees; 4019727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_derivzd2treesza2_47z70; 4020727e995b7bba3c57fb1e5c156d386ca11894f781v var nb_deriv_trees; 4021727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_nbzd2derivzd2treesza2_48za2; 4022727e995b7bba3c57fb1e5c156d386ca11894f781v { 4023727e995b7bba3c57fb1e5c156d386ca11894f781v sc_ind_43 = function(nt, sc_nts_49) { 4024727e995b7bba3c57fb1e5c156d386ca11894f781v var i; 4025727e995b7bba3c57fb1e5c156d386ca11894f781v { 4026727e995b7bba3c57fb1e5c156d386ca11894f781v (i = ((sc_nts_49.length)-(1))); 4027727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 4028727e995b7bba3c57fb1e5c156d386ca11894f781v if ((i>=(0))) 4029727e995b7bba3c57fb1e5c156d386ca11894f781v if ((sc_isEqual((sc_nts_49[i]), nt))) 4030727e995b7bba3c57fb1e5c156d386ca11894f781v return i; 4031727e995b7bba3c57fb1e5c156d386ca11894f781v else 4032727e995b7bba3c57fb1e5c156d386ca11894f781v (--i); 4033727e995b7bba3c57fb1e5c156d386ca11894f781v else 4034727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 4035727e995b7bba3c57fb1e5c156d386ca11894f781v } 4036727e995b7bba3c57fb1e5c156d386ca11894f781v } 4037727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4038727e995b7bba3c57fb1e5c156d386ca11894f781v make_states = function(BgL_sc_nbzd2toks_50zd2, BgL_sc_nbzd2confs_51zd2) { 4039727e995b7bba3c57fb1e5c156d386ca11894f781v var v; 4040727e995b7bba3c57fb1e5c156d386ca11894f781v var i; 4041727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_states_52; 4042727e995b7bba3c57fb1e5c156d386ca11894f781v { 4043727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_states_52 = (sc_makeVector((BgL_sc_nbzd2toks_50zd2+(1)), false))); 4044727e995b7bba3c57fb1e5c156d386ca11894f781v (i = BgL_sc_nbzd2toks_50zd2); 4045727e995b7bba3c57fb1e5c156d386ca11894f781v while ((i>=(0))) { 4046727e995b7bba3c57fb1e5c156d386ca11894f781v { 4047727e995b7bba3c57fb1e5c156d386ca11894f781v (v = (sc_makeVector((BgL_sc_nbzd2confs_51zd2+(1)), false))); 4048727e995b7bba3c57fb1e5c156d386ca11894f781v (v[(0)] = (-1)); 4049727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_states_52[i] = v); 4050727e995b7bba3c57fb1e5c156d386ca11894f781v (--i); 4051727e995b7bba3c57fb1e5c156d386ca11894f781v } 4052727e995b7bba3c57fb1e5c156d386ca11894f781v } 4053727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_states_52; 4054727e995b7bba3c57fb1e5c156d386ca11894f781v } 4055727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4056727e995b7bba3c57fb1e5c156d386ca11894f781v BgL_sc_confzd2setzd2getza2_44za2 = function(state, BgL_sc_statezd2num_53zd2, sc_conf_54) { 4057727e995b7bba3c57fb1e5c156d386ca11894f781v var conf_set; 4058727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_confzd2set_55zd2; 4059727e995b7bba3c57fb1e5c156d386ca11894f781v 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))); 4060727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4061727e995b7bba3c57fb1e5c156d386ca11894f781v conf_set_merge_new_bang = function(conf_set) { 4062727e995b7bba3c57fb1e5c156d386ca11894f781v return ((conf_set[((conf_set[(1)])+(5))] = (conf_set[(4)])), (conf_set[(1)] = (conf_set[(3)])), (conf_set[(3)] = (-1)), (conf_set[(4)] = (-1))); 4063727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4064727e995b7bba3c57fb1e5c156d386ca11894f781v conf_set_adjoin = function(state, conf_set, sc_conf_56, i) { 4065727e995b7bba3c57fb1e5c156d386ca11894f781v var tail; 4066727e995b7bba3c57fb1e5c156d386ca11894f781v 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)); 4067727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4068727e995b7bba3c57fb1e5c156d386ca11894f781v BgL_sc_confzd2setzd2adjoinza2_45za2 = function(sc_states_57, BgL_sc_statezd2num_58zd2, l, i) { 4069727e995b7bba3c57fb1e5c156d386ca11894f781v var conf_set; 4070727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_conf_59; 4071727e995b7bba3c57fb1e5c156d386ca11894f781v var l1; 4072727e995b7bba3c57fb1e5c156d386ca11894f781v var state; 4073727e995b7bba3c57fb1e5c156d386ca11894f781v { 4074727e995b7bba3c57fb1e5c156d386ca11894f781v (state = (sc_states_57[BgL_sc_statezd2num_58zd2])); 4075727e995b7bba3c57fb1e5c156d386ca11894f781v (l1 = l); 4076727e995b7bba3c57fb1e5c156d386ca11894f781v while ((l1 instanceof sc_Pair)) { 4077727e995b7bba3c57fb1e5c156d386ca11894f781v { 4078727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_conf_59 = (l1.car)); 4079727e995b7bba3c57fb1e5c156d386ca11894f781v (conf_set = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_58zd2, sc_conf_59))); 4080727e995b7bba3c57fb1e5c156d386ca11894f781v if (((conf_set[(i+(5))])=== false)) 4081727e995b7bba3c57fb1e5c156d386ca11894f781v { 4082727e995b7bba3c57fb1e5c156d386ca11894f781v (conf_set_adjoin(state, conf_set, sc_conf_59, i)); 4083727e995b7bba3c57fb1e5c156d386ca11894f781v (l1 = (l1.cdr)); 4084727e995b7bba3c57fb1e5c156d386ca11894f781v } 4085727e995b7bba3c57fb1e5c156d386ca11894f781v else 4086727e995b7bba3c57fb1e5c156d386ca11894f781v (l1 = (l1.cdr)); 4087727e995b7bba3c57fb1e5c156d386ca11894f781v } 4088727e995b7bba3c57fb1e5c156d386ca11894f781v } 4089727e995b7bba3c57fb1e5c156d386ca11894f781v return undefined; 4090727e995b7bba3c57fb1e5c156d386ca11894f781v } 4091727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4092727e995b7bba3c57fb1e5c156d386ca11894f781v BgL_sc_confzd2setzd2adjoinza2za2_46z00 = function(sc_states_60, BgL_sc_statesza2_61za2, BgL_sc_statezd2num_62zd2, sc_conf_63, i) { 4093727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_confzd2setza2_64z70; 4094727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_stateza2_65za2; 4095727e995b7bba3c57fb1e5c156d386ca11894f781v var conf_set; 4096727e995b7bba3c57fb1e5c156d386ca11894f781v var state; 4097727e995b7bba3c57fb1e5c156d386ca11894f781v 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)); 4098727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4099727e995b7bba3c57fb1e5c156d386ca11894f781v conf_set_union = function(state, conf_set, sc_conf_66, other_set) { 4100727e995b7bba3c57fb1e5c156d386ca11894f781v var i; 4101727e995b7bba3c57fb1e5c156d386ca11894f781v { 4102727e995b7bba3c57fb1e5c156d386ca11894f781v (i = (other_set[(2)])); 4103727e995b7bba3c57fb1e5c156d386ca11894f781v while ((i>=(0))) { 4104727e995b7bba3c57fb1e5c156d386ca11894f781v if (((conf_set[(i+(5))])=== false)) 4105727e995b7bba3c57fb1e5c156d386ca11894f781v { 4106727e995b7bba3c57fb1e5c156d386ca11894f781v (conf_set_adjoin(state, conf_set, sc_conf_66, i)); 4107727e995b7bba3c57fb1e5c156d386ca11894f781v (i = (other_set[(i+(5))])); 4108727e995b7bba3c57fb1e5c156d386ca11894f781v } 4109727e995b7bba3c57fb1e5c156d386ca11894f781v else 4110727e995b7bba3c57fb1e5c156d386ca11894f781v (i = (other_set[(i+(5))])); 4111727e995b7bba3c57fb1e5c156d386ca11894f781v } 4112727e995b7bba3c57fb1e5c156d386ca11894f781v return undefined; 4113727e995b7bba3c57fb1e5c156d386ca11894f781v } 4114727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4115727e995b7bba3c57fb1e5c156d386ca11894f781v forw = function(sc_states_67, BgL_sc_statezd2num_68zd2, sc_starters_69, sc_enders_70, sc_predictors_71, sc_steps_72, sc_nts_73) { 4116727e995b7bba3c57fb1e5c156d386ca11894f781v var next_set; 4117727e995b7bba3c57fb1e5c156d386ca11894f781v var next; 4118727e995b7bba3c57fb1e5c156d386ca11894f781v var conf_set; 4119727e995b7bba3c57fb1e5c156d386ca11894f781v var ender; 4120727e995b7bba3c57fb1e5c156d386ca11894f781v var l; 4121727e995b7bba3c57fb1e5c156d386ca11894f781v var starter_set; 4122727e995b7bba3c57fb1e5c156d386ca11894f781v var starter; 4123727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_l_74; 4124727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_loop1_75; 4125727e995b7bba3c57fb1e5c156d386ca11894f781v var head; 4126727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_confzd2set_76zd2; 4127727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_statezd2num_77zd2; 4128727e995b7bba3c57fb1e5c156d386ca11894f781v var state; 4129727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_states_78; 4130727e995b7bba3c57fb1e5c156d386ca11894f781v var preds; 4131727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_confzd2set_79zd2; 4132727e995b7bba3c57fb1e5c156d386ca11894f781v var step; 4133727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_conf_80; 4134727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_nbzd2nts_81zd2; 4135727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_state_82; 4136727e995b7bba3c57fb1e5c156d386ca11894f781v { 4137727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_state_82 = (sc_states_67[BgL_sc_statezd2num_68zd2])); 4138727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_nbzd2nts_81zd2 = (sc_nts_73.length)); 4139727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 4140727e995b7bba3c57fb1e5c156d386ca11894f781v { 4141727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_conf_80 = (sc_state_82[(0)])); 4142727e995b7bba3c57fb1e5c156d386ca11894f781v if ((sc_conf_80>=(0))) 4143727e995b7bba3c57fb1e5c156d386ca11894f781v { 4144727e995b7bba3c57fb1e5c156d386ca11894f781v (step = (sc_steps_72[sc_conf_80])); 4145727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_confzd2set_79zd2 = (sc_state_82[(sc_conf_80+(1))])); 4146727e995b7bba3c57fb1e5c156d386ca11894f781v (head = (BgL_sc_confzd2set_79zd2[(4)])); 4147727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_state_82[(0)] = (BgL_sc_confzd2set_79zd2[(0)])); 4148727e995b7bba3c57fb1e5c156d386ca11894f781v (conf_set_merge_new_bang(BgL_sc_confzd2set_79zd2)); 4149727e995b7bba3c57fb1e5c156d386ca11894f781v if ((step>=(0))) 4150727e995b7bba3c57fb1e5c156d386ca11894f781v { 4151727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_l_74 = (sc_starters_69[step])); 4152727e995b7bba3c57fb1e5c156d386ca11894f781v while ((sc_l_74 instanceof sc_Pair)) { 4153727e995b7bba3c57fb1e5c156d386ca11894f781v { 4154727e995b7bba3c57fb1e5c156d386ca11894f781v (starter = (sc_l_74.car)); 4155727e995b7bba3c57fb1e5c156d386ca11894f781v (starter_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, starter))); 4156727e995b7bba3c57fb1e5c156d386ca11894f781v if (((starter_set[(BgL_sc_statezd2num_68zd2+(5))])=== false)) 4157727e995b7bba3c57fb1e5c156d386ca11894f781v { 4158727e995b7bba3c57fb1e5c156d386ca11894f781v (conf_set_adjoin(sc_state_82, starter_set, starter, BgL_sc_statezd2num_68zd2)); 4159727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_l_74 = (sc_l_74.cdr)); 4160727e995b7bba3c57fb1e5c156d386ca11894f781v } 4161727e995b7bba3c57fb1e5c156d386ca11894f781v else 4162727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_l_74 = (sc_l_74.cdr)); 4163727e995b7bba3c57fb1e5c156d386ca11894f781v } 4164727e995b7bba3c57fb1e5c156d386ca11894f781v } 4165727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (sc_enders_70[step])); 4166727e995b7bba3c57fb1e5c156d386ca11894f781v while ((l instanceof sc_Pair)) { 4167727e995b7bba3c57fb1e5c156d386ca11894f781v { 4168727e995b7bba3c57fb1e5c156d386ca11894f781v (ender = (l.car)); 4169727e995b7bba3c57fb1e5c156d386ca11894f781v if ((((conf_set = (sc_state_82[(ender+(1))])), ((conf_set!== false)?(conf_set[(BgL_sc_statezd2num_68zd2+(5))]):false))!== false)) 4170727e995b7bba3c57fb1e5c156d386ca11894f781v { 4171727e995b7bba3c57fb1e5c156d386ca11894f781v (next = (sc_conf_80+(1))); 4172727e995b7bba3c57fb1e5c156d386ca11894f781v (next_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, next))); 4173727e995b7bba3c57fb1e5c156d386ca11894f781v (conf_set_union(sc_state_82, next_set, next, BgL_sc_confzd2set_79zd2)); 4174727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (l.cdr)); 4175727e995b7bba3c57fb1e5c156d386ca11894f781v } 4176727e995b7bba3c57fb1e5c156d386ca11894f781v else 4177727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (l.cdr)); 4178727e995b7bba3c57fb1e5c156d386ca11894f781v } 4179727e995b7bba3c57fb1e5c156d386ca11894f781v } 4180727e995b7bba3c57fb1e5c156d386ca11894f781v } 4181727e995b7bba3c57fb1e5c156d386ca11894f781v else 4182727e995b7bba3c57fb1e5c156d386ca11894f781v { 4183727e995b7bba3c57fb1e5c156d386ca11894f781v (preds = (sc_predictors_71[(step+BgL_sc_nbzd2nts_81zd2)])); 4184727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_states_78 = sc_states_67); 4185727e995b7bba3c57fb1e5c156d386ca11894f781v (state = sc_state_82); 4186727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_statezd2num_77zd2 = BgL_sc_statezd2num_68zd2); 4187727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_confzd2set_76zd2 = BgL_sc_confzd2set_79zd2); 4188727e995b7bba3c57fb1e5c156d386ca11894f781v sc_loop1_75 = function(l) { 4189727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_state_83; 4190727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_nextzd2set_84zd2; 4191727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_next_85; 4192727e995b7bba3c57fb1e5c156d386ca11894f781v var pred_set; 4193727e995b7bba3c57fb1e5c156d386ca11894f781v var i; 4194727e995b7bba3c57fb1e5c156d386ca11894f781v var pred; 4195727e995b7bba3c57fb1e5c156d386ca11894f781v if ((l instanceof sc_Pair)) 4196727e995b7bba3c57fb1e5c156d386ca11894f781v { 4197727e995b7bba3c57fb1e5c156d386ca11894f781v (pred = (l.car)); 4198727e995b7bba3c57fb1e5c156d386ca11894f781v (i = head); 4199727e995b7bba3c57fb1e5c156d386ca11894f781v while ((i>=(0))) { 4200727e995b7bba3c57fb1e5c156d386ca11894f781v { 4201727e995b7bba3c57fb1e5c156d386ca11894f781v (pred_set = ((sc_state_83 = (sc_states_78[i])), (sc_state_83[(pred+(1))]))); 4202727e995b7bba3c57fb1e5c156d386ca11894f781v if ((pred_set!== false)) 4203727e995b7bba3c57fb1e5c156d386ca11894f781v { 4204727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_next_85 = (pred+(1))); 4205727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_nextzd2set_84zd2 = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_77zd2, sc_next_85))); 4206727e995b7bba3c57fb1e5c156d386ca11894f781v (conf_set_union(state, BgL_sc_nextzd2set_84zd2, sc_next_85, pred_set)); 4207727e995b7bba3c57fb1e5c156d386ca11894f781v } 4208727e995b7bba3c57fb1e5c156d386ca11894f781v (i = (BgL_sc_confzd2set_76zd2[(i+(5))])); 4209727e995b7bba3c57fb1e5c156d386ca11894f781v } 4210727e995b7bba3c57fb1e5c156d386ca11894f781v } 4211727e995b7bba3c57fb1e5c156d386ca11894f781v return (sc_loop1_75((l.cdr))); 4212727e995b7bba3c57fb1e5c156d386ca11894f781v } 4213727e995b7bba3c57fb1e5c156d386ca11894f781v else 4214727e995b7bba3c57fb1e5c156d386ca11894f781v return undefined; 4215727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4216727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_loop1_75(preds)); 4217727e995b7bba3c57fb1e5c156d386ca11894f781v } 4218727e995b7bba3c57fb1e5c156d386ca11894f781v } 4219727e995b7bba3c57fb1e5c156d386ca11894f781v else 4220727e995b7bba3c57fb1e5c156d386ca11894f781v return undefined; 4221727e995b7bba3c57fb1e5c156d386ca11894f781v } 4222727e995b7bba3c57fb1e5c156d386ca11894f781v } 4223727e995b7bba3c57fb1e5c156d386ca11894f781v } 4224727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4225727e995b7bba3c57fb1e5c156d386ca11894f781v is_parsed = function(nt, i, j, sc_nts_86, sc_enders_87, sc_states_88) { 4226727e995b7bba3c57fb1e5c156d386ca11894f781v var conf_set; 4227727e995b7bba3c57fb1e5c156d386ca11894f781v var state; 4228727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_conf_89; 4229727e995b7bba3c57fb1e5c156d386ca11894f781v var l; 4230727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_ntza2_90za2; 4231727e995b7bba3c57fb1e5c156d386ca11894f781v { 4232727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_ntza2_90za2 = (sc_ind_43(nt, sc_nts_86))); 4233727e995b7bba3c57fb1e5c156d386ca11894f781v if ((BgL_sc_ntza2_90za2!== false)) 4234727e995b7bba3c57fb1e5c156d386ca11894f781v { 4235727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_nts_86.length); 4236727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (sc_enders_87[BgL_sc_ntza2_90za2])); 4237727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 4238727e995b7bba3c57fb1e5c156d386ca11894f781v if ((l instanceof sc_Pair)) 4239727e995b7bba3c57fb1e5c156d386ca11894f781v { 4240727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_conf_89 = (l.car)); 4241727e995b7bba3c57fb1e5c156d386ca11894f781v if ((((state = (sc_states_88[j])), (conf_set = (state[(sc_conf_89+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)) 4242727e995b7bba3c57fb1e5c156d386ca11894f781v return true; 4243727e995b7bba3c57fb1e5c156d386ca11894f781v else 4244727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (l.cdr)); 4245727e995b7bba3c57fb1e5c156d386ca11894f781v } 4246727e995b7bba3c57fb1e5c156d386ca11894f781v else 4247727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 4248727e995b7bba3c57fb1e5c156d386ca11894f781v } 4249727e995b7bba3c57fb1e5c156d386ca11894f781v } 4250727e995b7bba3c57fb1e5c156d386ca11894f781v else 4251727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 4252727e995b7bba3c57fb1e5c156d386ca11894f781v } 4253727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4254727e995b7bba3c57fb1e5c156d386ca11894f781v 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) { 4255727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_loop1_98; 4256727e995b7bba3c57fb1e5c156d386ca11894f781v var prev; 4257727e995b7bba3c57fb1e5c156d386ca11894f781v var name; 4258727e995b7bba3c57fb1e5c156d386ca11894f781v 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) { 4259727e995b7bba3c57fb1e5c156d386ca11894f781v var loop2; 4260727e995b7bba3c57fb1e5c156d386ca11894f781v var ender_set; 4261727e995b7bba3c57fb1e5c156d386ca11894f781v var state; 4262727e995b7bba3c57fb1e5c156d386ca11894f781v var ender; 4263727e995b7bba3c57fb1e5c156d386ca11894f781v var l1; 4264727e995b7bba3c57fb1e5c156d386ca11894f781v var l2; 4265727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 4266727e995b7bba3c57fb1e5c156d386ca11894f781v if ((l1 instanceof sc_Pair)) 4267727e995b7bba3c57fb1e5c156d386ca11894f781v { 4268727e995b7bba3c57fb1e5c156d386ca11894f781v (ender = (l1.car)); 4269727e995b7bba3c57fb1e5c156d386ca11894f781v (ender_set = ((state = (sc_states_96[j])), (state[(ender+(1))]))); 4270727e995b7bba3c57fb1e5c156d386ca11894f781v if ((ender_set!== false)) 4271727e995b7bba3c57fb1e5c156d386ca11894f781v { 4272727e995b7bba3c57fb1e5c156d386ca11894f781v loop2 = function(k, l2) { 4273727e995b7bba3c57fb1e5c156d386ca11894f781v var loop3; 4274727e995b7bba3c57fb1e5c156d386ca11894f781v var ender_trees; 4275727e995b7bba3c57fb1e5c156d386ca11894f781v var prev_trees; 4276727e995b7bba3c57fb1e5c156d386ca11894f781v var conf_set; 4277727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_state_99; 4278727e995b7bba3c57fb1e5c156d386ca11894f781v var k; 4279727e995b7bba3c57fb1e5c156d386ca11894f781v var l2; 4280727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 4281727e995b7bba3c57fb1e5c156d386ca11894f781v if ((k>=(0))) 4282727e995b7bba3c57fb1e5c156d386ca11894f781v 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))) 4283727e995b7bba3c57fb1e5c156d386ca11894f781v { 4284727e995b7bba3c57fb1e5c156d386ca11894f781v (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))); 4285727e995b7bba3c57fb1e5c156d386ca11894f781v (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))); 4286727e995b7bba3c57fb1e5c156d386ca11894f781v loop3 = function(l3, l2) { 4287727e995b7bba3c57fb1e5c156d386ca11894f781v var l4; 4288727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_l2_100; 4289727e995b7bba3c57fb1e5c156d386ca11894f781v var ender_tree; 4290727e995b7bba3c57fb1e5c156d386ca11894f781v if ((l3 instanceof sc_Pair)) 4291727e995b7bba3c57fb1e5c156d386ca11894f781v { 4292727e995b7bba3c57fb1e5c156d386ca11894f781v (ender_tree = (sc_list((l3.car)))); 4293727e995b7bba3c57fb1e5c156d386ca11894f781v (l4 = prev_trees); 4294727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_l2_100 = l2); 4295727e995b7bba3c57fb1e5c156d386ca11894f781v while ((l4 instanceof sc_Pair)) { 4296727e995b7bba3c57fb1e5c156d386ca11894f781v { 4297727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_l2_100 = (new sc_Pair((sc_append((l4.car), ender_tree)), sc_l2_100))); 4298727e995b7bba3c57fb1e5c156d386ca11894f781v (l4 = (l4.cdr)); 4299727e995b7bba3c57fb1e5c156d386ca11894f781v } 4300727e995b7bba3c57fb1e5c156d386ca11894f781v } 4301727e995b7bba3c57fb1e5c156d386ca11894f781v return (loop3((l3.cdr), sc_l2_100)); 4302727e995b7bba3c57fb1e5c156d386ca11894f781v } 4303727e995b7bba3c57fb1e5c156d386ca11894f781v else 4304727e995b7bba3c57fb1e5c156d386ca11894f781v return (loop2((ender_set[(k+(5))]), l2)); 4305727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4306727e995b7bba3c57fb1e5c156d386ca11894f781v return (loop3(ender_trees, l2)); 4307727e995b7bba3c57fb1e5c156d386ca11894f781v } 4308727e995b7bba3c57fb1e5c156d386ca11894f781v else 4309727e995b7bba3c57fb1e5c156d386ca11894f781v (k = (ender_set[(k+(5))])); 4310727e995b7bba3c57fb1e5c156d386ca11894f781v else 4311727e995b7bba3c57fb1e5c156d386ca11894f781v return (sc_loop1_98((l1.cdr), l2)); 4312727e995b7bba3c57fb1e5c156d386ca11894f781v } 4313727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4314727e995b7bba3c57fb1e5c156d386ca11894f781v return (loop2((ender_set[(2)]), l2)); 4315727e995b7bba3c57fb1e5c156d386ca11894f781v } 4316727e995b7bba3c57fb1e5c156d386ca11894f781v else 4317727e995b7bba3c57fb1e5c156d386ca11894f781v (l1 = (l1.cdr)); 4318727e995b7bba3c57fb1e5c156d386ca11894f781v } 4319727e995b7bba3c57fb1e5c156d386ca11894f781v else 4320727e995b7bba3c57fb1e5c156d386ca11894f781v return l2; 4321727e995b7bba3c57fb1e5c156d386ca11894f781v } 4322727e995b7bba3c57fb1e5c156d386ca11894f781v }), (sc_loop1_98((sc_enders_92[(sc_steps_93[prev])]), null))))); 4323727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4324727e995b7bba3c57fb1e5c156d386ca11894f781v 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) { 4325727e995b7bba3c57fb1e5c156d386ca11894f781v var conf_set; 4326727e995b7bba3c57fb1e5c156d386ca11894f781v var state; 4327727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_conf_107; 4328727e995b7bba3c57fb1e5c156d386ca11894f781v var l; 4329727e995b7bba3c57fb1e5c156d386ca11894f781v var trees; 4330727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_nbzd2nts_108zd2; 4331727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_ntza2_109za2; 4332727e995b7bba3c57fb1e5c156d386ca11894f781v { 4333727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_ntza2_109za2 = (sc_ind_43(nt, sc_nts_101))); 4334727e995b7bba3c57fb1e5c156d386ca11894f781v if ((BgL_sc_ntza2_109za2!== false)) 4335727e995b7bba3c57fb1e5c156d386ca11894f781v { 4336727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_nbzd2nts_108zd2 = (sc_nts_101.length)); 4337727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (sc_enders_102[BgL_sc_ntza2_109za2])); 4338727e995b7bba3c57fb1e5c156d386ca11894f781v (trees = null); 4339727e995b7bba3c57fb1e5c156d386ca11894f781v while ((l instanceof sc_Pair)) { 4340727e995b7bba3c57fb1e5c156d386ca11894f781v { 4341727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_conf_107 = (l.car)); 4342727e995b7bba3c57fb1e5c156d386ca11894f781v if ((((state = (sc_states_106[j])), (conf_set = (state[(sc_conf_107+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)) 4343727e995b7bba3c57fb1e5c156d386ca11894f781v { 4344727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (l.cdr)); 4345727e995b7bba3c57fb1e5c156d386ca11894f781v (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))); 4346727e995b7bba3c57fb1e5c156d386ca11894f781v } 4347727e995b7bba3c57fb1e5c156d386ca11894f781v else 4348727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (l.cdr)); 4349727e995b7bba3c57fb1e5c156d386ca11894f781v } 4350727e995b7bba3c57fb1e5c156d386ca11894f781v } 4351727e995b7bba3c57fb1e5c156d386ca11894f781v return trees; 4352727e995b7bba3c57fb1e5c156d386ca11894f781v } 4353727e995b7bba3c57fb1e5c156d386ca11894f781v else 4354727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 4355727e995b7bba3c57fb1e5c156d386ca11894f781v } 4356727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4357727e995b7bba3c57fb1e5c156d386ca11894f781v 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) { 4358727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_loop1_116; 4359727e995b7bba3c57fb1e5c156d386ca11894f781v var tmp1124; 4360727e995b7bba3c57fb1e5c156d386ca11894f781v var prev; 4361727e995b7bba3c57fb1e5c156d386ca11894f781v 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) { 4362727e995b7bba3c57fb1e5c156d386ca11894f781v var nb_ender_trees; 4363727e995b7bba3c57fb1e5c156d386ca11894f781v var nb_prev_trees; 4364727e995b7bba3c57fb1e5c156d386ca11894f781v var conf_set; 4365727e995b7bba3c57fb1e5c156d386ca11894f781v var state; 4366727e995b7bba3c57fb1e5c156d386ca11894f781v var k; 4367727e995b7bba3c57fb1e5c156d386ca11894f781v var n; 4368727e995b7bba3c57fb1e5c156d386ca11894f781v var ender_set; 4369727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_state_117; 4370727e995b7bba3c57fb1e5c156d386ca11894f781v var ender; 4371727e995b7bba3c57fb1e5c156d386ca11894f781v var l; 4372727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_n_118; 4373727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 4374727e995b7bba3c57fb1e5c156d386ca11894f781v if ((l instanceof sc_Pair)) 4375727e995b7bba3c57fb1e5c156d386ca11894f781v { 4376727e995b7bba3c57fb1e5c156d386ca11894f781v (ender = (l.car)); 4377727e995b7bba3c57fb1e5c156d386ca11894f781v (ender_set = ((sc_state_117 = (sc_states_114[j])), (sc_state_117[(ender+(1))]))); 4378727e995b7bba3c57fb1e5c156d386ca11894f781v if ((ender_set!== false)) 4379727e995b7bba3c57fb1e5c156d386ca11894f781v { 4380727e995b7bba3c57fb1e5c156d386ca11894f781v (k = (ender_set[(2)])); 4381727e995b7bba3c57fb1e5c156d386ca11894f781v (n = sc_n_118); 4382727e995b7bba3c57fb1e5c156d386ca11894f781v while ((k>=(0))) { 4383727e995b7bba3c57fb1e5c156d386ca11894f781v if (((k>=i)&&(((state = (sc_states_114[k])), (conf_set = (state[(prev+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))) 4384727e995b7bba3c57fb1e5c156d386ca11894f781v { 4385727e995b7bba3c57fb1e5c156d386ca11894f781v (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))); 4386727e995b7bba3c57fb1e5c156d386ca11894f781v (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))); 4387727e995b7bba3c57fb1e5c156d386ca11894f781v (k = (ender_set[(k+(5))])); 4388727e995b7bba3c57fb1e5c156d386ca11894f781v (n +=(nb_prev_trees*nb_ender_trees)); 4389727e995b7bba3c57fb1e5c156d386ca11894f781v } 4390727e995b7bba3c57fb1e5c156d386ca11894f781v else 4391727e995b7bba3c57fb1e5c156d386ca11894f781v (k = (ender_set[(k+(5))])); 4392727e995b7bba3c57fb1e5c156d386ca11894f781v } 4393727e995b7bba3c57fb1e5c156d386ca11894f781v return (sc_loop1_116((l.cdr), n)); 4394727e995b7bba3c57fb1e5c156d386ca11894f781v } 4395727e995b7bba3c57fb1e5c156d386ca11894f781v else 4396727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (l.cdr)); 4397727e995b7bba3c57fb1e5c156d386ca11894f781v } 4398727e995b7bba3c57fb1e5c156d386ca11894f781v else 4399727e995b7bba3c57fb1e5c156d386ca11894f781v return sc_n_118; 4400727e995b7bba3c57fb1e5c156d386ca11894f781v } 4401727e995b7bba3c57fb1e5c156d386ca11894f781v }), (sc_loop1_116((sc_enders_111[(sc_steps_112[prev])]), (0)))))); 4402727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4403727e995b7bba3c57fb1e5c156d386ca11894f781v BgL_sc_nbzd2derivzd2treesza2_48za2 = function(nt, i, j, sc_nts_119, sc_enders_120, sc_steps_121, sc_toks_122, sc_states_123) { 4404727e995b7bba3c57fb1e5c156d386ca11894f781v var conf_set; 4405727e995b7bba3c57fb1e5c156d386ca11894f781v var state; 4406727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_conf_124; 4407727e995b7bba3c57fb1e5c156d386ca11894f781v var l; 4408727e995b7bba3c57fb1e5c156d386ca11894f781v var nb_trees; 4409727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_nbzd2nts_125zd2; 4410727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_ntza2_126za2; 4411727e995b7bba3c57fb1e5c156d386ca11894f781v { 4412727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_ntza2_126za2 = (sc_ind_43(nt, sc_nts_119))); 4413727e995b7bba3c57fb1e5c156d386ca11894f781v if ((BgL_sc_ntza2_126za2!== false)) 4414727e995b7bba3c57fb1e5c156d386ca11894f781v { 4415727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_nbzd2nts_125zd2 = (sc_nts_119.length)); 4416727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (sc_enders_120[BgL_sc_ntza2_126za2])); 4417727e995b7bba3c57fb1e5c156d386ca11894f781v (nb_trees = (0)); 4418727e995b7bba3c57fb1e5c156d386ca11894f781v while ((l instanceof sc_Pair)) { 4419727e995b7bba3c57fb1e5c156d386ca11894f781v { 4420727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_conf_124 = (l.car)); 4421727e995b7bba3c57fb1e5c156d386ca11894f781v if ((((state = (sc_states_123[j])), (conf_set = (state[(sc_conf_124+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)) 4422727e995b7bba3c57fb1e5c156d386ca11894f781v { 4423727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (l.cdr)); 4424727e995b7bba3c57fb1e5c156d386ca11894f781v (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)); 4425727e995b7bba3c57fb1e5c156d386ca11894f781v } 4426727e995b7bba3c57fb1e5c156d386ca11894f781v else 4427727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (l.cdr)); 4428727e995b7bba3c57fb1e5c156d386ca11894f781v } 4429727e995b7bba3c57fb1e5c156d386ca11894f781v } 4430727e995b7bba3c57fb1e5c156d386ca11894f781v return nb_trees; 4431727e995b7bba3c57fb1e5c156d386ca11894f781v } 4432727e995b7bba3c57fb1e5c156d386ca11894f781v else 4433727e995b7bba3c57fb1e5c156d386ca11894f781v return false; 4434727e995b7bba3c57fb1e5c156d386ca11894f781v } 4435727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4436727e995b7bba3c57fb1e5c156d386ca11894f781v (lexer = (parser_descr[(0)])); 4437727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_nts_42 = (parser_descr[(1)])); 4438727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_starters_41 = (parser_descr[(2)])); 4439727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_enders_40 = (parser_descr[(3)])); 4440727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_predictors_39 = (parser_descr[(4)])); 4441727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_steps_38 = (parser_descr[(5)])); 4442727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_names_37 = (parser_descr[(6)])); 4443727e995b7bba3c57fb1e5c156d386ca11894f781v (falseHead1128 = (new sc_Pair(null, null))); 4444727e995b7bba3c57fb1e5c156d386ca11894f781v (L1125 = (lexer(input))); 4445727e995b7bba3c57fb1e5c156d386ca11894f781v (tail1129 = falseHead1128); 4446727e995b7bba3c57fb1e5c156d386ca11894f781v while (!(L1125 === null)) { 4447727e995b7bba3c57fb1e5c156d386ca11894f781v { 4448727e995b7bba3c57fb1e5c156d386ca11894f781v (tok = (L1125.car)); 4449727e995b7bba3c57fb1e5c156d386ca11894f781v (l1 = (tok.cdr)); 4450727e995b7bba3c57fb1e5c156d386ca11894f781v (l2 = null); 4451727e995b7bba3c57fb1e5c156d386ca11894f781v while ((l1 instanceof sc_Pair)) { 4452727e995b7bba3c57fb1e5c156d386ca11894f781v { 4453727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_i_29 = (sc_ind_43((l1.car), sc_nts_42))); 4454727e995b7bba3c57fb1e5c156d386ca11894f781v if ((sc_i_29!== false)) 4455727e995b7bba3c57fb1e5c156d386ca11894f781v { 4456727e995b7bba3c57fb1e5c156d386ca11894f781v (l1 = (l1.cdr)); 4457727e995b7bba3c57fb1e5c156d386ca11894f781v (l2 = (new sc_Pair(sc_i_29, l2))); 4458727e995b7bba3c57fb1e5c156d386ca11894f781v } 4459727e995b7bba3c57fb1e5c156d386ca11894f781v else 4460727e995b7bba3c57fb1e5c156d386ca11894f781v (l1 = (l1.cdr)); 4461727e995b7bba3c57fb1e5c156d386ca11894f781v } 4462727e995b7bba3c57fb1e5c156d386ca11894f781v } 4463727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_optrOpnd_22 = (new sc_Pair((tok.car), (sc_reverse(l2))))); 4464727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_optrOpnd_21 = (new sc_Pair(sc_optrOpnd_22, null))); 4465727e995b7bba3c57fb1e5c156d386ca11894f781v (tail1129.cdr = sc_optrOpnd_21); 4466727e995b7bba3c57fb1e5c156d386ca11894f781v (tail1129 = (tail1129.cdr)); 4467727e995b7bba3c57fb1e5c156d386ca11894f781v (L1125 = (L1125.cdr)); 4468727e995b7bba3c57fb1e5c156d386ca11894f781v } 4469727e995b7bba3c57fb1e5c156d386ca11894f781v } 4470727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_optrOpnd_20 = (falseHead1128.cdr)); 4471727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_toks_36 = (sc_list2vector(sc_optrOpnd_20))); 4472727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_nbzd2toks_35zd2 = (sc_toks_36.length)); 4473727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_nbzd2confs_34zd2 = (sc_steps_38.length)); 4474727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_states_33 = (make_states(BgL_sc_nbzd2toks_35zd2, BgL_sc_nbzd2confs_34zd2))); 4475727e995b7bba3c57fb1e5c156d386ca11894f781v (goal_starters = (sc_starters_41[(0)])); 4476727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_confzd2setzd2adjoinza2_45za2(sc_states_33, (0), goal_starters, (0))); 4477727e995b7bba3c57fb1e5c156d386ca11894f781v (forw(sc_states_33, (0), sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_nts_42)); 4478727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_i_28 = (0)); 4479727e995b7bba3c57fb1e5c156d386ca11894f781v while ((sc_i_28<BgL_sc_nbzd2toks_35zd2)) { 4480727e995b7bba3c57fb1e5c156d386ca11894f781v { 4481727e995b7bba3c57fb1e5c156d386ca11894f781v (tok_nts = ((sc_toks_36[sc_i_28]).cdr)); 4482727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_confzd2setzd2adjoinza2_45za2(sc_states_33, (sc_i_28+(1)), tok_nts, sc_i_28)); 4483727e995b7bba3c57fb1e5c156d386ca11894f781v (forw(sc_states_33, (sc_i_28+(1)), sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_nts_42)); 4484727e995b7bba3c57fb1e5c156d386ca11894f781v (++sc_i_28); 4485727e995b7bba3c57fb1e5c156d386ca11894f781v } 4486727e995b7bba3c57fb1e5c156d386ca11894f781v } 4487727e995b7bba3c57fb1e5c156d386ca11894f781v (nb_toks = (sc_toks_36.length)); 4488727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_nbzd2confs_32zd2 = (sc_steps_38.length)); 4489727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_nbzd2nts_31zd2 = (sc_nts_42.length)); 4490727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_statesza2_30za2 = (make_states(nb_toks, BgL_sc_nbzd2confs_32zd2))); 4491727e995b7bba3c57fb1e5c156d386ca11894f781v (goal_enders = (sc_enders_40[(0)])); 4492727e995b7bba3c57fb1e5c156d386ca11894f781v (l = goal_enders); 4493727e995b7bba3c57fb1e5c156d386ca11894f781v while ((l instanceof sc_Pair)) { 4494727e995b7bba3c57fb1e5c156d386ca11894f781v { 4495727e995b7bba3c57fb1e5c156d386ca11894f781v (conf = (l.car)); 4496727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_33, BgL_sc_statesza2_30za2, nb_toks, conf, (0))); 4497727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (l.cdr)); 4498727e995b7bba3c57fb1e5c156d386ca11894f781v } 4499727e995b7bba3c57fb1e5c156d386ca11894f781v } 4500727e995b7bba3c57fb1e5c156d386ca11894f781v (i = nb_toks); 4501727e995b7bba3c57fb1e5c156d386ca11894f781v while ((i>=(0))) { 4502727e995b7bba3c57fb1e5c156d386ca11894f781v { 4503727e995b7bba3c57fb1e5c156d386ca11894f781v (states = sc_states_33); 4504727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_statesza2_27za2 = BgL_sc_statesza2_30za2); 4505727e995b7bba3c57fb1e5c156d386ca11894f781v (state_num = i); 4506727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_enders_26 = sc_enders_40); 4507727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_steps_25 = sc_steps_38); 4508727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_nbzd2nts_24zd2 = BgL_sc_nbzd2nts_31zd2); 4509727e995b7bba3c57fb1e5c156d386ca11894f781v (toks = sc_toks_36); 4510727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_stateza2_23za2 = (BgL_sc_statesza2_30za2[i])); 4511727e995b7bba3c57fb1e5c156d386ca11894f781v loop1 = function() { 4512727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_loop1_127; 4513727e995b7bba3c57fb1e5c156d386ca11894f781v var prev; 4514727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_statesza2_128za2; 4515727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_states_129; 4516727e995b7bba3c57fb1e5c156d386ca11894f781v var j; 4517727e995b7bba3c57fb1e5c156d386ca11894f781v var i; 4518727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_i_130; 4519727e995b7bba3c57fb1e5c156d386ca11894f781v var head; 4520727e995b7bba3c57fb1e5c156d386ca11894f781v var conf_set; 4521727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_conf_131; 4522727e995b7bba3c57fb1e5c156d386ca11894f781v { 4523727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_conf_131 = (BgL_sc_stateza2_23za2[(0)])); 4524727e995b7bba3c57fb1e5c156d386ca11894f781v if ((sc_conf_131>=(0))) 4525727e995b7bba3c57fb1e5c156d386ca11894f781v { 4526727e995b7bba3c57fb1e5c156d386ca11894f781v (conf_set = (BgL_sc_stateza2_23za2[(sc_conf_131+(1))])); 4527727e995b7bba3c57fb1e5c156d386ca11894f781v (head = (conf_set[(4)])); 4528727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_stateza2_23za2[(0)] = (conf_set[(0)])); 4529727e995b7bba3c57fb1e5c156d386ca11894f781v (conf_set_merge_new_bang(conf_set)); 4530727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_i_130 = head); 4531727e995b7bba3c57fb1e5c156d386ca11894f781v while ((sc_i_130>=(0))) { 4532727e995b7bba3c57fb1e5c156d386ca11894f781v { 4533727e995b7bba3c57fb1e5c156d386ca11894f781v (i = sc_i_130); 4534727e995b7bba3c57fb1e5c156d386ca11894f781v (j = state_num); 4535727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_states_129 = states); 4536727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_statesza2_128za2 = BgL_sc_statesza2_27za2); 4537727e995b7bba3c57fb1e5c156d386ca11894f781v (prev = (sc_conf_131-(1))); 4538727e995b7bba3c57fb1e5c156d386ca11894f781v if (((sc_conf_131>=BgL_sc_nbzd2nts_24zd2)&&((sc_steps_25[prev])>=(0)))) 4539727e995b7bba3c57fb1e5c156d386ca11894f781v { 4540727e995b7bba3c57fb1e5c156d386ca11894f781v sc_loop1_127 = function(l) { 4541727e995b7bba3c57fb1e5c156d386ca11894f781v var k; 4542727e995b7bba3c57fb1e5c156d386ca11894f781v var ender_set; 4543727e995b7bba3c57fb1e5c156d386ca11894f781v var state; 4544727e995b7bba3c57fb1e5c156d386ca11894f781v var ender; 4545727e995b7bba3c57fb1e5c156d386ca11894f781v var l; 4546727e995b7bba3c57fb1e5c156d386ca11894f781v while (true) { 4547727e995b7bba3c57fb1e5c156d386ca11894f781v if ((l instanceof sc_Pair)) 4548727e995b7bba3c57fb1e5c156d386ca11894f781v { 4549727e995b7bba3c57fb1e5c156d386ca11894f781v (ender = (l.car)); 4550727e995b7bba3c57fb1e5c156d386ca11894f781v (ender_set = ((state = (sc_states_129[j])), (state[(ender+(1))]))); 4551727e995b7bba3c57fb1e5c156d386ca11894f781v if ((ender_set!== false)) 4552727e995b7bba3c57fb1e5c156d386ca11894f781v { 4553727e995b7bba3c57fb1e5c156d386ca11894f781v (k = (ender_set[(2)])); 4554727e995b7bba3c57fb1e5c156d386ca11894f781v while ((k>=(0))) { 4555727e995b7bba3c57fb1e5c156d386ca11894f781v { 4556727e995b7bba3c57fb1e5c156d386ca11894f781v if ((k>=i)) 4557727e995b7bba3c57fb1e5c156d386ca11894f781v if (((BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, k, prev, i))!== false)) 4558727e995b7bba3c57fb1e5c156d386ca11894f781v (BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, j, ender, k)); 4559727e995b7bba3c57fb1e5c156d386ca11894f781v (k = (ender_set[(k+(5))])); 4560727e995b7bba3c57fb1e5c156d386ca11894f781v } 4561727e995b7bba3c57fb1e5c156d386ca11894f781v } 4562727e995b7bba3c57fb1e5c156d386ca11894f781v return (sc_loop1_127((l.cdr))); 4563727e995b7bba3c57fb1e5c156d386ca11894f781v } 4564727e995b7bba3c57fb1e5c156d386ca11894f781v else 4565727e995b7bba3c57fb1e5c156d386ca11894f781v (l = (l.cdr)); 4566727e995b7bba3c57fb1e5c156d386ca11894f781v } 4567727e995b7bba3c57fb1e5c156d386ca11894f781v else 4568727e995b7bba3c57fb1e5c156d386ca11894f781v return undefined; 4569727e995b7bba3c57fb1e5c156d386ca11894f781v } 4570727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4571727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_loop1_127((sc_enders_26[(sc_steps_25[prev])]))); 4572727e995b7bba3c57fb1e5c156d386ca11894f781v } 4573727e995b7bba3c57fb1e5c156d386ca11894f781v (sc_i_130 = (conf_set[(sc_i_130+(5))])); 4574727e995b7bba3c57fb1e5c156d386ca11894f781v } 4575727e995b7bba3c57fb1e5c156d386ca11894f781v } 4576727e995b7bba3c57fb1e5c156d386ca11894f781v return (loop1()); 4577727e995b7bba3c57fb1e5c156d386ca11894f781v } 4578727e995b7bba3c57fb1e5c156d386ca11894f781v else 4579727e995b7bba3c57fb1e5c156d386ca11894f781v return undefined; 4580727e995b7bba3c57fb1e5c156d386ca11894f781v } 4581727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4582727e995b7bba3c57fb1e5c156d386ca11894f781v (loop1()); 4583727e995b7bba3c57fb1e5c156d386ca11894f781v (--i); 4584727e995b7bba3c57fb1e5c156d386ca11894f781v } 4585727e995b7bba3c57fb1e5c156d386ca11894f781v } 4586727e995b7bba3c57fb1e5c156d386ca11894f781v (optrOpnd = BgL_sc_statesza2_30za2); 4587727e995b7bba3c57fb1e5c156d386ca11894f781v 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]; 4588727e995b7bba3c57fb1e5c156d386ca11894f781v } 4589727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4590727e995b7bba3c57fb1e5c156d386ca11894f781v } 4591727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4592727e995b7bba3c57fb1e5c156d386ca11894f781v BgL_parsezd2ze3parsedzf3zc2 = function(parse, nt, i, j) { 4593727e995b7bba3c57fb1e5c156d386ca11894f781v var is_parsed; 4594727e995b7bba3c57fb1e5c156d386ca11894f781v var states; 4595727e995b7bba3c57fb1e5c156d386ca11894f781v var enders; 4596727e995b7bba3c57fb1e5c156d386ca11894f781v var nts; 4597727e995b7bba3c57fb1e5c156d386ca11894f781v return ((nts = (parse[(0)])), (enders = (parse[(2)])), (states = (parse[(7)])), (is_parsed = (parse[(8)])), (is_parsed(nt, i, j, nts, enders, states))); 4598727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4599727e995b7bba3c57fb1e5c156d386ca11894f781v BgL_parsezd2ze3treesz31 = function(parse, nt, i, j) { 4600727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_derivzd2treesza2_132z70; 4601727e995b7bba3c57fb1e5c156d386ca11894f781v var states; 4602727e995b7bba3c57fb1e5c156d386ca11894f781v var toks; 4603727e995b7bba3c57fb1e5c156d386ca11894f781v var names; 4604727e995b7bba3c57fb1e5c156d386ca11894f781v var steps; 4605727e995b7bba3c57fb1e5c156d386ca11894f781v var enders; 4606727e995b7bba3c57fb1e5c156d386ca11894f781v var nts; 4607727e995b7bba3c57fb1e5c156d386ca11894f781v 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))); 4608727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4609727e995b7bba3c57fb1e5c156d386ca11894f781v BgL_parsezd2ze3nbzd2treesze3 = function(parse, nt, i, j) { 4610727e995b7bba3c57fb1e5c156d386ca11894f781v var BgL_sc_nbzd2derivzd2treesza2_133za2; 4611727e995b7bba3c57fb1e5c156d386ca11894f781v var states; 4612727e995b7bba3c57fb1e5c156d386ca11894f781v var toks; 4613727e995b7bba3c57fb1e5c156d386ca11894f781v var steps; 4614727e995b7bba3c57fb1e5c156d386ca11894f781v var enders; 4615727e995b7bba3c57fb1e5c156d386ca11894f781v var nts; 4616727e995b7bba3c57fb1e5c156d386ca11894f781v 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))); 4617727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4618727e995b7bba3c57fb1e5c156d386ca11894f781v test = function(k) { 4619727e995b7bba3c57fb1e5c156d386ca11894f781v var x; 4620727e995b7bba3c57fb1e5c156d386ca11894f781v var p; 4621727e995b7bba3c57fb1e5c156d386ca11894f781v return ((p = (BgL_makezd2parserzd2(const_earley, function(l) { 4622727e995b7bba3c57fb1e5c156d386ca11894f781v var sc_x_134; 4623727e995b7bba3c57fb1e5c156d386ca11894f781v var tail1134; 4624727e995b7bba3c57fb1e5c156d386ca11894f781v var L1130; 4625727e995b7bba3c57fb1e5c156d386ca11894f781v var falseHead1133; 4626727e995b7bba3c57fb1e5c156d386ca11894f781v { 4627727e995b7bba3c57fb1e5c156d386ca11894f781v (falseHead1133 = (new sc_Pair(null, null))); 4628727e995b7bba3c57fb1e5c156d386ca11894f781v (tail1134 = falseHead1133); 4629727e995b7bba3c57fb1e5c156d386ca11894f781v (L1130 = l); 4630727e995b7bba3c57fb1e5c156d386ca11894f781v while (!(L1130 === null)) { 4631727e995b7bba3c57fb1e5c156d386ca11894f781v { 4632727e995b7bba3c57fb1e5c156d386ca11894f781v (tail1134.cdr = (new sc_Pair(((sc_x_134 = (L1130.car)), (sc_list(sc_x_134, sc_x_134))), null))); 4633727e995b7bba3c57fb1e5c156d386ca11894f781v (tail1134 = (tail1134.cdr)); 4634727e995b7bba3c57fb1e5c156d386ca11894f781v (L1130 = (L1130.cdr)); 4635727e995b7bba3c57fb1e5c156d386ca11894f781v } 4636727e995b7bba3c57fb1e5c156d386ca11894f781v } 4637727e995b7bba3c57fb1e5c156d386ca11894f781v return (falseHead1133.cdr); 4638727e995b7bba3c57fb1e5c156d386ca11894f781v } 4639727e995b7bba3c57fb1e5c156d386ca11894f781v }))), (x = (p((sc_vector2list((sc_makeVector(k, "\u1E9Ca"))))))), (sc_length((BgL_parsezd2ze3treesz31(x, "\u1E9Cs", (0), k))))); 4640727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4641727e995b7bba3c57fb1e5c156d386ca11894f781v BgL_earleyzd2benchmarkzd2 = function() { 4642727e995b7bba3c57fb1e5c156d386ca11894f781v var args = null; 4643727e995b7bba3c57fb1e5c156d386ca11894f781v for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) { 4644727e995b7bba3c57fb1e5c156d386ca11894f781v args = sc_cons(arguments[sc_tmp], args); 4645727e995b7bba3c57fb1e5c156d386ca11894f781v } 4646727e995b7bba3c57fb1e5c156d386ca11894f781v var k; 4647727e995b7bba3c57fb1e5c156d386ca11894f781v return ((k = ((args === null)?(7):(args.car))), (BgL_runzd2benchmarkzd2("earley", (1), function() { 4648727e995b7bba3c57fb1e5c156d386ca11894f781v return (test(k)); 4649727e995b7bba3c57fb1e5c156d386ca11894f781v }, function(result) { 465041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org return ((sc_display(result)), (sc_newline()), result == 132); 4651727e995b7bba3c57fb1e5c156d386ca11894f781v }))); 4652727e995b7bba3c57fb1e5c156d386ca11894f781v }; 4653727e995b7bba3c57fb1e5c156d386ca11894f781v} 4654727e995b7bba3c57fb1e5c156d386ca11894f781v 4655727e995b7bba3c57fb1e5c156d386ca11894f781v 4656727e995b7bba3c57fb1e5c156d386ca11894f781v/************* END OF GENERATED CODE *************/ 4657727e995b7bba3c57fb1e5c156d386ca11894f781v// Invoke this function to run a benchmark. 4658727e995b7bba3c57fb1e5c156d386ca11894f781v// The first argument is a string identifying the benchmark. 4659727e995b7bba3c57fb1e5c156d386ca11894f781v// The second argument is the number of times to run the benchmark. 4660727e995b7bba3c57fb1e5c156d386ca11894f781v// The third argument is a function that runs the benchmark. 4661727e995b7bba3c57fb1e5c156d386ca11894f781v// The fourth argument is a unary function that warns if the result 4662727e995b7bba3c57fb1e5c156d386ca11894f781v// returned by the benchmark is incorrect. 4663727e995b7bba3c57fb1e5c156d386ca11894f781v// 4664727e995b7bba3c57fb1e5c156d386ca11894f781v// Example: 4665727e995b7bba3c57fb1e5c156d386ca11894f781v// RunBenchmark("new Array()", 4666727e995b7bba3c57fb1e5c156d386ca11894f781v// 1, 4667727e995b7bba3c57fb1e5c156d386ca11894f781v// function () { new Array(1000000); } 4668727e995b7bba3c57fb1e5c156d386ca11894f781v// function (v) { 4669727e995b7bba3c57fb1e5c156d386ca11894f781v// return (v instanceof Array) && (v.length == 1000000); 4670727e995b7bba3c57fb1e5c156d386ca11894f781v// }); 4671727e995b7bba3c57fb1e5c156d386ca11894f781v 4672727e995b7bba3c57fb1e5c156d386ca11894f781vSC_DEFAULT_OUT = new sc_GenericOutputPort(function(s) {}); 4673727e995b7bba3c57fb1e5c156d386ca11894f781vSC_ERROR_OUT = SC_DEFAULT_OUT; 4674727e995b7bba3c57fb1e5c156d386ca11894f781v 4675727e995b7bba3c57fb1e5c156d386ca11894f781vfunction RunBenchmark(name, count, run, warn) { 4676727e995b7bba3c57fb1e5c156d386ca11894f781v for (var n = 0; n < count; ++n) { 4677727e995b7bba3c57fb1e5c156d386ca11894f781v result = run(); 467841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org if (!warn(result)) { 467941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org throw new Error("Earley or Boyer did incorrect number of rewrites"); 468041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org } 4681727e995b7bba3c57fb1e5c156d386ca11894f781v } 4682727e995b7bba3c57fb1e5c156d386ca11894f781v} 4683727e995b7bba3c57fb1e5c156d386ca11894f781v 4684727e995b7bba3c57fb1e5c156d386ca11894f781vvar BgL_runzd2benchmarkzd2 = RunBenchmark; 4685