diff --git a/lib/compiler.sx b/lib/compiler.sx index bfab1905..c385871d 100644 --- a/lib/compiler.sx +++ b/lib/compiler.sx @@ -187,39 +187,68 @@ (compile-call em head args scope tail?) (let ((name (symbol-name head))) - (match - name - ("if" (compile-if em args scope tail?)) - ("when" (compile-when em args scope tail?)) - ("and" (compile-and em args scope tail?)) - ("or" (compile-or em args scope tail?)) - ("let" (compile-let em args scope tail?)) - ("let*" (compile-let em args scope tail?)) - ("begin" (compile-begin em args scope tail?)) - ("do" (compile-begin em args scope tail?)) - ("lambda" (compile-lambda em args scope)) - ("fn" (compile-lambda em args scope)) - ("define" (compile-define em args scope)) - ("set!" (compile-set em args scope)) - ("quote" (compile-quote em args)) - ("cond" (compile-cond em args scope tail?)) - ("case" (compile-case em args scope tail?)) - ("match" (compile-match em args scope tail?)) - ("->" (compile-thread em args scope tail?)) - ("defcomp" (compile-defcomp em args scope)) - ("defisland" (compile-defcomp em args scope)) - ("defmacro" (compile-defmacro em args scope)) - ("defstyle" (emit-op em 2)) - ("defhandler" (emit-op em 2)) - ("defpage" (emit-op em 2)) - ("defquery" (emit-op em 2)) - ("defaction" (emit-op em 2)) - ("defrelation" (emit-op em 2)) - ("deftype" (emit-op em 2)) - ("defeffect" (emit-op em 2)) - ("quasiquote" (compile-quasiquote em (first args) scope)) - ("letrec" (compile-letrec em args scope tail?)) - (_ (compile-call em head args scope tail?)))))))) + (cond + (= name "if") + (compile-if em args scope tail?) + (= name "when") + (compile-when em args scope tail?) + (= name "and") + (compile-and em args scope tail?) + (= name "or") + (compile-or em args scope tail?) + (= name "let") + (compile-let em args scope tail?) + (= name "let*") + (compile-let em args scope tail?) + (= name "begin") + (compile-begin em args scope tail?) + (= name "do") + (compile-begin em args scope tail?) + (= name "lambda") + (compile-lambda em args scope) + (= name "fn") + (compile-lambda em args scope) + (= name "define") + (compile-define em args scope) + (= name "set!") + (compile-set em args scope) + (= name "quote") + (compile-quote em args) + (= name "cond") + (compile-cond em args scope tail?) + (= name "case") + (compile-case em args scope tail?) + (= name "match") + (compile-match em args scope tail?) + (= name "->") + (compile-thread em args scope tail?) + (= name "defcomp") + (compile-defcomp em args scope) + (= name "defisland") + (compile-defcomp em args scope) + (= name "defmacro") + (compile-defmacro em args scope) + (= name "defstyle") + (emit-op em 2) + (= name "defhandler") + (emit-op em 2) + (= name "defpage") + (emit-op em 2) + (= name "defquery") + (emit-op em 2) + (= name "defaction") + (emit-op em 2) + (= name "defrelation") + (emit-op em 2) + (= name "deftype") + (emit-op em 2) + (= name "defeffect") + (emit-op em 2) + (= name "quasiquote") + (compile-quasiquote em (first args) scope) + (= name "letrec") + (compile-letrec em args scope tail?) + :else (compile-call em head args scope tail?))))))) (define compile-if