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