["do", ["def", "rdr-new", ["fn", ["tokens"], ["hash-map", ["`", "tokens"], "tokens", ["`", "position"], 0]]], ["def", "rdr-next", ["fn", ["rdr"], ["let", ["pos", ["get", "rdr", ["`", "position"]], "val", ["get", ["get", "rdr", ["`", "tokens"]], "pos"]], ["do", ["assoc!", "rdr", ["`", "position"], ["+", 1, "pos"]], "val"]]]], ["def", "rdr-peek", ["fn", ["rdr"], ["let", ["pos", ["get", "rdr", ["`", "position"]]], ["get", ["get", "rdr", ["`", "tokens"]], "pos"]]]], ["def", "re-matches", ["fn", ["re", "strn", "acc"], ["let", ["match", [".", "re", ["`", "exec"], "strn"], "g1", ["get", "match", 1]], ["if", ["=", "g1", ["`", ""]], "acc", ["re-matches", "re", "strn", ["concat", "acc", "g1"]]]]]], ["def", "tokenize", ["fn", ["strn"], ["let", ["re-str", ["`", "[\\s,]*(~@|[\\[\\]{}()'`~^@]|\"(?:\\\\.|[^\\\\\"])*\"|;.*|[^\\s\\[\\]{}('\"`,;)]*)"], "re", ["RegExp", "re-str", ["`", "g"]]], ["re-matches", "re", "strn", ["`", []]]]]], ["def", "read-atom", ["fn", ["rdr"], ["let", ["token", ["rdr-next", "rdr"]], ["if", [".", "token", ["`", "match"], ["RegExp", ["`", "^-?[0-9]+$"]]], ["parseInt", "token", 10], ["if", ["=", ["`", "\""], ["get", "token", 0]], ["slice", "token", 1, ["-", ["count", "token"], 1]], ["if", ["=", ["`", "nil"], "token"], null, ["if", ["=", ["`", "true"], "token"], true, ["if", ["=", ["`", "false"], "token"], false, ["symbol", "token"]]]]]]]]], ["def", "read-list-entries", ["fn", ["rdr"], ["let", ["tok", ["rdr-peek", "rdr"]], ["if", "tok", ["if", ["=", ["`", ")"], "tok"], ["`", []], ["cons", ["read-form", "rdr"], ["read-list-entries", "rdr"]]], ["throw", ["`", "expected ')'"]]]]]], ["def", "read-list", ["fn", ["rdr"], ["let", ["token", ["rdr-next", "rdr"]], ["if", ["=", ["`", "("], "token"], ["let", ["lst", ["read-list-entries", "rdr"]], ["do", ["rdr-next", "rdr"], "lst"]], ["throw", ["`", "expected '('"]]]]]], ["def", "read-form", ["fn", ["rdr"], ["let", ["token", ["rdr-peek", "rdr"]], ["if", ["=", ["`", ")"], "token"], ["throw", ["`", "unexpected ')'"]], ["if", ["=", ["`", "("], "token"], ["read-list", "rdr"], ["read-atom", "rdr"]]]]]], ["def", "read-str", ["fn", ["strn"], ["let", ["tokens", ["tokenize", "strn"], "rdr", ["rdr-new", "tokens"]], ["if", ["empty?", "tokens"], null, ["read-form", "rdr"]]]]], null ]