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