/
compiler.js
38 lines (37 loc) · 16.7 KB
/
compiler.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function but_dash_last(l){return (runtime_dash_booleanize((null_huh_)(l)))?(null):((runtime_dash_booleanize((null_huh_)((cdr)(l))))?(null):((cons)((car)(l), (but_dash_last)((cdr)(l)))))};
function last(l){return (runtime_dash_booleanize((null_huh_)(l)))?(false):((runtime_dash_booleanize((null_huh_)((cdr)(l))))?((car)(l)):((last)((cdr)(l))))};
function kind_dash_of_dash_expression_huh_(kind, args, exp){return (runtime_dash_booleanize((list_huh_)(exp)))?((runtime_dash_booleanize((not)((null_huh_)(exp))))?((runtime_dash_booleanize((eq_huh_)(kind, (car)(exp))))?((runtime_dash_booleanize((runtime_dash_booleanize((number_huh_)(args)))?((function(){return (_eq_)(js_dash_plus(1, args), (length)(exp))})()):((runtime_dash_booleanize((eq_huh_)((string_dash__gt_symbol)("even"), args)))?((function(){return (even_huh_)((length)((cdr)(exp)))})()):((runtime_dash_booleanize((eq_huh_)((string_dash__gt_symbol)("one+"), args)))?((function(){return (not)((null_huh_)((cdr)(exp)))})()):((function(){return false})())))))?(true):(false)):(false)):(false)):(false)};
function if_dash_expression_huh_(exp){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("if"), 3, exp)};
function lambda_dash_expression_huh_(exp){return (runtime_dash_booleanize((list_huh_)(exp)))?((runtime_dash_booleanize((eq_huh_)((car)(exp), (string_dash__gt_symbol)("lambda"))))?((runtime_dash_booleanize((list_huh_)((cadr)(exp))))?((runtime_dash_booleanize((list_huh_)((cddr)(exp))))?(true):(false)):(false)):(false)):(false)};
function begin_dash_expression_huh_(exp){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("begin"), (string_dash__gt_symbol)("one+"), exp)};
function define_dash_expression_huh_(exp){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("define"), (string_dash__gt_symbol)("one+"), exp)};
function quote_dash_expression_huh_(exp){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("quote"), 1, exp)};
function quasiquote_dash_expression_huh_(exp){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("quasiquote"), 1, exp)};
function unquote_dash_expression_huh_(exp){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("unquote"), 1, exp)};
function cond_dash_expression_huh_(exp){return (runtime_dash_booleanize((list_huh_)(exp)))?((runtime_dash_booleanize((eq_huh_)((string_dash__gt_symbol)("cond"), (car)(exp))))?(true):(false)):(false)};
function or_dash_expression_huh_(exp){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("or"), (string_dash__gt_symbol)("one+"), exp)};
function and_dash_expression_huh_(exp){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("and"), (string_dash__gt_symbol)("one+"), exp)};
function runtime_dash_primitive_huh_(op){return (runtime_dash_booleanize((eq_huh_)(op, (string_dash__gt_symbol)("+"))))?((function(){return (string_dash__gt_symbol)("js-plus")})()):((runtime_dash_booleanize((eq_huh_)(op, (string_dash__gt_symbol)("-"))))?((function(){return (string_dash__gt_symbol)("js-minus")})()):((runtime_dash_booleanize((eq_huh_)(op, (string_dash__gt_symbol)("*"))))?((function(){return (string_dash__gt_symbol)("js-times")})()):((runtime_dash_booleanize((eq_huh_)(op, (string_dash__gt_symbol)(">"))))?((function(){return (string_dash__gt_symbol)("js-gt")})()):((runtime_dash_booleanize((eq_huh_)(op, (string_dash__gt_symbol)("runtime-booleanize"))))?((function(){return (string_dash__gt_symbol)("runtime-booleanize")})()):((function(){return false})())))))};
function scm_dash_top_dash__gt_js(scm){return (runtime_dash_booleanize((define_dash_expression_huh_)(scm)))?((function(){return (runtime_dash_booleanize((symbol_huh_)((cadr)(scm))))?((cons)((string_dash__gt_symbol)("js-declare-var"), (cons)((cadr)(scm), (cons)((caddr)(scm), null)))):((cons)((string_dash__gt_symbol)("js-named-function"), (cons)((caadr)(scm), (cons)((cdadr)(scm), (append)((map)(scm_dash__gt_js, (but_dash_last)((cddr)(scm))), (list)((cons)((string_dash__gt_symbol)("js-return"), (cons)((scm_dash__gt_js)((last)((cddr)(scm))), null))))))))})()):((function(){return (scm_dash__gt_js)(scm)})())};
function scm_dash__gt_js(scm){return (runtime_dash_booleanize((null_huh_)(scm)))?((function(){return scm})()):((runtime_dash_booleanize((number_huh_)(scm)))?((function(){return scm})()):((runtime_dash_booleanize((string_huh_)(scm)))?((function(){return scm})()):((runtime_dash_booleanize((char_huh_)(scm)))?((function(){return scm})()):((runtime_dash_booleanize((boolean_huh_)(scm)))?((function(){return scm})()):((runtime_dash_booleanize((symbol_huh_)(scm)))?((function(){return (cons)((string_dash__gt_symbol)("js-var"), (cons)(scm, null))})()):((runtime_dash_booleanize((quote_dash_expression_huh_)(scm)))?((function(){return (quoted_dash__gt_js)((cadr)(scm))})()):((runtime_dash_booleanize((quasiquote_dash_expression_huh_)(scm)))?((function(){return (scm_dash__gt_js)((quasiquoted_dash__gt_js)((cadr)(scm), 1))})()):((runtime_dash_booleanize((cond_dash_expression_huh_)(scm)))?((function(){return (cond_dash__gt_js)(scm)})()):((runtime_dash_booleanize((lambda_dash_expression_huh_)(scm)))?((function(){return (cons)((string_dash__gt_symbol)("js-function"), (cons)((cadr)(scm), (append)((map)(scm_dash__gt_js, (but_dash_last)((cddr)(scm))), (list)((cons)((string_dash__gt_symbol)("js-return"), (cons)((scm_dash__gt_js)((last)((cddr)(scm))), null))))))})()):((runtime_dash_booleanize((if_dash_expression_huh_)(scm)))?((function(){return (cons)((string_dash__gt_symbol)("js-if"), (cons)((cons)((string_dash__gt_symbol)("js-funcall"), (cons)((string_dash__gt_symbol)("runtime-booleanize"), (cons)((scm_dash__gt_js)((cadr)(scm)), null))), (cons)((scm_dash__gt_js)((caddr)(scm)), (cons)((scm_dash__gt_js)((cadddr)(scm)), null))))})()):((runtime_dash_booleanize((or_dash_expression_huh_)(scm)))?((function(){return (scm_dash__gt_js)((or_dash_expression_dash__gt_if)((cdr)(scm)))})()):((runtime_dash_booleanize((and_dash_expression_huh_)(scm)))?((function(){return (scm_dash__gt_js)((and_dash_expression_dash__gt_if)((cdr)(scm)))})()):((runtime_dash_booleanize((begin_dash_expression_huh_)(scm)))?((function(){return (scm_dash__gt_js)((cons)((cons)((string_dash__gt_symbol)("lambda"), (cons)(null, (cdr)(scm))), null))})()):((runtime_dash_booleanize((runtime_dash_booleanize((pair_huh_)(scm)))?((runtime_dash_booleanize((runtime_dash_primitive_huh_)((car)(scm))))?(true):(false)):(false)))?((function(){return (cons)((string_dash__gt_symbol)("js-funcall"), (cons)((runtime_dash_primitive_huh_)((car)(scm)), (map)(scm_dash__gt_js, (cdr)(scm))))})()):((runtime_dash_booleanize((list_huh_)(scm)))?((function(){return (cons)((string_dash__gt_symbol)("js-funcall*"), (cons)((scm_dash__gt_js)((car)(scm)), (map)(scm_dash__gt_js, (cdr)(scm))))})()):((function(){return (error)("unkown exp in cond->js")})()))))))))))))))))};
function or_dash_expression_dash__gt_if(exp){return (runtime_dash_booleanize((null_huh_)(exp)))?(false):((cons)((string_dash__gt_symbol)("if"), (cons)((car)(exp), (cons)(true, (cons)((or_dash_expression_dash__gt_if)((cdr)(exp)), null)))))};
function and_dash_expression_dash__gt_if(exp){return (runtime_dash_booleanize((null_huh_)(exp)))?(true):((cons)((string_dash__gt_symbol)("if"), (cons)((car)(exp), (cons)((and_dash_expression_dash__gt_if)((cdr)(exp)), (cons)(false, null)))))};
function quoted_dash__gt_js(exp){return (runtime_dash_booleanize((number_huh_)(exp)))?((function(){return exp})()):((runtime_dash_booleanize((string_huh_)(exp)))?((function(){return exp})()):((runtime_dash_booleanize((char_huh_)(exp)))?((function(){return exp})()):((runtime_dash_booleanize((boolean_huh_)(exp)))?((function(){return exp})()):((runtime_dash_booleanize((null_huh_)(exp)))?((function(){return exp})()):((runtime_dash_booleanize((symbol_huh_)(exp)))?((function(){return (scm_dash__gt_js)((cons)((string_dash__gt_symbol)("string->symbol"), (cons)((symbol_dash__gt_string)(exp), null)))})()):((runtime_dash_booleanize((pair_huh_)(exp)))?((function(){return (cons)((string_dash__gt_symbol)("js-funcall"), (cons)((string_dash__gt_symbol)("cons"), (cons)((quoted_dash__gt_js)((car)(exp)), (cons)((quoted_dash__gt_js)((cdr)(exp)), null))))})()):((function(){return (error)("unkown exp in cond->js")})())))))))};
function quasiquoted_dash__gt_js(term, n){return (runtime_dash_booleanize((unquote_dash_expression_huh_)(term)))?((function(){return (runtime_dash_booleanize((_eq_)(n, 1)))?((cadr)(term)):((list)((string_dash__gt_symbol)("cons"), cons((string_dash__gt_symbol)("quote"), cons((string_dash__gt_symbol)("unquote"), null)), (list)((string_dash__gt_symbol)("cons"), (quasiquoted_dash__gt_js)((cadr)(term), js_dash_minus(n, 1)), cons((string_dash__gt_symbol)("quote"), cons(null, null)))))})()):((runtime_dash_booleanize((quasiquote_dash_expression_huh_)(term)))?((function(){return (cons)((string_dash__gt_symbol)("cons"), (cons)((cons)((string_dash__gt_symbol)("quote"), (cons)((string_dash__gt_symbol)("quasiquote"), null)), (cons)((cons)((string_dash__gt_symbol)("cons"), (cons)((quasiquoted_dash__gt_js)((cadr)(term), js_dash_plus(n, 1)), (cons)(null, null))), null)))})()):((runtime_dash_booleanize((pair_huh_)(term)))?((function(){return (cons)((string_dash__gt_symbol)("cons"), (cons)((quasiquoted_dash__gt_js)((car)(term), n), (cons)((quasiquoted_dash__gt_js)((cdr)(term), n), null)))})()):((function(){return (cons)((string_dash__gt_symbol)("quote"), (cons)(term, null))})())))};
function cond_dash__gt_js(scm){return (runtime_dash_booleanize((null_huh_)((cdr)(scm))))?((function(){return null})()):((runtime_dash_booleanize((runtime_dash_booleanize((eq_huh_)((string_dash__gt_symbol)("else"), (caadr)(scm))))?((runtime_dash_booleanize((_eq_)(2, (length)(scm))))?(true):(false)):(false)))?((function(){return (scm_dash__gt_js)((cons)((string_dash__gt_symbol)("begin"), (cdadr)(scm)))})()):((runtime_dash_booleanize((_eq_)(2, (length)(scm))))?((function(){return (scm_dash__gt_js)((cons)((string_dash__gt_symbol)("if"), (cons)((caadr)(scm), (cons)((cons)((string_dash__gt_symbol)("begin"), (cdadr)(scm)), (cons)((cons)((string_dash__gt_symbol)("quote"), (cons)(null, null)), null)))))})()):((runtime_dash_booleanize(js_dash_gt((length)(scm), 2)))?((function(){return (scm_dash__gt_js)((cons)((string_dash__gt_symbol)("if"), (cons)((caadr)(scm), (cons)((cons)((string_dash__gt_symbol)("begin"), (cdadr)(scm)), (cons)((cons)((string_dash__gt_symbol)("cond"), (cddr)(scm)), null)))))})()):((function(){return (error)("unkown exp in cond->js")})()))))};
function js_dash_object_dash_literal_huh_(js){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("js-object-literal"), (string_dash__gt_symbol)("even"), js)};
function js_dash_dot_huh_(js){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("js-dot"), 2, js)};
function js_dash_funcall_star__huh_(js){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("js-funcall*"), (string_dash__gt_symbol)("one+"), js)};
function js_dash_funcall_huh_(js){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("js-funcall"), (string_dash__gt_symbol)("one+"), js)};
function js_dash_if_huh_(js){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("js-if"), 3, js)};
function js_dash_function_huh_(js){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("js-function"), (string_dash__gt_symbol)("one+"), js)};
function js_dash_return_huh_(js){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("js-return"), 1, js)};
function js_dash_var_huh_(js){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("js-var"), 1, js)};
function js_dash_named_dash_function_huh_(js){return (kind_dash_of_dash_expression_huh_)((string_dash__gt_symbol)("js-named-function"), (string_dash__gt_symbol)("one+"), js)};
function mangle_dash_name(name){return (string_dash__gt_symbol)((list_dash__gt_string)((mangle_dash_helper)((string_dash__gt_list)((symbol_dash__gt_string)(name)))))};
function mangle_dash_helper(n){return (runtime_dash_booleanize((null_huh_)(n)))?(null):((runtime_dash_booleanize((eq_huh_)("-", (car)(n))))?((function(){return (append)((string_dash__gt_list)("_dash_"), (mangle_dash_helper)((cdr)(n)))})()):((runtime_dash_booleanize((eq_huh_)("?", (car)(n))))?((function(){return (append)((string_dash__gt_list)("_huh_"), (mangle_dash_helper)((cdr)(n)))})()):((runtime_dash_booleanize((eq_huh_)("_", (car)(n))))?((function(){return (append)((string_dash__gt_list)("_underscore_"), (mangle_dash_helper)((cdr)(n)))})()):((runtime_dash_booleanize((eq_huh_)(">", (car)(n))))?((function(){return (append)((string_dash__gt_list)("_gt_"), (mangle_dash_helper)((cdr)(n)))})()):((runtime_dash_booleanize((eq_huh_)("!", (car)(n))))?((function(){return (append)((string_dash__gt_list)("_bang_"), (mangle_dash_helper)((cdr)(n)))})()):((runtime_dash_booleanize((eq_huh_)("=", (car)(n))))?((function(){return (append)((string_dash__gt_list)("_eq_"), (mangle_dash_helper)((cdr)(n)))})()):((runtime_dash_booleanize((eq_huh_)("*", (car)(n))))?((function(){return (append)((string_dash__gt_list)("_star_"), (mangle_dash_helper)((cdr)(n)))})()):((function(){return (cons)((car)(n), (mangle_dash_helper)((cdr)(n)))})()))))))))};
function js_dash__gt_javascript(js){return (runtime_dash_booleanize((null_huh_)(js)))?((function(){return (display)("null")})()):((runtime_dash_booleanize((number_huh_)(js)))?((function(){return (write)(js)})()):((runtime_dash_booleanize((string_huh_)(js)))?((function(){return (write)(js)})()):((runtime_dash_booleanize((char_huh_)(js)))?((function(){return (write)((list_dash__gt_string)((list)(js)))})()):((runtime_dash_booleanize((eq_huh_)(true, js)))?((function(){return (display)("true")})()):((runtime_dash_booleanize((eq_huh_)(false, js)))?((function(){return (display)("false")})()):((runtime_dash_booleanize((js_dash_object_dash_literal_huh_)(js)))?((function(){(display)("{"); (do_dash_js_dash_object_dash_literal)((cdr)(js)); return (display)("}")})()):((runtime_dash_booleanize((js_dash_var_huh_)(js)))?((function(){return (display)((mangle_dash_name)((cadr)(js)))})()):((runtime_dash_booleanize((js_dash_dot_huh_)(js)))?((function(){(display)("("); (js_dash__gt_javascript)((caddr)(js)); (display)(")"); (display)("."); return (display)((cadr)(js))})()):((runtime_dash_booleanize((js_dash_return_huh_)(js)))?((function(){(display)("return "); return (js_dash__gt_javascript)((cadr)(js))})()):((runtime_dash_booleanize((js_dash_funcall_star__huh_)(js)))?((function(){(display)("("); (js_dash__gt_javascript)((cadr)(js)); (display)(")"); (display)("("); (do_dash_js_dash_funcall)((cddr)(js)); return (display)(")")})()):((runtime_dash_booleanize((js_dash_funcall_huh_)(js)))?((function(){(display)((mangle_dash_name)((cadr)(js))); (display)("("); (do_dash_js_dash_funcall)((cddr)(js)); return (display)(")")})()):((runtime_dash_booleanize((js_dash_if_huh_)(js)))?((function(){(display)("("); (js_dash__gt_javascript)((cadr)(js)); (display)(")"); (display)("?"); (display)("("); (js_dash__gt_javascript)((caddr)(js)); (display)(")"); (display)(":"); (display)("("); (js_dash__gt_javascript)((cadddr)(js)); return (display)(")")})()):((runtime_dash_booleanize((js_dash_function_huh_)(js)))?((function(){(display)("function"); (display)("("); (do_dash_js_dash_funargs)((cadr)(js)); (display)(")"); (display)("{"); (do_dash_js_dash_sequence)((cddr)(js)); return (display)("}")})()):((runtime_dash_booleanize((js_dash_named_dash_function_huh_)(js)))?((function(){(display)("function "); (display)((mangle_dash_name)((cadr)(js))); (display)("("); (do_dash_js_dash_funargs)((caddr)(js)); (display)(")"); (display)("{"); (do_dash_js_dash_sequence)((cdddr)(js)); return (display)("}")})()):((function(){return (error)("unkown exp in cond->js")})())))))))))))))))};
function do_dash_js_dash_object_dash_literal(kvs){return (runtime_dash_booleanize((null_huh_)(kvs)))?(0):((function(){(display)((mangle_dash_name)((car)(kvs))); (display)(":"); (js_dash__gt_javascript)((cadr)(kvs)); return (runtime_dash_booleanize((null_huh_)((cddr)(kvs))))?(0):((function(){(display)(", "); return (do_dash_js_dash_object_dash_literal)((cddr)(kvs))})())})())};
function do_dash_js_dash_funcall(kvs){return (runtime_dash_booleanize((null_huh_)(kvs)))?(0):((function(){(js_dash__gt_javascript)((car)(kvs)); return (runtime_dash_booleanize((null_huh_)((cdr)(kvs))))?(0):((function(){(display)(", "); return (do_dash_js_dash_funcall)((cdr)(kvs))})())})())};
function do_dash_js_dash_funargs(kvs){return (runtime_dash_booleanize((null_huh_)(kvs)))?(0):((function(){(display)((mangle_dash_name)((car)(kvs))); return (runtime_dash_booleanize((null_huh_)((cdr)(kvs))))?(0):((function(){(display)(", "); return (do_dash_js_dash_funargs)((cdr)(kvs))})())})())};
function do_dash_js_dash_sequence(exps){return (runtime_dash_booleanize((null_huh_)(exps)))?(0):((function(){(js_dash__gt_javascript)((car)(exps)); return (runtime_dash_booleanize((null_huh_)((cdr)(exps))))?(0):((function(){(display)("; "); return (do_dash_js_dash_sequence)((cdr)(exps))})())})())};