diff --git a/include/macros.sibilant b/include/macros.sibilant index 3eab692..859a985 100644 --- a/include/macros.sibilant +++ b/include/macros.sibilant @@ -124,9 +124,6 @@ (regex "\n" 'g) "\n// ") null)))]))) -(macro meta (body) - (eval (output-formatter (transpile body)))) - (macro zero? (item) '(= @item 0)) (macro empty? (arr) @@ -266,8 +263,27 @@ (macro until (condition ...block) '(while (not @condition) ...@block)) +(macro match? (regexp string) + '(send @string match @regexp)) + +(macro match-regex? (string regexp-string glim) + '(match? (regex @regexp-string @glim) @string)) + +(macro replace (string regexp-string replacement) + '(send @string replace + (regex @regexp-string) + @replacement)) + +(macro replace-all (string regexp-string replacement) + '(replace @string @regexp-string 'g)) + (macro thunk (...body) - '(lambda @{ node this args [] } ...@body)) + '(lambda @{ node this args [] } + ...@(map-node body + (#(node) + (if (node? node 'arg-placeholder) + '(argument @(replace node.token "^#" "")) + node))))) (alias-macro thunk #>) (macro keys (obj) @@ -292,6 +308,9 @@ (macro arguments () ["(Array.prototype.slice.apply(arguments))"]) +(macro argument (n) + '(get arguments @n)) + (macro scoped (...body) '(call (lambda @{node this args []} ...@body))) @@ -306,9 +325,6 @@ ] @obj)) -(macro match? (regexp string) - '(send @string match @regexp)) - (macro switch (obj ...cases) ["(function() {" (indent ["switch(" (transpile obj) ") {" @@ -377,6 +393,7 @@ (macro includes? (list item) '(!= -1 (send @list index-of @item))) + (macro excludes? (list item) '(= -1 (send @list index-of @item))) diff --git a/lib/browser.js b/lib/browser.js index 9a00bfa..4738d81 100644 --- a/lib/browser.js +++ b/lib/browser.js @@ -748,6 +748,7 @@ "tick": "[`']", "hat": "(\\^)", "dots": "(\\.+)", + "argPlaceholder": "(#[0-9]+)", "otherChar": "([#><=!\\+\\/\\*-]+)", "openExpression": "(\\(|\\{|\\[)", "closeExpression": "(\\)|\\}|\\])", @@ -755,9 +756,9 @@ "whitespace": "\\s", "ignored": "." }; - (parser)["tokenPrecedence"] = [ "regex", "comment", "string", "number", "dots", "tick", "hat", "at", "special", "literal", "otherChar", "openExpression", "closeExpression", "newline", "whitespace", "ignored" ]; + (parser)["tokenPrecedence"] = [ "regex", "comment", "string", "number", "dots", "tick", "hat", "at", "special", "literal", "argPlaceholder", "otherChar", "openExpression", "closeExpression", "newline", "whitespace", "ignored" ]; (parser)["orderedRegexes"] = parser.tokenPrecedence.map((function(x) { - /* /Users/jbr/code/sibilant/src/parser.sibilant:39:23 */ + /* /Users/jbr/code/sibilant/src/parser.sibilant:41:23 */ var r = (new RegExp(("^" + (parser.tokens)[x]), undefined)); (r)["name"] = x; @@ -766,12 +767,12 @@ var orderedRegexes = parser.orderedRegexes; (sibilant)["nodeCache"] = (sibilant.nodeCache || { }); var nodeId = (function nodeId$(node) { - /* node-id /Users/jbr/code/sibilant/src/parser.sibilant:48:0 */ + /* node-id /Users/jbr/code/sibilant/src/parser.sibilant:49:0 */ return ((nodeId.lastId)++); }); var cacheNode = (function cacheNode$(node) { - /* cache-node /Users/jbr/code/sibilant/src/parser.sibilant:50:0 */ + /* cache-node /Users/jbr/code/sibilant/src/parser.sibilant:51:0 */ var id = nodeId(node); (sibilant.nodeCache)[id] = node; @@ -779,22 +780,16 @@ }); (nodeId)["lastId"] = 0; parser.parse = (function parser$parse$(string, context) { - /* parser.parse /Users/jbr/code/sibilant/src/parser.sibilant:57:1 */ - - var context = (function() { - if (context) { - return context; - } else { - return { - position: 0, - stack: [], - line: 1, - lastNewline: 0, - col: 0 - }; - } - })(); - var match = true, + /* parser.parse /Users/jbr/code/sibilant/src/parser.sibilant:58:0 */ + + var context = (context || { + position: 0, + stack: [], + line: 1, + lastNewline: 0, + col: 0 + }), + match = true, regexName = null, remainingInput = string; (function() { @@ -802,7 +797,7 @@ while (match) { $_symbol10_$ = (function() { detect(orderedRegexes, (function(r) { - /* /Users/jbr/code/sibilant/src/parser.sibilant:69:20 */ + /* /Users/jbr/code/sibilant/src/parser.sibilant:70:20 */ match = r.exec(remainingInput); regexName = r.name; @@ -1199,19 +1194,32 @@ })(); return undefined; }); + macros.meta = (function macros$meta$(body) { + /* ^meta /Users/jbr/code/sibilant/src/macros.sibilant:105:0 */ + + var body = Array.prototype.slice.call(arguments, 0); + + var js = outputFormatter(macros.scoped.apply(this, body)); + (function() { + if (sibilant.debug) { + return console.log(js); + } + })(); + return outputFormatter(eval(js)); + }); macros.concat = (function macros$concat$(args) { - /* ^concat /Users/jbr/code/sibilant/src/macros.sibilant:105:0 */ + /* ^concat /Users/jbr/code/sibilant/src/macros.sibilant:111:0 */ var args = Array.prototype.slice.call(arguments, 0); return [ "(", interleave(" + ", map(args, transpile)), ")" ]; }); macros.reverse = (function macros$reverse$(arr) { - /* ^reverse /Users/jbr/code/sibilant/src/macros.sibilant:108:0 */ + /* ^reverse /Users/jbr/code/sibilant/src/macros.sibilant:114:0 */ var reversed = []; arr.forEach((function(item) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:110:5 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:116:5 */ return reversed.unshift(item); })); @@ -1219,7 +1227,7 @@ }); var reverse = macros.reverse; macros.lambda = (function macros$lambda$(argsOrOptions, body) { - /* ^lambda /Users/jbr/code/sibilant/src/macros.sibilant:115:0 */ + /* ^lambda /Users/jbr/code/sibilant/src/macros.sibilant:121:0 */ var body = Array.prototype.slice.call(arguments, 1); @@ -1247,13 +1255,13 @@ } })(), rest = detect(args, (function(arg) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:128:23 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:134:23 */ return node__QUERY(arg, "dots"); })); var thisNode = this, node = detect([ argsOrOptions.node, thisNode, argsOrOptions.name, args, (body)[0] ], (function(n) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:133:16 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:139:16 */ return (node__QUERY(n) && (n)["file"]); })); @@ -1289,7 +1297,7 @@ }); (macros)["#"] = macros.lambda; macros.quotedHash = (function macros$quotedHash$(pairs) { - /* ^quoted-hash /Users/jbr/code/sibilant/src/macros.sibilant:151:0 */ + /* ^quoted-hash /Users/jbr/code/sibilant/src/macros.sibilant:157:0 */ var pairs = Array.prototype.slice.call(arguments, 0); @@ -1300,7 +1308,7 @@ return value; }); macros.hash = (function macros$hash$(pairs) { - /* ^hash /Users/jbr/code/sibilant/src/macros.sibilant:158:0 */ + /* ^hash /Users/jbr/code/sibilant/src/macros.sibilant:164:0 */ var pairs = Array.prototype.slice.call(arguments, 0); @@ -1311,7 +1319,7 @@ })(); var quoteKeys = macros.hash.quoteKeys, pairStrings = bulkMap(pairs, (function(key, value) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:164:39 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:170:39 */ return [ (function() { if ((quoteKeys && (!node__QUERY(key, "string")))) { @@ -1330,7 +1338,7 @@ })(); }); var qescape = (function qescape$(content) { - /* qescape /Users/jbr/code/sibilant/src/macros.sibilant:175:0 */ + /* qescape /Users/jbr/code/sibilant/src/macros.sibilant:181:0 */ return (function() { if ((!((typeof content !== "undefined") && (content !== null)))) { @@ -1344,14 +1352,14 @@ })(); }); var logPretty = (function logPretty$(label, arg) { - /* log-pretty /Users/jbr/code/sibilant/src/macros.sibilant:182:0 */ + /* log-pretty /Users/jbr/code/sibilant/src/macros.sibilant:188:0 */ console.log((label + ": " + prettify(arg))); return arg; }); var prettyLog = logPretty; macros.quote = (function macros$quote$(content) { - /* ^quote /Users/jbr/code/sibilant/src/macros.sibilant:188:0 */ + /* ^quote /Users/jbr/code/sibilant/src/macros.sibilant:194:0 */ return (function() { if (typeof(content) === "string") { @@ -1368,6 +1376,22 @@ return [ "\"", mapNode(transpile(content), qescape), "\"" ]; } })(); + } else if (node__QUERY(content, "bracket")) { + return (function() { + if ((Object.keys(findUnquotes(content)))["length"]) { + return macros.call("macros.expandQuote.call", "this", macros.quote(content.nodeId), macros.quotedHash.apply(this, alternatingKeysAndValues(findUnquotes(content)))); + } else { + return macros.list.apply(this, map(content.contents, macros.quote)); + } + })(); + } else if (node__QUERY(content, "brace")) { + return (function() { + if ((Object.keys(findUnquotes(content)))["length"]) { + return macros.call("macros.expandQuote.call", "this", macros.quote(content.nodeId), macros.quotedHash.apply(this, alternatingKeysAndValues(findUnquotes(content)))); + } else { + return macros.hash.apply(this, map(content.contents, macros.quote)); + } + })(); } else { console.log(("unknown content" + prettify(content))); return content; @@ -1375,13 +1399,13 @@ })(); }); macros.debug = (function macros$debug$(val) { - /* ^debug /Users/jbr/code/sibilant/src/macros.sibilant:201:0 */ + /* ^debug /Users/jbr/code/sibilant/src/macros.sibilant:220:0 */ (sibilant)["debug"] = eval(outputFormatter(transpile(val))); return null; }); var mapNode = (function mapNode$(node, fn) { - /* map-node /Users/jbr/code/sibilant/src/macros.sibilant:204:0 */ + /* map-node /Users/jbr/code/sibilant/src/macros.sibilant:223:0 */ return (function() { if (node__QUERY(node)) { @@ -1394,7 +1418,7 @@ return mappedNode; } else if (((node) && typeof (node) === "object" && (node).constructor.name === "Array")) { return map(node, (function(c) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:213:32 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:232:32 */ return mapNode(c, fn); })); @@ -1404,7 +1428,7 @@ })(); }); var eachNode = (function eachNode$(node, fn) { - /* each-node /Users/jbr/code/sibilant/src/macros.sibilant:216:0 */ + /* each-node /Users/jbr/code/sibilant/src/macros.sibilant:235:0 */ return (function() { if (node__QUERY(node)) { @@ -1415,7 +1439,7 @@ })(); } else if (((node) && typeof (node) === "object" && (node).constructor.name === "Array")) { return node.forEach((function(c) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:218:22 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:237:22 */ return eachNode(c, fn); })); @@ -1425,7 +1449,7 @@ })(); }); var mapNodeForQuoteExpansion = (function mapNodeForQuoteExpansion$(node, expansions) { - /* map-node-for-quote-expansion /Users/jbr/code/sibilant/src/macros.sibilant:222:0 */ + /* map-node-for-quote-expansion /Users/jbr/code/sibilant/src/macros.sibilant:241:0 */ return (function() { if (node__QUERY(node)) { @@ -1445,7 +1469,7 @@ return mappedNode; } else if (((node) && typeof (node) === "object" && (node).constructor.name === "Array")) { return map(node, (function(c) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:233:21 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:252:21 */ return mapNodeForQuoteExpansion(c, expansions); })); @@ -1455,22 +1479,22 @@ })(); }); macros.expandQuote = (function macros$expandQuote$(nodeId, expansions) { - /* ^expand-quote /Users/jbr/code/sibilant/src/macros.sibilant:238:0 */ + /* ^expand-quote /Users/jbr/code/sibilant/src/macros.sibilant:257:0 */ var expandedNodes = mapNodeForQuoteExpansion((sibilant.nodeCache)[nodeId], expansions); return transpile(expandedNodes); }); var unquote__QUERY = (function unquote__QUERY$(node) { - /* unquote? /Users/jbr/code/sibilant/src/macros.sibilant:244:0 */ + /* unquote? /Users/jbr/code/sibilant/src/macros.sibilant:263:0 */ return node__QUERY(node, "at"); }); var findUnquotes = (function findUnquotes$(node) { - /* find-unquotes /Users/jbr/code/sibilant/src/macros.sibilant:246:0 */ + /* find-unquotes /Users/jbr/code/sibilant/src/macros.sibilant:265:0 */ var unquotes = { }; eachNode(node, (function(n) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:248:21 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:267:21 */ (function() { if (unquote__QUERY(n)) { @@ -1482,13 +1506,13 @@ return unquotes; }); var spliceDots = (function spliceDots$(node) { - /* splice-dots /Users/jbr/code/sibilant/src/macros.sibilant:254:0 */ + /* splice-dots /Users/jbr/code/sibilant/src/macros.sibilant:273:0 */ (function() { - if (((node.contents) && typeof (node.contents) === "object" && (node.contents).constructor.name === "Array")) { + if ((node && ((node.contents) && typeof (node.contents) === "object" && (node.contents).constructor.name === "Array"))) { var contents = []; node.contents.forEach((function(content) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:257:11 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:276:11 */ return (function() { if ((node__QUERY(content, "dots") && ((content.contents) && typeof (content.contents) === "object" && (content.contents).constructor.name === "Array") && (content.contents.length === 1) && (((content.contents)[0]) && typeof ((content.contents)[0]) === "object" && ((content.contents)[0]).constructor.name === "Array"))) { @@ -1504,16 +1528,16 @@ return node; }); var alternatingKeysAndValues = (function alternatingKeysAndValues$(hash) { - /* alternating-keys-and-values /Users/jbr/code/sibilant/src/macros.sibilant:269:0 */ + /* alternating-keys-and-values /Users/jbr/code/sibilant/src/macros.sibilant:288:0 */ return flatten(map(Object.keys(hash), (function(key) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:271:19 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:290:19 */ return [ key, (hash)[key] ]; }))); }); macros.list = (function macros$list$(args) { - /* ^list /Users/jbr/code/sibilant/src/macros.sibilant:274:0 */ + /* ^list /Users/jbr/code/sibilant/src/macros.sibilant:293:0 */ var args = Array.prototype.slice.call(arguments, 0); @@ -1523,16 +1547,16 @@ return "[]"; } else { var simpleList = (function simpleList$(args) { - /* simple-list /Users/jbr/code/sibilant/src/macros.sibilant:278:12 */ + /* simple-list /Users/jbr/code/sibilant/src/macros.sibilant:297:12 */ return [ "[ ", interleave(", ", map(args, (function(arg) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:279:50 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:298:50 */ return arg.transpiled; }))), " ]" ]; }); args.forEach((function(arg) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:281:27 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:300:27 */ return (function() { if (node__QUERY(arg, "dots")) { @@ -1545,7 +1569,7 @@ })(); })); argSegments = map(argSegments, (function(segment) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:287:38 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:306:38 */ return (function() { if (((segment) && typeof (segment) === "object" && (segment).constructor.name === "Array")) { @@ -1566,13 +1590,13 @@ })(); }); macros.call = (function macros$call$(fnName, args) { - /* ^call /Users/jbr/code/sibilant/src/macros.sibilant:297:0 */ + /* ^call /Users/jbr/code/sibilant/src/macros.sibilant:316:0 */ var args = Array.prototype.slice.call(arguments, 1); return (function() { if (any__QUERY(args, (function(arg) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:298:20 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:317:20 */ return node__QUERY(arg, "dots"); }))) { @@ -1583,7 +1607,7 @@ })(); }); macros.dots = (function macros$dots$(contents) { - /* ^dots /Users/jbr/code/sibilant/src/macros.sibilant:303:0 */ + /* ^dots /Users/jbr/code/sibilant/src/macros.sibilant:322:0 */ var contents = Array.prototype.slice.call(arguments, 0); diff --git a/lib/browser.map b/lib/browser.map index 576b8fb..65ae056 100644 --- a/lib/browser.map +++ b/lib/browser.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/browser.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant","/Users/jbr/code/sibilant/include/functional.sibilant","/Users/jbr/code/sibilant/src/colors.sibilant","/Users/jbr/code/sibilant/src/pretty-printer.sibilant","/Users/jbr/code/sibilant/src/output-formatter.sibilant","/Users/jbr/code/sibilant/src/parser.sibilant","/Users/jbr/code/sibilant/src/restructurer.sibilant","/Users/jbr/code/sibilant/src/macros.sibilant","/Users/jbr/code/sibilant/src/transpiler.sibilant","/Users/jbr/code/sibilant/src/require-and-include.sibilant"],"names":[],"mappings":"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","sourcesContent":["(meta \"//# sourceMappingURL=browser.map\\n\")\n\n(chainable $ $.get)\n\n((#(root)\n (var sibilant {} exports sibilant)\n (def error (str) (throw str))\n (def inspect (item) (if item.to-source (item.to-source) (item.to-string)))\n (set root 'sibilant sibilant)\n\n (include \"../include/functional\")\n (include \"./pretty-printer\")\n (include \"./output-formatter\")\n (include \"../include/functional\")\n (include \"./parser\")\n (include \"./restructurer\")\n (include \"./macros\")\n (include \"./transpiler\")\n (include \"./require-and-include\")\n\n ; (var package (include \"../package.son\"))\n (var package {version \"BROWSER\"})\n (def sibilant.package-info () package)\n\n (def sibilant.version-string ()\n (concat package.name \" browser version \" package.version))\n\n (set sibilant 'dir \"browser\")\n\n (when (defined? $)\n ($ (#>\n (var sibilant root.sibilant\n scripts ($.make-array ($ \"script[type=\\\"application/sibilant\\\"][src]\"\n (map (#> this.src)))))\n\n (def sibilant.initialize () false)\n\n \n (def eval-code (js)\n ((new Function js)))\n\n (def sibilant.include (url)\n ($.get url (done (#(data) (eval-code (sibilize data))))))\n\n (def sibilant.load-macros (fn)\n (chain (sibilant.include \"/javascripts/macros.sibilant\")\n (done (#> (when (function? fn) (fn sibilant))))))\n\n (chain (sibilant.load-macros) (then (map scripts sibilant.include))))))) this)\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)","(def bulk-map (arr fn)\n (var index 0\n group-size fn.length\n ret-arr [])\n\n (while (< index arr.length)\n (send ret-arr push\n (apply fn (send arr slice\n index (+ index group-size))))\n (incr-by index group-size))\n ret-arr)\n\n(def inject (start items fn)\n (var value start)\n (when (list? items)\n (each (item index) items\n (assign value (fn value item index))))\n value)\n\n(def map (items fn)\n (inject [] items\n (#(collector item index)\n (send collector push (fn item index))\n collector)))\n\n(def select (items fn)\n (inject [] items\n (#(collector item index)\n (when (fn item index)\n (send collector push item))\n collector)))\n\n(def detect (items fn)\n (var return-item undefined\n index 0\n items (or items []))\n\n (until (or (= items.length index) return-item)\n (when (fn (get items index) index)\n (assign return-item (get items index)))\n (incr index))\n\n return-item)\n\n(def all? (items fn)\n (undefined? (detect items (#(item index) (not (fn item index))))))\n\n(def none? (items fn)\n (undefined? (detect items fn)))\n\n(def any? (items fn)\n (defined? (detect items fn)))\n\n(def reject (items fn)\n (var args [ items fn ])\n (select items (thunk (not (apply fn arguments)))))\n\n(def compact (arr)\n (select arr (#(item)\n (and\n (!= null item)\n (!= false item)\n (defined? item)))))\n\n(def interleave (glue arr)\n (if (list? glue) (inject [] arr\n (#(collector item index)\n (collector.concat [item (get glue index)])))\n\n \n (inject [(first arr)] (rest arr)\n (#(collector item index) (collector.concat [glue item])))))\n\n\n(def flatten (...items)\n (inject [] items\n (#(collector item)\n (collector.concat\n (if (list? item)\n (apply flatten item)\n item)))))\n\n\n(def recurse-map (item fn)\n (if (list? item) (map item (#(subitem) (recurse-map subitem fn)))\n (fn item)))\n\n(def pluck (items attribute)\n (map items (#(item) (get item attribute))))\n\n(def merge-into (into from)\n (each (key) (keys from) (set into key (get from key)))\n into)\n\n(def clone (object)\n (inject {} (keys object)\n (#(collector key)\n (set collector key (get object key))\n collector)))\n\n(def map-values (object fn)\n (inject {} (keys object)\n (#(collector key index)\n (set collector key (fn (get object key) key))\n collector)))\n\n(def merge-with (into from)\n (merge-into (clone into) from))\n","(def log! (...args)\n (send (inspect! ..args ) for-each (#(o) (console.log o))))\n\n(def inspect! (...args)\n (args.map (#(arg) (util.inspect arg { colors false depth 3}))))\n\n(def color (code items depth)\n (concat code (join \"\" items) \"\\033[0m\"))\n\n(def black (...args) (color \"\\033[0;30m\" args))\n(def red (...args) (color \"\\033[0;31m\" args))\n(def green (...args) (color \"\\033[0;32m\" args))\n(def brown (...args) (color \"\\033[0;33m\" args))\n(def blue (...args) (color \"\\033[0;34m\" args))\n(def purple (...args) (color \"\\033[0;35m\" args))\n(def cyan (...args) (color \"\\033[0;36m\" args))\n(def gray (...args) (color \"\\033[0;37m\" args))\n(def bold-gray (...args) (color \"\\033[1;30m\" args))\n(def bold-red (...args) (color \"\\033[1;31m\" args))\n(def bold-green (...args) (color \"\\033[1;32m\" args))\n(def yellow (...args) (color \"\\033[1;33m\" args))\n(def bold-blue (...args) (color \"\\033[1;34m\" args))\n(def bold-purple (...args) (color \"\\033[1;35m\" args))\n(def bold-cyan (...args) (color \"\\033[1;36m\" args))\n(def white (...args) (color \"\\033[1;37m\" args))\n","(include \"./colors.sibilant\")\n\n(def sibilant.pretty-print (node color)\n (when (undefined? color) (assign color true))\n\n (real-newlines (if (node? node) (do\n (var pretty-printer (or (get sibilant.pretty-print node.type)\n sibilant.pretty-print.default))\n (pretty-printer node color))\n (list? node)\n (concat (if color (black \"[\") \"\")\n (join (if color (black \",\") \"\") (map node prettify))\n (if color (black \"]\") \"\"))\n\n color (red (util.inspect node))\n (real-newlines (util.inspect node)))))\n\n\n(def sibilant.pretty-print.default (node color)\n (real-newlines (sibilant.pretty-print.colorize node color\n (concat\n (if (and node.modifiers node.modifiers.length)\n (join \"\" (map node.modifiers (#(n) (sibilant.pretty-print n color)))) \"\")\n node.token\n (if (and node.contents node.contents.length)\n (join \" \" (map node.contents (#(n) (sibilant.pretty-print n color)))) \"\")\n (or (get acceptable-pairs node.token) \"\")))))\n\n(def sibilant.pretty-print.root (node color)\n (join \"\\n\" (map node.contents (#(n) (sibilant.pretty-print n color)))))\n\n(def sibilant.pretty-print.output (node color)\n (concat (if color (black \"{\") \"\")\n (if (list? node.contents)\n (join (if color (black \",\") \"\")\n (map node.contents (#(c) (sibilant.pretty-print.colorize node color (prettify c)))))\n (sibilant.pretty-print.colorize node color node.contents))\n (if color (black \"}\") \"\")))\n\n(def real-newlines (node)\n (chain node (split \"\\\\n\") (join \"\\n\")))\n\n\n(def sibilant.pretty-print.colorize (node color string)\n (if (not color) string\n (= node.hint 'macro) (yellow string)\n (= node.type 'output) (purple string)\n (green string)))\n\n(var prettify sibilant.pretty-print)","(def output-formatter (node)\n (if (list? node) (join \"\" (map node output-formatter))\n (and (node? node) (= node.type 'output))\n (output-formatter node.contents)\n (or (string? node) (number? node)) node\n (not (exists? node)) \"\"\n (node? node) (do\n (console.log \"WE SHOULD NOT BE HERE\")\n (output-formatter (transpile node)))))\n\n(set sibilant 'output-formatter output-formatter)","(var parser {})\n(set sibilant 'parser parser)\n(set parser 'tokens\n { 'regex \"(\\\\/(\\\\\\\\\\\\\\/|[^\\\\/\\\\n])+\\\\/[glim]*)\"\n 'comment \"(;.*)\"\n 'string \"(\\\"(([^\\\"]|(\\\\\\\\\\\"))*[^\\\\\\\\])?\\\")\"\n 'number \"(-?[0-9][0-9.,]*)\"\n 'literal \"(-?[*.$a-zA-Z_][*.a-zA-Z0-9-_]*(\\\\?|!)?)\"\n 'special \"([&'])\"\n 'at \"@\"\n 'tick \"[`']\"\n 'hat \"(\\\\^)\"\n 'dots \"(\\\\.+)\"\n 'other-char \"([#><=!\\\\+\\\\/\\\\*-]+)\"\n 'open-expression \"(\\\\(|\\\\{|\\\\[)\"\n 'close-expression \"(\\\\)|\\\\}|\\\\])\"\n 'newline \"\\\\n\"\n 'whitespace \"\\\\s\"\n 'ignored \".\" })\n\n(set parser 'token-precedence [ 'regex\n 'comment\n 'string\n 'number\n 'dots\n 'tick\n 'hat\n 'at\n 'special\n 'literal\n 'other-char\n 'open-expression\n 'close-expression\n 'newline\n 'whitespace\n 'ignored\n ]\n 'ordered-regexes (parser.token-precedence.map\n (#(x)\n (var r (regex (\"^\" (get parser.tokens x))))\n (set r 'name x)\n r)))\n\n\n(var ordered-regexes parser.ordered-regexes)\n\n(set sibilant 'node-cache (or sibilant.node-cache {}))\n(def node-id (node)\n (incr node-id.last-id))\n(def cache-node (node)\n (var id (node-id node))\n (set sibilant.node-cache id node)\n (merge-into node {node-id id}))\n\n(set node-id 'last-id 0)\n\n (def parser.parse (string context)\n (var context (if context context { position 0\n stack []\n line 1\n last-newline 0 col 0}))\n\n (var match true\n regex-name null\n remaining-input string)\n\n (while match\n (detect ordered-regexes\n (#(r)\n (assign match (r.exec remaining-input)\n regex-name r.name)\n match))\n\n (when (exists? match)\n (var match-string (first match)\n length (length match-string))\n \n (context.stack.push\n (cache-node { contents []\n dir sibilant.dir\n file sibilant.file\n token match-string\n type regex-name\n start context.position\n line context.line\n col context.col\n length length }))\n\n (if\n (= 'newline regex-name)\n (do\n (incr context.line)\n (set context\n 'col 0\n 'last-newline context.position))\n\n\n (and (= 'string regex-name) (!= -1 (match-string.index-of \"\\n\")))\n (do\n (var string-newline-count (- (length (match-string.split \"\\n\")) 1))\n (incr-by context.line string-newline-count)\n (set context 'col (- length (match-string.last-index-of \"\\n\"))))\n\n (incr-by context.col length))\n\n (incr-by context.position length)\n (assign remaining-input (if remaining-input.length\n (remaining-input.slice length)\n \"\"))))\n context.stack)\n\n(var parse parser.parse)\n","(var restructurers {}\n acceptable-pairs { \"(\" \")\" \"[\" \"]\" \"{\" \"}\" }\n bracket-types { \"(\" 'expression\n \"[\" 'bracket\n \"{\" 'brace })\n\n(def restructure (input)\n (var output { type 'root\n contents []\n file sibilant.file\n col 0\n line 1 }\n context { parse-stack [output]\n output output\n input input\n specials 0 })\n\n (inject context input\n (#(context token index)\n (var restructurer (or (get restructurers token.type) restructurers.default))\n (restructurer token context index)))\n output)\n\n(set sibilant 'restructure restructure)\n\n(def restructurers.open-expression (token context)\n (var first (first context.parse-stack))\n (set token\n 'contents []\n 'type (get bracket-types token.token)\n 'parent first)\n (accept-specials token context)\n (send first.contents push token)\n (context.parse-stack.unshift token)\n context)\n\n\n(def restructurers.close-expression (node context index)\n (var first (first context.parse-stack))\n\n (when (!= (get acceptable-pairs first.token) node.token)\n (throw (\"trying to close \" (yellow (sibilant.pretty-print first))\n \"\\n on \"first.file\":\"first.line\":\"first.col\n \"\\n with \"(sibilant.pretty-print node)\n \"\\n on \"node.file\":\"node.line\":\"node.col\n \"\\n\")))\n\n (set first 'end node.end)\n (context.parse-stack.shift)\n (close-specials first context)\n (when (zero? context.parse-stack.length)\n (throw (\"unbalanced parens:\\n\"\n (call inspect parse-stack))))\n context)\n\n(def open-special (node context)\n (incr context.specials)\n\n (var first (first context.parse-stack))\n (set node\n 'contents []\n 'parent first)\n\n (first.contents.push node)\n (context.parse-stack.unshift node)\n context)\n\n(def accept-specials (node context)\n (set node 'specials (get context 'specials))\n (set context 'specials 0)\n context)\n\n(def close-specials (node context)\n (when (> node.specials 0)\n (decr node.specials)\n (context.parse-stack.shift)\n (close-specials node context))\n context)\n\n(def restructurers.hat (node context index) (open-special node context))\n(def restructurers.dots (node context index) (open-special node context))\n(def restructurers.tick (node context index) (open-special node context))\n(def restructurers.at (node context index) (open-special node context))\n\n(def restructurers.whitespace (token context index) context)\n(def restructurers.newline (token context index) context)\n(def restructurers.ignored (token context index) context)\n\n(def restructurers.default (token context index)\n (accept-specials token context)\n (send (get (first context.parse-stack) 'contents) push token)\n (close-specials token context))\n","(var macros {})\n(set sibilant 'macros macros 'debug false)\n\n\n(def recurse-indent (...args)\n (map args\n (#(arg)\n (if (node? arg) (do (set arg 'contents (apply recurse-indent (compact (flatten arg.contents)))) arg)\n (list? arg) (apply recurse-indent arg)\n (number? arg) (arg.to-string)\n (string? arg)\n (chain arg\n (replace (regex \"\\\\n\" 'g) \"\\n \")\n (replace (regex \"\\\\n\\\\s+\\\\n\" 'g) \"\\n\\n\"))\n\n arg))))\n\n(def indent (...args)\n [\"\\n \" (recurse-indent args) \"\\n\"])\n\n\n(def escape-regex (string)\n (string.replace (regex \"[\\\\-\\\\[\\\\]\\\\/\\\\{\\\\}\\\\(\\\\)\\\\*\\\\+\\\\?\\\\.\\\\\\\\\\^\\\\$\\\\|]\" 'g) \"\\\\$&\"))\n\n(def ^return (token)\n (when sibilant.debug (console.log \"returning \" (prettify token)))\n (var default-return (as-statement [\"return \" (transpile token)]))\n (if (and token token.contents token.contents.length)\n (switch (get (first token.contents) 'token)\n (('return 'throw 'do) (transpile token))\n ('delete\n (var delete-macro (get macros 'delete))\n (if (< token.contents.length 3) default-return\n [ (as-statement (apply delete-macro (token.contents.slice 1 -1)))\n \"\\nreturn \"\n (as-statement (call delete-macro (last token.contents)))]))\n ('assign\n (if (< token.contents.length 4) default-return\n [ (apply ^assign\n (token.contents.slice 1 (- token.contents.length 2)))\n \"\\nreturn \"\n (apply ^assign (token.contents.slice -2))]))\n ('var\n [ (transpile token) \"\\nreturn \" (transpile (if (even? token.contents.length)\n (last token.contents)\n (first (token.contents.slice -2))))])\n ('set\n (if (< token.contents.length 5) default-return\n (do\n (var obj (second token.contents)\n non-return-part (token.contents.slice 2 (- token.contents.length 2))\n return-part (token.contents.slice -2))\n (non-return-part.unshift obj)\n (return-part.unshift obj)\n [ (^set ...non-return-part)\n \"\\nreturn \"\n (^set ...return-part)])))\n (default default-return))\n default-return))\n\n\n(def statement? (transpiled)\n (if (node? transpiled) (statement? transpiled.contents)\n (list? transpiled) (statement? (last transpiled))\n (string? transpiled) (= \";\" (last transpiled))\n false))\n\n(def as-statement (node)\n (var transpiled (transpile node))\n\n (if (empty-node? transpiled) undefined\n (statement? transpiled) transpiled\n [ transpiled \";\" ]))\n\n(def ^do (...body)\n (if (= 1 body.length) (^return (first body))\n body.length [ (interleave \"\\n\" (map (body.slice 0 -1) (#(node) (as-statement node))))\n \"\\n\"\n (^return (last body)) ]\n \"\"))\n\n(def ^empty-list () 'null)\n\n(def ^def (fn-name args ...body)\n (var fn-name-tr (transpile fn-name) this-node this)\n\n (as-statement [ (if (match? (regex \"\\\\.\") (output-formatter fn-name-tr)) \"\" \"var \")\n fn-name-tr \" = \"\n (^lambda { name fn-name args args node this-node } ...body )\n ] ))\n\n(def ^macro (name args ...body)\n (var name-tr (output-formatter (transpile name))\n options { name name args args node this}\n js (output-formatter (^lambda options ...body)))\n\n (when sibilant.debug (console.log js))\n \n (try (set macros name-tr (eval js))\n (error (\"error in parsing macro \"\n (sibilant.pretty-print name) \":\\n\" js)))\n\n undefined)\n\n(def ^concat (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n\n(def ^reverse (arr)\n (var reversed [])\n (each (item) arr (reversed.unshift item))\n reversed)\n\n(var reverse ^reverse)\n\n(def ^lambda (args-or-options ...body)\n (when sibilant.debug\n (console.log args-or-options))\n (var args (or (get args-or-options 'args) args-or-options)\n body (or (get args-or-options 'body) body)\n args (if (node? args 'expression) args.contents\n (and (node? args) (empty? body)) (do (assign body [ args ]) [])\n args)\n name (when args-or-options.name\n (chain (output-formatter (transpile args-or-options.name))\n (replace (regex \"\\\\W+\" 'g) \"$\")\n (concat \"$\")))\n rest (detect args\n (#(arg) (node? arg 'dots))))\n\n (var this-node this\n node (detect\n [ args-or-options.node this-node args-or-options.name args (first body) ]\n (#(n) (and (node? n) (get n 'file)))))\n [\"(function\" (if name (\" \" name) \"\") \"(\"\n (interleave \", \" (map args transpile)) \") {\"\n (if (or args-or-options.name node)\n (indent [\"/*\"\n (if args-or-options.name (\" \" (sibilant.pretty-print args-or-options.name false)) \"\")\n (if node (\" \" node.file \":\" node.line \":\" node.col) \"\")\n \" */\"]) \"\")\n (when (exists? rest)\n (indent (as-statement [\"var \" (transpile rest)\n \" = Array.prototype.slice.call(arguments, \"\n (- args.length 1) \")\"])))\n\n (indent (apply ^do body))\n \"})\"])\n\n(set macros \"#\" ^lambda)\n\n(def ^quoted-hash (...pairs)\n (var cached-quote-value ^hash.quote-keys)\n (set ^hash 'quote-keys true)\n (var value (^hash ...pairs))\n (set ^hash 'quote-keys cached-quote-value)\n value)\n\n(def ^hash (...pairs)\n (when (odd? pairs.length)\n (error (\"odd number of key-value pairs in hash: \"\n (call inspect pairs))))\n\n (var quote-keys ^hash.quote-keys\n pair-strings (bulk-map pairs (#(key value)\n [ (if (and quote-keys (not (node? key 'string)))\n [\"\\\"\" (transpile key) \"\\\"\"]\n (transpile key))\n \": \"\n (transpile value)])))\n (if (>= 1 pair-strings.length)\n [\"{ \" (interleave \", \" pair-strings) \" }\"]\n [\"{\" (indent (interleave \",\\n\" pair-strings)) \"}\"]))\n\n\n(def qescape (content)\n (if (not (exists? content)) \"\"\n (string? content) (chain content\n (replace (regex \"\\\"\" 'g) \"\\\\\\\"\")\n (replace (regex \"\\\\n\" 'g) \"\\\\n\\\" +\\n\\\"\"))\n content))\n\n(def log-pretty (label arg)\n (console.log (concat label \": \" (prettify arg)))\n arg)\n\n(var pretty-log log-pretty)\n\n(def ^quote (content)\n (if (string? content) (\"\\\"\" (qescape content) \"\\\"\")\n (number? content) (^quote (content.to-string))\n (node? content 'literal) [\"\\\"\" (transpile content) \"\\\"\"]\n (node? content 'expression)\n (if (length (keys (find-unquotes content)))\n (^call 'macros.expand-quote.call 'this (^quote content.node-id)\n (apply ^quoted-hash (alternating-keys-and-values (find-unquotes content))))\n [\"\\\"\" (map-node (transpile content) qescape) \"\\\"\"])\n (do\n (console.log (\"unknown content\" (prettify content)))\n content)))\n\n(def ^debug (val)\n (set sibilant 'debug (eval (output-formatter (transpile val)))) null)\n\n(def map-node (node fn)\n (if (node? node)\n (do\n (var mapped-node (fn node))\n (when (node? mapped-node)\n (set mapped-node 'contents (map-node mapped-node.contents fn)))\n\n mapped-node)\n\n (list? node) (map node (#(c) (map-node c fn)))\n (fn node)))\n\n(def each-node (node fn)\n (if (node? node) (when (fn node) (each-node node.contents fn))\n (list? node) (each (c) node (each-node c fn))\n (fn node)))\n\n\n(def map-node-for-quote-expansion (node expansions)\n (if (node? node)\n (do\n (var mapped-node (if (expansions.has-own-property node.node-id) (get expansions node.node-id) (clone node)))\n (when (node? mapped-node)\n (set mapped-node 'contents (map-node-for-quote-expansion mapped-node.contents expansions)))\n\n (assign mapped-node (splice-dots mapped-node))\n mapped-node)\n\n (list? node)\n (map node (#(c) (map-node-for-quote-expansion c expansions)))\n\n node))\n\n\n(def ^expand-quote (node-id expansions)\n (var expanded-nodes\n (map-node-for-quote-expansion (get sibilant.node-cache node-id) expansions))\n\n (transpile expanded-nodes))\n\n(def unquote? (node) (node? node 'at))\n\n(def find-unquotes (node)\n (var unquotes {})\n (each-node node (#(n)\n (when (unquote? n)\n (set unquotes n.node-id (transpile n)))\n (not (node? n 'tick))))\n unquotes)\n\n(def splice-dots (node)\n (when (list? node.contents)\n (var contents [])\n (each (content) node.contents\n (if (and (node? content 'dots)\n (list? content.contents)\n (= content.contents.length 1)\n (list? (first content.contents)))\n (contents.push.apply contents (first content.contents))\n (contents.push content)))\n\n (set node 'contents contents))\n node)\n\n\n(def alternating-keys-and-values (hash)\n (flatten (map (keys hash)\n (#(key) [key, (get hash key)]))))\n\n\n(def ^list (...args)\n (var arg-segments [])\n (if (empty? args) \"[]\"\n (do\n (def simple-list (args)\n [\"[ \" (interleave \", \" (map args (#(arg) arg.transpiled))) \" ]\"])\n\n (args.for-each (#(arg)\n (if (node? arg 'dots) (arg-segments.push {transpiled (transpile arg)})\n (list? (last arg-segments)) (send (last arg-segments) push {transpiled (transpile arg)})\n (arg-segments.push [{transpiled (transpile arg)}]))))\n\n (assign arg-segments (map arg-segments\n (#(segment)\n (if (list? segment)\n (simple-list segment)\n segment.transpiled))))\n\n (if (= 1 (length arg-segments))\n (first arg-segments)\n [(first arg-segments) \".concat(\" (interleave \", \" (rest arg-segments))\")\"]))))\n\n\n(def ^call (fn-name ...args)\n (if (any? args (#(arg) (node? arg 'dots)))\n (macros.apply fn-name (macros.list ...args))\n [ (transpile fn-name)\n \"(\" (interleave \", \" (map args transpile)) \")\" ]))\n\n(def ^dots (...contents)\n (transpile contents))\n\n",";; (def flatten-output (nodes)\n;; (inject [] nodes\n;; (#(collector item)\n;; (if (list? item) (apply flatten-output item)\n;; (if \n \n\n(def node? (thing type)\n (and\n (exists? thing)\n (= 'object (typeof thing))\n (string? thing.type)\n (or (undefined? type) (= thing.type type))\n (thing.has-own-property 'contents)))\n\n(def empty-node? (item)\n (if (node? item) (empty-node? item.contents)\n (list? item) (all? item empty-node?)\n (string? item) (item.match (regex \"^\\\\s*$\"))\n (or (= null item)\n (undefined? item)\n (= false item))))\n\n(def compact-node (item)\n (if (node? item) (do\n (set item 'contents (compact-node item.contents))\n (if (and item.contents item.contents.length) item null))\n (list? item) (do\n (var compacted (compact (map item compact-node)))\n (if (and compacted compacted.length) compacted null))\n (if (or (= item \"\") (= item false)) null item)))\n\n(def recurse-transpile (node)\n (if (list? node) (map node recurse-transpile)\n (and (node? node) (!= 'output node.type)) (transpile node)\n (and (node? node) (= 'output node.type)) (do\n (set node 'contents (recurse-transpile node.contents))\n node)\n node))\n\n(def transpile (node preprocessor)\n (if\n (string? node)\n (assign node { type 'js token node contents []})\n\n (number? node)\n (assign node { type 'number token (node.to-string) contents []}))\n \n (if (list? node) node\n (exists? node) (do\n (var transpiler (or (get transpile node.type) transpile.default))\n (var result (transpiler node))\n (var result-node (recurse-transpile (if (node? result) result\n { contents result type 'output })))\n (set result-node\n 'contents (compact (flatten result-node.contents))\n 'source node)\n\n (when sibilant.debug\n (console.log (prettify node)\n (red \"->\")\n (prettify result-node)))\n\n (set node 'transpiled result-node)\n\n \n (if (empty-node? result-node) undefined\n result-node))))\n\n\n(set sibilant 'transpile transpile)\n\n(var reader-macros {})\n\n(def transpile.hat (node)\n (var output (transpile (first node.contents)))\n (set output 'contents [(\"macros.\" (first output.contents))])\n output)\n\n(def transpile.tick (node)\n (^quote.apply node node.contents))\n\n(def transpile.at (node)\n (transpile (first node.contents)))\n\n(def transpile.dots (node)\n (^dots.apply node node.contents))\n\n\n(def transpile.default (node)\n node.token)\n\n(def transpile.output (node)\n node)\n\n(def transpile.number (node)\n (send (parse-float (node.token.replace (regex \",\" 'g) \"\")) to-string))\n\n(def transpile.root (node)\n (if (= 1 node.contents.length)\n (transpile (first node.contents))\n (interleave \"\\n\" (compact (map node.contents as-statement)))))\n\n(def transpile.expression (node preprocessor)\n (if node.contents.length\n (do\n (var head (first node.contents)\n args (rest node.contents)\n macro (get macros (output-formatter (transpile head))))\n\n (when (exists? macro) (set head 'hint 'macro))\n\n (when (and head (= 'string head.type))\n (assign macro macros.concat args node.contents))\n\n (when (undefined? macro)\n (assign macro macros.call args node.contents))\n\n (macro.apply node args))\n\n \"null\"))\n\n(def transpile.bracket (node)\n (apply macros.list node.contents))\n\n(def transpile.brace (node) (apply macros.hash node.contents))\n\n(def transpile.literal (node)\n (var string node.token)\n (inject (chain string\n (replace (regex \"\\\\*\" 'g) \"_\")\n (replace (regex \"\\\\?$\") \"__QUERY\")\n (replace (regex \"!$\") \"__BANG\"))\n (string.match (regex \"-(.)\" 'g))\n (#(return-string match)\n (return-string.replace match\n (send (second match) to-upper-case)))))\n\n(def transpile.string (node)\n (chain node.token (split \"\\n\")\n (join \"\\\\n\\\" +\\n\\\"\")))\n\n(def transpile.comment (node) null)\n\n","(def sibilize (input)\n (sibilant.initialize)\n (output-formatter (transpile (restructure (parse input)))))\n\n(def sourcemap (input)\n (sibilant.initialize)\n (sourcemapper (transpile (restructure (parse input)))))\n\n(set sibilant 'sibilize sibilize)\n\n(def sibilant.version ()\n (get (sibilant.package-info) 'version))\n\n(def sibilant.strip-shebang (data)\n (data.replace (regex \"^#!.*\\\\n\") \"\\n\"))\n\n(set sibilant 'file 'eval.sibilant)\n\n(def with-dir-and-file (dir file fn)\n (var before { dir sibilant.dir\n file sibilant.file })\n (set sibilant\n 'dir dir\n 'file file)\n\n (var retval (fn))\n\n (set sibilant\n 'dir before.dir\n 'file before.file)\n\n retval)\n\n(set sibilant 'source-cache {})\n\n(def sibilant.sibilize-file (file-name)\n (output-formatter (sibilant.transpile-file file-name)))\n\n(def sibilant.sibilize-json (file-name)\n (sibilant.initialize)\n (var before sibilant.macros.hash.quote-keys)\n (set sibilant.macros.hash 'quote-keys true)\n (var content (sibilant.sibilize-file file-name))\n (set sibilant.macros.hash 'quote-keys before)\n content)\n\n(def sibilant.macros.include (file)\n (sibilant.include (eval (output-formatter (transpile file)))))\n\n"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/browser.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant","/Users/jbr/code/sibilant/include/functional.sibilant","/Users/jbr/code/sibilant/src/colors.sibilant","/Users/jbr/code/sibilant/src/pretty-printer.sibilant","/Users/jbr/code/sibilant/src/output-formatter.sibilant","/Users/jbr/code/sibilant/src/parser.sibilant","/Users/jbr/code/sibilant/src/restructurer.sibilant","/Users/jbr/code/sibilant/src/macros.sibilant","/Users/jbr/code/sibilant/src/transpiler.sibilant","/Users/jbr/code/sibilant/src/require-and-include.sibilant"],"names":[],"mappings":"AAAA;;AAIC,UAAG,IAAH;AAAA;AAAA;AAAA,EACE,IAAK,QAAL,GAAc,IAAd;AAAA,MAAiB,OAAjB,GAAyB,QAAzB,CADF;AAAA,EAEE,IAAK,KAAL,oBAAY,GAAZ;AAAA;AAAA;AAAA,IAAiB,iBAAO,GAAP,CAAjB;AAAA,KAFF;AAAA,EAGE,IAAK,OAAL,sBAAc,IAAd;AAAA;AAAA;AAAA,WAAoB;AAAA,UAAI,aAAJ;AAAA,QCyVqB,ODzVD,aAAD,ECyVE,CDzVrB;AAAA;AAAA,QC2VwB,OD3Va,aAAD,EC2VZ,CD3VxB;AAAA;AAAA,QAApB;AAAA,KAHF;AAAA,EAIE,CAAK,IAAL,EAAU,CAAC,QAAD,CAAV,IAAoB,QAApB,CAJF;AAAA,EEJD,IAAK,OAAL,sBAAe,GAAf,EAAmB,EAAnB;AAAA;AAAA;AAAA,IACE,IAAK,KAAL,GAAW,CAAX;AAAA,QACQ,SADR,GACmB,SADnB;AAAA,QAEQ,MAFR,GAEgB,EAFhB,CADF;AAAA,IAKE;AAAA,MD2PO,6BA6DwB;AAAA,aCxTxB,CAAG,KAAH,GAAS,UAAT,CDwTwB;AAAA,QA3Db,eAAgB;AAAA,UC5P1B,MAAN,CAAc,IAAd,CACa,EAAP,CDyBQ,KCzBR,CDyBc,ICzBd,EAAgB,GAAN,CAAU,KAAV,CACM,KADN,EACY,CAAG,KAAH,GAAS,SAAT,CADZ,CAAV,CADN,CDuT6B;AAAA,iBCpTpB,KAAT,IAAe,SDoTc,CA3DG;AAAA,YAAhB,CA2Da;AAAA;AAAA,0BCxT/B;AAAA,QALF;AAAA,WAUE,MAVF;AAAA,KFUG;AAAA,EEEH,IAAK,MAAL,qBAAa,KAAb,EAAmB,KAAnB,EAAyB,EAAzB;AAAA;AAAA;AAAA,IACE,IAAK,KAAL,GAAW,KAAX,CADF;AAAA,IAEE;AAAA,UAAM,EAAO,KAAP,aAAO,KAAP,mBAAO,KAAP,+BAAN;AAAA,QDuK+B,OCtKV,KAAnB,CDgMiB,OChMjB,CDiMU,UCjMH,IDiMG,ECjME,KDiMF;AAAA;AAAA;AAAA,iBChMA,KAAR,GAAe,EAAD,CAAI,KAAJ,EAAU,IAAV,EAAe,KAAf,CAAd,CDgMQ;AAAA,UCjMV,CDsK6B,CCvK/B;AAAA;AAAA,QAFF;AAAA,WAKE,KALF;AAAA,KFFG;AAAA,EESH,IAAK,GAAL,kBAAU,KAAV,EAAgB,EAAhB;AAAA;AAAA;AAAA,WACG,MAAD,CAAQ,EAAR,EAAW,KAAX,EACQ,UAAG,SAAH,EAAa,IAAb,EAAkB,KAAlB;AAAA;AAAA;AAAA,MACQ,SAAN,CAAgB,IAAhB,CAAsB,EAAD,CAAI,IAAJ,EAAS,KAAT,CAArB,CADF;AAAA,aAEE,SAFF;AAAA,MADR,CADF;AAAA,KFTG;AAAA,EEeH,IAAK,MAAL,qBAAa,KAAb,EAAmB,EAAnB;AAAA;AAAA;AAAA,WACG,MAAD,CAAQ,EAAR,EAAW,KAAX,EACQ,UAAG,SAAH,EAAa,IAAb,EAAkB,KAAlB;AAAA;AAAA;AAAA,MACE;AAAA,YAAO,EAAD,CAAI,IAAJ,EAAS,KAAT,CAAN;AAAA,UDyJqB,OCxJb,SAAN,CAAgB,IAAhB,CAAqB,IAArB,CDwJmB,CCzJrB;AAAA;AAAA,UADF;AAAA,aAGE,SAHF;AAAA,MADR,CADF;AAAA,KFfG;AAAA,EEsBH,IAAK,MAAL,qBAAa,KAAb,EAAmB,EAAnB;AAAA;AAAA;AAAA,IACE,IAAK,UAAL,GAAiB,SAAjB;AAAA,QACQ,KADR,GACc,CADd;AAAA,QAEQ,KAFR,GAEc,CAAI,KAAJ,IAAU,EAAV,CAFd,CADF;AAAA,IAKE;AAAA,MD2NO,6BA6DwB;AAAA,aAtDlB,EClON,CAAI,CAAG,YAAH,KAAgB,KAAhB,CAAJ,IAA2B,UAA3B,CDkOM,CAsDkB;AAAA,QA3Db,eAAgB;AAAA,UC5N3B;AAAA,gBAAO,EAAD,CAAI,CAAK,KAAL,EAAW,KAAX,CAAJ,EAAsB,KAAtB,CAAN;AAAA,cD+IwB,OC9Id,UAAR,GAAoB,CAAK,KAAL,EAAW,KAAX,CAApB,CADF;AAAA;AAAA,cDuRwB;AAAA,iBCrRxB,EAAM,KAAN,IDqRwB,CA3DG;AAAA,YAAhB,CA2Da;AAAA;AAAA,0BCxR/B;AAAA,QALF;AAAA,WAUE,UAVF;AAAA,KFtBG;AAAA,EEkCH,IAAK,UAAL,yBAAW,KAAX,EAAiB,EAAjB;AAAA;AAAA;AAAA,WACK,CDkGsC,OClGzB,MAAD,CAAQ,KAAR,EAAc,UAAG,IAAH,EAAQ,KAAR;AAAA;AAAA;AAAA,aAAe,EAAM,EAAD,CAAI,IAAJ,EAAS,KAAT,CAAL,CAAf;AAAA,MAAd,CAAZ,KDkGsD,CAAC,SAAD,CClGtD,CADL;AAAA,KFlCG;AAAA,EEqCH,IAAK,WAAL,0BAAY,KAAZ,EAAkB,EAAlB;AAAA;AAAA;AAAA,WACK,CD+FsC,OC/FzB,MAAD,CAAQ,KAAR,EAAc,EAAd,CAAZ,KD+FsD,CAAC,SAAD,CC/FtD,CADL;AAAA,KFrCG;AAAA,EEwCH,IAAK,UAAL,yBAAW,KAAX,EAAiB,EAAjB;AAAA;AAAA;AAAA,WACK,CD8FuC,OC9F5B,MAAD,CAAQ,KAAR,EAAc,EAAd,CAAV,KD8FuD,CAAC,SAAD,CC9FvD,CADL;AAAA,KFxCG;AAAA,EE2CH,IAAK,MAAL,qBAAa,KAAb,EAAmB,EAAnB;AAAA;AAAA;AAAA,IACE,IAAK,IAAL,GAAU,EAAE,KAAF,EAAQ,EAAR,EAAV,CADF;AAAA,WAEG,MAAD,CAAQ,KAAR,EAAc;AAAA;AAAA;AAAA,aAAO,EAAY,EAAP,CDvBV,KCuBU,CDvBJ,ICuBI,EAAU,SAAV,CAAL,CAAP;AAAA,MAAd,CAFF;AAAA,KF3CG;AAAA,EE+CH,IAAK,OAAL,sBAAc,GAAd;AAAA;AAAA;AAAA,WACM,MAAD,CAAQ,GAAR,EAAY,UAAG,IAAH;AAAA;AAAA;AAAA,aACE,CACC,CAAI,IAAJ,KAAS,IAAT,CADD,IAEC,CAAI,KAAJ,KAAU,IAAV,CAFD,IAGC,CDmFwB,OCnFd,IAAV,KDmFwC,CAAC,SAAD,CCnFxC,CAHD,CADF;AAAA,MAAZ,CADL;AAAA,KF/CG;AAAA,EEsDH,IAAK,UAAL,yBAAiB,IAAjB,EAAsB,GAAtB;AAAA;AAAA;AAAA,WACK;AAAA,UAAI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAAJ;AAAA,QD+RuC,OC/RrB,MAAD,CAAQ,EAAR,EAAW,GAAX,EACT,UAAG,SAAH,EAAa,IAAb,EAAkB,KAAlB;AAAA;AAAA;AAAA,iBACG,gBAAD,CAAkB,EAAC,IAAD,EAAM,CAAK,IAAL,EAAU,KAAV,CAAN,EAAlB,CADF;AAAA,UADS,CD+RsB,CC/RvC;AAAA;AAAA,QDiS0C,OC5RzC,MAAD,CAAQ,EAAC,CAAO,GAAP,EDtBgB,CCsBhB,CAAD,EAAR,EAA4B,GAAN,CDZR,KCYQ,CDZF,CCYE,CAAtB,EACQ,UAAG,SAAH,EAAa,IAAb,EAAkB,KAAlB;AAAA;AAAA;AAAA,iBAA0B,gBAAD,CAAkB,EAAC,IAAD,EAAM,IAAN,EAAlB,CAAzB;AAAA,UADR,CD4R0C,CCjS1C;AAAA;AAAA,QADL;AAAA,KFtDG;AAAA,EEgEH,IAAK,OAAL,sBAAiB,KAAjB;AAAA;AAAA;AAAA,QAAiB,KAAjB;AAAA;AAAA,WACG,MAAD,CAAQ,EAAR,EAAW,KAAX,EACQ,UAAG,SAAH,EAAa,IAAb;AAAA;AAAA;AAAA,aACG,gBAAD,CACC;AAAA,YAAI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAAJ;AAAA,UDkR+B,OCjRtB,OAAP,CD/CG,KC+CH,CD/CS,IC+CT,EAAe,IAAf,CDiR6B,CClR/B;AAAA;AAAA,UDoRkC,OClRhC,IDkRgC,CCpRlC;AAAA;AAAA,UADD,CADF;AAAA,MADR,CADF;AAAA,KFhEG;AAAA,EEyEH,IAAK,UAAL,yBAAkB,IAAlB,EAAuB,EAAvB;AAAA;AAAA;AAAA,WACK;AAAA,UAAI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAAJ;AAAA,QD4QuC,OC5QrB,GAAD,CAAK,IAAL,EAAU,UAAG,OAAH;AAAA;AAAA;AAAA,iBAAa,UAAD,CAAa,OAAb,EAAqB,EAArB,CAAZ;AAAA,UAAV,CD4QsB,CC5QvC;AAAA;AAAA,QD8Q0C,OC7QrC,EAAD,CAAI,IAAJ,CD6QsC,CC9Q1C;AAAA;AAAA,QADL;AAAA,KFzEG;AAAA,EE6EH,IAAK,KAAL,oBAAY,KAAZ,EAAkB,SAAlB;AAAA;AAAA;AAAA,WACM,GAAD,CAAK,KAAL,EAAW,UAAG,IAAH;AAAA;AAAA;AAAA,aAAS,CAAK,IAAL,EAAU,SAAV,CAAT;AAAA,MAAX,CADL;AAAA,KF7EG;AAAA,EEgFH,IAAK,SAAL,wBAAiB,IAAjB,EAAsB,IAAtB;AAAA;AAAA;AAAA,IDuMS,WCtMQ,CAAM,IAAN,CAAZ,CDoHgB,OCpHhB,CDqHS,UCrHF,GDqHE;AAAA;AAAA;AAAA,aCrHe,CAAK,IAAL,EAAU,GAAV,IAAc,CAAK,IAAL,EAAU,GAAV,CAAd,CDqHf;AAAA,MCrHT,CADL;AAAA,WAEK,IAFL;AAAA,KFhFG;AAAA,EEoFH,IAAK,KAAL,oBAAY,MAAZ;AAAA;AAAA;AAAA,WACM,MAAD,CAAQ,IAAR,EDkMI,WClMO,CAAM,MAAN,CAAX,EACQ,UAAG,SAAH,EAAa,GAAb;AAAA;AAAA;AAAA,MACE,CAAK,SAAL,EAAe,GAAf,IAAmB,CAAK,MAAL,EAAY,GAAZ,CAAnB,CADF;AAAA,aAEE,SAFF;AAAA,MADR,CADL;AAAA,KFpFG;AAAA,EE0FH,IAAK,SAAL,wBAAiB,MAAjB,EAAwB,EAAxB;AAAA;AAAA;AAAA,WACM,MAAD,CAAQ,IAAR,ED4LI,WC5LO,CAAM,MAAN,CAAX,EACQ,UAAG,SAAH,EAAa,GAAb,EAAiB,KAAjB;AAAA;AAAA;AAAA,MACE,CAAK,SAAL,EAAe,GAAf,IAAoB,EAAD,CAAI,CAAK,MAAL,EAAY,GAAZ,CAAJ,EAAqB,GAArB,CAAnB,CADF;AAAA,aAEE,SAFF;AAAA,MADR,CADL;AAAA,KF1FG;AAAA,EEgGH,IAAK,SAAL,wBAAiB,IAAjB,EAAsB,IAAtB;AAAA;AAAA;AAAA,WACM,SAAD,CAAa,KAAD,CAAO,IAAP,CAAZ,EAAyB,IAAzB,CADL;AAAA,KFtGC;AAAA,EGJD,IAAK,SAAL,wBAAc,IAAd;AAAA;AAAA;AAAA,QAAc,IAAd;AAAA;AAAA,WACY,aAAD,CF+BO,KE/BP,CF+Ba,IE/Bb,EAAY,IAAZ,CAAN,CAAyB,OAAzB,CAAkC,UAAG,CAAH;AAAA;AAAA;AAAA,aAAO,WAAD,CAAa,CAAb,CAAN;AAAA,MAAlC,CADL;AAAA,KCAA;AAAA,EDGA,IAAK,aAAL,4BAAkB,IAAlB;AAAA;AAAA;AAAA,QAAkB,IAAlB;AAAA;AAAA,WACM,QAAD,CAAU,UAAG,GAAH;AAAA;AAAA;AAAA,aAAS,YAAD,CAAc,GAAd,EAAkB;AAAA,QAAE,MAAF,EAAS,KAAT;AAAA,QAAe,KAAf,EAAqB,CAArB;AAAA,OAAlB,CAAR;AAAA,MAAV,CADL;AAAA,KCHA;AAAA,EDMA,IAAK,KAAL,oBAAY,IAAZ,EAAiB,KAAjB,EAAuB,KAAvB;AAAA;AAAA;AAAA,WACK,CAAQ,IAAR,GAAa,CAAS,KAAT,OAAM,EAAN,CAAb,GAA6B,SAA7B,CADL;AAAA,KCNA;AAAA,EDSA,IAAK,KAAL,oBAAe,IAAf;AAAA;AAAA;AAAA,QAAe,IAAf;AAAA;AAAA,WAAsB,KAAD,CAAO,YAAP,EAAoB,IAApB,CAArB;AAAA,KCTA;AAAA,EDUA,IAAK,GAAL,kBAAa,IAAb;AAAA;AAAA;AAAA,QAAa,IAAb;AAAA;AAAA,WAAoB,KAAD,CAAO,YAAP,EAAoB,IAApB,CAAnB;AAAA,KCVA;AAAA,EDWA,IAAK,KAAL,oBAAe,IAAf;AAAA;AAAA;AAAA,QAAe,IAAf;AAAA;AAAA,WAAsB,KAAD,CAAO,YAAP,EAAoB,IAApB,CAArB;AAAA,KCXA;AAAA,EDYA,IAAK,KAAL,oBAAe,IAAf;AAAA;AAAA;AAAA,QAAe,IAAf;AAAA;AAAA,WAAsB,KAAD,CAAO,YAAP,EAAoB,IAApB,CAArB;AAAA,KCZA;AAAA,EDaA,IAAK,IAAL,mBAAc,IAAd;AAAA;AAAA;AAAA,QAAc,IAAd;AAAA;AAAA,WAAqB,KAAD,CAAO,YAAP,EAAoB,IAApB,CAApB;AAAA,KCbA;AAAA,EDcA,IAAK,MAAL,qBAAgB,IAAhB;AAAA;AAAA;AAAA,QAAgB,IAAhB;AAAA;AAAA,WAAuB,KAAD,CAAO,YAAP,EAAoB,IAApB,CAAtB;AAAA,KCdA;AAAA,EDeA,IAAK,IAAL,mBAAc,IAAd;AAAA;AAAA;AAAA,QAAc,IAAd;AAAA;AAAA,WAAqB,KAAD,CAAO,YAAP,EAAoB,IAApB,CAApB;AAAA,KCfA;AAAA,EDgBA,IAAK,IAAL,mBAAc,IAAd;AAAA;AAAA;AAAA,QAAc,IAAd;AAAA;AAAA,WAAqB,KAAD,CAAO,YAAP,EAAoB,IAApB,CAApB;AAAA,KChBA;AAAA,EDiBA,IAAK,QAAL,uBAAmB,IAAnB;AAAA;AAAA;AAAA,QAAmB,IAAnB;AAAA;AAAA,WAA0B,KAAD,CAAO,YAAP,EAAoB,IAApB,CAAzB;AAAA,KCjBA;AAAA,EDkBA,IAAK,OAAL,sBAAkB,IAAlB;AAAA;AAAA;AAAA,QAAkB,IAAlB;AAAA;AAAA,WAAyB,KAAD,CAAO,YAAP,EAAoB,IAApB,CAAxB;AAAA,KClBA;AAAA,EDmBA,IAAK,SAAL,wBAAoB,IAApB;AAAA;AAAA;AAAA,QAAoB,IAApB;AAAA;AAAA,WAA2B,KAAD,CAAO,YAAP,EAAoB,IAApB,CAA1B;AAAA,KCnBA;AAAA,EDoBA,IAAK,MAAL,qBAAgB,IAAhB;AAAA;AAAA;AAAA,QAAgB,IAAhB;AAAA;AAAA,WAAuB,KAAD,CAAO,YAAP,EAAoB,IAApB,CAAtB;AAAA,KCpBA;AAAA,EDqBA,IAAK,QAAL,uBAAmB,IAAnB;AAAA;AAAA;AAAA,QAAmB,IAAnB;AAAA;AAAA,WAA0B,KAAD,CAAO,YAAP,EAAoB,IAApB,CAAzB;AAAA,KCrBA;AAAA,EDsBA,IAAK,UAAL,yBAAqB,IAArB;AAAA;AAAA;AAAA,QAAqB,IAArB;AAAA;AAAA,WAA4B,KAAD,CAAO,YAAP,EAAoB,IAApB,CAA3B;AAAA,KCtBA;AAAA,EDuBA,IAAK,QAAL,uBAAmB,IAAnB;AAAA;AAAA;AAAA,QAAmB,IAAnB;AAAA;AAAA,WAA0B,KAAD,CAAO,YAAP,EAAoB,IAApB,CAAzB;AAAA,KCvBA;AAAA,EDwBA,IAAK,KAAL,oBAAe,IAAf;AAAA;AAAA;AAAA,QAAe,IAAf;AAAA;AAAA,WAAsB,KAAD,CAAO,YAAP,EAAoB,IAApB,CAArB;AAAA,KHbG;AAAA,EITE,oBAAL,mCAA4B,IAA5B,EAAiC,KAAjC;AAAA;AAAA;AAAA,IACK;AAAA,UAAM,CH4IgC,OG5IpB,KAAZ,KH4IgD,CAAC,SAAD,CG5IhD,CAAN;AAAA,QHkL4B,OGlLK,KAAR,GAAc,IAAd,CAAzB;AAAA;AAAA,QADL;AAAA,WAGM,YAAD,CAAe;AAAA,UAAK,WAAD,CAAO,IAAP,CAAJ;AAAA,QACG,IAAK,aAAL,GAAoB,CAAI,CAAK,oBAAL,EAA2B,SAA3B,CAAJ,IACI,4BADJ,CAApB,CH0VqB;AAAA,eGxVpB,aAAD,CAAgB,IAAhB,EAAqB,KAArB,CHwVqB,CG3VxB;AAAA,iBAIX,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAJW;AAAA,QH2VwB,OGtVjC,CAAQ;AAAA,cAAI,KAAJ;AAAA,YHsVyB,OGtVd,KAAD,CAAO,GAAP,CHsVe,CGtVzB;AAAA;AAAA,YHwV4B,OGxVN,EHwVM,CGxV5B;AAAA;AAAA,YAAR,GACQ,CAAiC,GAAD,CAAK,IAAL,EAAU,QAAV,CAAhC,OAAM;AAAA,cAAI,KAAJ;AAAA,YHqVmB,OGrVR,KAAD,CAAO,GAAP,CHqVS,CGrVnB;AAAA;AAAA,YHuVsB,OGvVA,EHuVA,CGvVtB;AAAA;AAAA,YAAN,CADR,GAEQ;AAAA,cAAI,KAAJ;AAAA,YHoVyB,OGpVd,KAAD,CAAO,GAAP,CHoVe,CGpVzB;AAAA;AAAA,YHsV4B,OGtVN,EHsVM,CGtV5B;AAAA;AAAA,YAFR,CHsViC,CG3VxB;AAAA,iBAST,KATS;AAAA,QH2VwB,OGlV1B,GAAD,CAAM,YAAD,CAAc,IAAd,CAAL,CHkV2B,CG3VxB;AAAA;AAAA,QH6V2B,OGnVnC,YAAD,CAAgB,YAAD,CAAc,IAAd,CAAf,CHmVoC,CG7V3B;AAAA;AAAA,QAAf,CAHL;AAAA,KJSG;AAAA,EIOE,4BAAL,2CAAoC,IAApC,EAAyC,KAAzC;AAAA;AAAA;AAAA,WACM,YAAD,CAAgB,6BAAD,CAAgC,IAAhC,EAAqC,KAArC,EACd,CACC;AAAA,UAAI,CAAK,cAAL,IAAoB,qBAApB,CAAJ;AAAA,QH2UqC,OG1UjC,CAAU,GAAD,CAAK,cAAL,EAAoB,UAAG,CAAH;AAAA;AAAA;AAAA,iBAAO,oBAAD,CAAuB,CAAvB,EAAyB,KAAzB,CAAN;AAAA,UAApB,CAAT,OAAM,EAAN,CH0UiC,CG3UrC;AAAA;AAAA,QH6UwC,OG5UkC,EH4UlC,CG7UxC;AAAA;AAAA,QADD,GAGC,UAHD,GAIC;AAAA,UAAI,CAAK,aAAL,IAAmB,oBAAnB,CAAJ;AAAA,QHwUqC,OGvUjC,CAAW,GAAD,CAAK,aAAL,EAAmB,UAAG,CAAH;AAAA;AAAA;AAAA,iBAAO,oBAAD,CAAuB,CAAvB,EAAyB,KAAzB,CAAN;AAAA,UAAnB,CAAV,OAAM,GAAN,CHuUiC,CGxUrC;AAAA;AAAA,QH0UwC,OGzUkC,EHyUlC,CG1UxC;AAAA;AAAA,QAJD,GAMC,CAAI,CAAK,eAAL,EAAsB,UAAtB,CAAJ,IAAsC,EAAtC,CAND,CADc,CAAf,CADL;AAAA,KJPG;AAAA,EIiBE,yBAAL,wCAAiC,IAAjC,EAAsC,KAAtC;AAAA;AAAA;AAAA,WACK,CAAY,GAAD,CAAK,aAAL,EAAmB,UAAG,CAAH;AAAA;AAAA;AAAA,aAAO,oBAAD,CAAuB,CAAvB,EAAyB,KAAzB,CAAN;AAAA,MAAnB,CAAX,OAAM,IAAN,CADL;AAAA,KJjBG;AAAA,EIoBE,2BAAL,0CAAmC,IAAnC,EAAwC,KAAxC;AAAA;AAAA;AAAA,WACK,CAAQ;AAAA,UAAI,KAAJ;AAAA,QHgU+B,OGhUpB,KAAD,CAAO,GAAP,CHgUqB,CGhU/B;AAAA;AAAA,QHkUkC,OGlUZ,EHkUY,CGlUlC;AAAA;AAAA,QAAR,GACQ;AAAA,UAAI,EAAO,aAAP,aAAO,aAAP,mBAAO,aAAP,+BAAJ;AAAA,QH+T+B,OG9T3B,CACO,GAAD,CAAK,aAAL,EAAmB,UAAG,CAAH;AAAA;AAAA;AAAA,iBAAO,6BAAD,CAAgC,IAAhC,EAAqC,KAArC,EAA4C,QAAD,CAAU,CAAV,CAA3C,CAAN;AAAA,UAAnB,CADN,OAAM;AAAA,cAAI,KAAJ;AAAA,YH8TqB,OG9TV,KAAD,CAAO,GAAP,CH8TW,CG9TrB;AAAA;AAAA,YHgUwB,OGhUF,EHgUE,CGhUxB;AAAA;AAAA,YAAN,CH8T2B,CG/T/B;AAAA;AAAA,QHiUkC,OG9T7B,6BAAD,CAAgC,IAAhC,EAAqC,KAArC,EAA2C,aAA3C,CH8T8B,CGjUlC;AAAA;AAAA,QADR,GAKQ;AAAA,UAAI,KAAJ;AAAA,QH2T+B,OG3TpB,KAAD,CAAO,GAAP,CH2TqB,CG3T/B;AAAA;AAAA,QH6TkC,OG7TZ,EH6TY,CG7TlC;AAAA;AAAA,QALR,CADL;AAAA,KJpBG;AAAA,EI4BH,IAAK,YAAL,2BAAoB,IAApB;AAAA;AAAA;AAAA,WACY,IAAP,CAAa,KAAb,CAAmB,KAAnB;AAAA,OAA2B,IAA3B,CAAgC,IAAhC,CADL;AAAA,KJ5BG;AAAA,EIgCE,6BAAL,4CAAqC,IAArC,EAA0C,KAA1C,EAAgD,MAAhD;AAAA;AAAA;AAAA,WACK;AAAA,UAAI,EAAK,KAAL,CAAJ;AAAA,QHoTuC,OGpTvB,MHoTuB,CGpTvC;AAAA,iBACI,CAAG,SAAH,KAAa,CAAC,KAAD,CAAb,CADJ;AAAA,QHoTuC,OGnTb,MAAD,CAAQ,MAAR,CHmTc,CGpTvC;AAAA,iBAEI,CAAG,SAAH,KAAa,CAAC,MAAD,CAAb,CAFJ;AAAA,QHoTuC,OGlTZ,MAAD,CAAQ,MAAR,CHkTa,CGpTvC;AAAA;AAAA,QHsT0C,OGnTrC,KAAD,CAAO,MAAP,CHmTsC,CGtT1C;AAAA;AAAA,QADL;AAAA,KJhCG;AAAA,EIsCH,IAAK,QAAL,GAAc,oBAAd,CJ7CC;AAAA,EKJD,IAAK,eAAL,8BAAuB,IAAvB;AAAA;AAAA;AAAA,WACK;AAAA,UAAI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAAJ;AAAA,QJ+VuC,OI/VtB,CAAU,GAAD,CAAK,IAAL,EAAU,eAAV,CAAT,OAAM,EAAN,CJ+VsB,CI/VvC;AAAA,iBACI,CAAM,WAAD,CAAO,IAAP,CAAL,IAAkB,CAAG,SAAH,KAAa,CAAC,MAAD,CAAb,CAAlB,CADJ;AAAA,QJ+VuC,OI7VhC,eAAD,CAAkB,aAAlB,CJ6ViC,CI/VvC;AAAA,iBAGI,CAAI,OAAS,IAAT,cAAJ,IAAmB,CJ+Ie,OI/IN,IAAT,KJ+I+B,CAAC,MAAD,CI/I/B,CAAnB,CAHJ;AAAA,QJ+VuC,OI5VA,IJ4VA,CI/VvC;AAAA,iBAII,EAAK,CJ2YD,CA/P+B,OI5IrB,IJ2YV,KA/P+C,CAAC,SAAD,CA+P/C,CI3YC,IJ2YiB,CI3YR,IJ2YQ,KAAW,IAAX,CI3YjB,CAAL,CAJJ;AAAA,QJ+VuC,OI3Vd,EJ2Vc,CI/VvC;AAAA,iBAKK,WAAD,CAAO,IAAP,CALJ;AAAA,QAMmB,WAAD,CAAa,uBAAb,CJyVqB;AAAA,eIxVpB,eAAD,CAAmB,SAAD,CAAW,IAAX,CAAlB,CJwVqB,CI/VvC;AAAA;AAAA,QADL;AAAA,KLYG;AAAA,EKFH,CAAK,QAAL,EAAc,CAAC,eAAD,CAAd,IAAgC,eAAhC,CLNC;AAAA,EEJD,IAAK,OAAL,sBAAe,GAAf,EAAmB,EAAnB;AAAA;AAAA;AAAA,IACE,IAAK,KAAL,GAAW,CAAX;AAAA,QACQ,SADR,GACmB,SADnB;AAAA,QAEQ,MAFR,GAEgB,EAFhB,CADF;AAAA,IAKE;AAAA,MD2PO,6BA6DwB;AAAA,aCxTxB,CAAG,KAAH,GAAS,UAAT,CDwTwB;AAAA,QA3Db,eAAgB;AAAA,UC5P1B,MAAN,CAAc,IAAd,CACa,EAAP,CDyBQ,KCzBR,CDyBc,ICzBd,EAAgB,GAAN,CAAU,KAAV,CACM,KADN,EACY,CAAG,KAAH,GAAS,SAAT,CADZ,CAAV,CADN,CDuT6B;AAAA,iBCpTpB,KAAT,IAAe,SDoTc,CA3DG;AAAA,YAAhB,CA2Da;AAAA;AAAA,0BCxT/B;AAAA,QALF;AAAA,WAUE,MAVF;AAAA,KFaG;AAAA,EEDH,IAAK,MAAL,qBAAa,KAAb,EAAmB,KAAnB,EAAyB,EAAzB;AAAA;AAAA;AAAA,IACE,IAAK,KAAL,GAAW,KAAX,CADF;AAAA,IAEE;AAAA,UAAM,EAAO,KAAP,aAAO,KAAP,mBAAO,KAAP,+BAAN;AAAA,QDuK+B,OCtKV,KAAnB,CDgMiB,OChMjB,CDiMU,UCjMH,IDiMG,ECjME,KDiMF;AAAA;AAAA;AAAA,iBChMA,KAAR,GAAe,EAAD,CAAI,KAAJ,EAAU,IAAV,EAAe,KAAf,CAAd,CDgMQ;AAAA,UCjMV,CDsK6B,CCvK/B;AAAA;AAAA,QAFF;AAAA,WAKE,KALF;AAAA,KFCG;AAAA,EEMH,IAAK,GAAL,kBAAU,KAAV,EAAgB,EAAhB;AAAA;AAAA;AAAA,WACG,MAAD,CAAQ,EAAR,EAAW,KAAX,EACQ,UAAG,SAAH,EAAa,IAAb,EAAkB,KAAlB;AAAA;AAAA;AAAA,MACQ,SAAN,CAAgB,IAAhB,CAAsB,EAAD,CAAI,IAAJ,EAAS,KAAT,CAArB,CADF;AAAA,aAEE,SAFF;AAAA,MADR,CADF;AAAA,KFNG;AAAA,EEYH,IAAK,MAAL,qBAAa,KAAb,EAAmB,EAAnB;AAAA;AAAA;AAAA,WACG,MAAD,CAAQ,EAAR,EAAW,KAAX,EACQ,UAAG,SAAH,EAAa,IAAb,EAAkB,KAAlB;AAAA;AAAA;AAAA,MACE;AAAA,YAAO,EAAD,CAAI,IAAJ,EAAS,KAAT,CAAN;AAAA,UDyJqB,OCxJb,SAAN,CAAgB,IAAhB,CAAqB,IAArB,CDwJmB,CCzJrB;AAAA;AAAA,UADF;AAAA,aAGE,SAHF;AAAA,MADR,CADF;AAAA,KFZG;AAAA,EEmBH,IAAK,MAAL,qBAAa,KAAb,EAAmB,EAAnB;AAAA;AAAA;AAAA,IACE,IAAK,UAAL,GAAiB,SAAjB;AAAA,QACQ,KADR,GACc,CADd;AAAA,QAEQ,KAFR,GAEc,CAAI,KAAJ,IAAU,EAAV,CAFd,CADF;AAAA,IAKE;AAAA,MD2NO,6BA6DwB;AAAA,aAtDlB,EClON,CAAI,CAAG,YAAH,KAAgB,KAAhB,CAAJ,IAA2B,UAA3B,CDkOM,CAsDkB;AAAA,QA3Db,eAAgB;AAAA,UC5N3B;AAAA,gBAAO,EAAD,CAAI,CAAK,KAAL,EAAW,KAAX,CAAJ,EAAsB,KAAtB,CAAN;AAAA,cD+IwB,OC9Id,UAAR,GAAoB,CAAK,KAAL,EAAW,KAAX,CAApB,CADF;AAAA;AAAA,cDuRwB;AAAA,iBCrRxB,EAAM,KAAN,IDqRwB,CA3DG;AAAA,YAAhB,CA2Da;AAAA;AAAA,0BCxR/B;AAAA,QALF;AAAA,WAUE,UAVF;AAAA,KFnBG;AAAA,EE+BH,IAAK,UAAL,yBAAW,KAAX,EAAiB,EAAjB;AAAA;AAAA;AAAA,WACK,CDkGsC,OClGzB,MAAD,CAAQ,KAAR,EAAc,UAAG,IAAH,EAAQ,KAAR;AAAA;AAAA;AAAA,aAAe,EAAM,EAAD,CAAI,IAAJ,EAAS,KAAT,CAAL,CAAf;AAAA,MAAd,CAAZ,KDkGsD,CAAC,SAAD,CClGtD,CADL;AAAA,KF/BG;AAAA,EEkCH,IAAK,WAAL,0BAAY,KAAZ,EAAkB,EAAlB;AAAA;AAAA;AAAA,WACK,CD+FsC,OC/FzB,MAAD,CAAQ,KAAR,EAAc,EAAd,CAAZ,KD+FsD,CAAC,SAAD,CC/FtD,CADL;AAAA,KFlCG;AAAA,EEqCH,IAAK,UAAL,yBAAW,KAAX,EAAiB,EAAjB;AAAA;AAAA;AAAA,WACK,CD8FuC,OC9F5B,MAAD,CAAQ,KAAR,EAAc,EAAd,CAAV,KD8FuD,CAAC,SAAD,CC9FvD,CADL;AAAA,KFrCG;AAAA,EEwCH,IAAK,MAAL,qBAAa,KAAb,EAAmB,EAAnB;AAAA;AAAA;AAAA,IACE,IAAK,IAAL,GAAU,EAAE,KAAF,EAAQ,EAAR,EAAV,CADF;AAAA,WAEG,MAAD,CAAQ,KAAR,EAAc;AAAA;AAAA;AAAA,aAAO,EAAY,EAAP,CDvBV,KCuBU,CDvBJ,ICuBI,EAAU,SAAV,CAAL,CAAP;AAAA,MAAd,CAFF;AAAA,KFxCG;AAAA,EE4CH,IAAK,OAAL,sBAAc,GAAd;AAAA;AAAA;AAAA,WACM,MAAD,CAAQ,GAAR,EAAY,UAAG,IAAH;AAAA;AAAA;AAAA,aACE,CACC,CAAI,IAAJ,KAAS,IAAT,CADD,IAEC,CAAI,KAAJ,KAAU,IAAV,CAFD,IAGC,CDmFwB,OCnFd,IAAV,KDmFwC,CAAC,SAAD,CCnFxC,CAHD,CADF;AAAA,MAAZ,CADL;AAAA,KF5CG;AAAA,EEmDH,IAAK,UAAL,yBAAiB,IAAjB,EAAsB,GAAtB;AAAA;AAAA;AAAA,WACK;AAAA,UAAI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAAJ;AAAA,QD+RuC,OC/RrB,MAAD,CAAQ,EAAR,EAAW,GAAX,EACT,UAAG,SAAH,EAAa,IAAb,EAAkB,KAAlB;AAAA;AAAA;AAAA,iBACG,gBAAD,CAAkB,EAAC,IAAD,EAAM,CAAK,IAAL,EAAU,KAAV,CAAN,EAAlB,CADF;AAAA,UADS,CD+RsB,CC/RvC;AAAA;AAAA,QDiS0C,OC5RzC,MAAD,CAAQ,EAAC,CAAO,GAAP,EDtBgB,CCsBhB,CAAD,EAAR,EAA4B,GAAN,CDZR,KCYQ,CDZF,CCYE,CAAtB,EACQ,UAAG,SAAH,EAAa,IAAb,EAAkB,KAAlB;AAAA;AAAA;AAAA,iBAA0B,gBAAD,CAAkB,EAAC,IAAD,EAAM,IAAN,EAAlB,CAAzB;AAAA,UADR,CD4R0C,CCjS1C;AAAA;AAAA,QADL;AAAA,KFnDG;AAAA,EE6DH,IAAK,OAAL,sBAAiB,KAAjB;AAAA;AAAA;AAAA,QAAiB,KAAjB;AAAA;AAAA,WACG,MAAD,CAAQ,EAAR,EAAW,KAAX,EACQ,UAAG,SAAH,EAAa,IAAb;AAAA;AAAA;AAAA,aACG,gBAAD,CACC;AAAA,YAAI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAAJ;AAAA,UDkR+B,OCjRtB,OAAP,CD/CG,KC+CH,CD/CS,IC+CT,EAAe,IAAf,CDiR6B,CClR/B;AAAA;AAAA,UDoRkC,OClRhC,IDkRgC,CCpRlC;AAAA;AAAA,UADD,CADF;AAAA,MADR,CADF;AAAA,KF7DG;AAAA,EEsEH,IAAK,UAAL,yBAAkB,IAAlB,EAAuB,EAAvB;AAAA;AAAA;AAAA,WACK;AAAA,UAAI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAAJ;AAAA,QD4QuC,OC5QrB,GAAD,CAAK,IAAL,EAAU,UAAG,OAAH;AAAA;AAAA;AAAA,iBAAa,UAAD,CAAa,OAAb,EAAqB,EAArB,CAAZ;AAAA,UAAV,CD4QsB,CC5QvC;AAAA;AAAA,QD8Q0C,OC7QrC,EAAD,CAAI,IAAJ,CD6QsC,CC9Q1C;AAAA;AAAA,QADL;AAAA,KFtEG;AAAA,EE0EH,IAAK,KAAL,oBAAY,KAAZ,EAAkB,SAAlB;AAAA;AAAA;AAAA,WACM,GAAD,CAAK,KAAL,EAAW,UAAG,IAAH;AAAA;AAAA;AAAA,aAAS,CAAK,IAAL,EAAU,SAAV,CAAT;AAAA,MAAX,CADL;AAAA,KF1EG;AAAA,EE6EH,IAAK,SAAL,wBAAiB,IAAjB,EAAsB,IAAtB;AAAA;AAAA;AAAA,IDuMS,WCtMQ,CAAM,IAAN,CAAZ,CDoHgB,OCpHhB,CDqHS,UCrHF,GDqHE;AAAA;AAAA;AAAA,aCrHe,CAAK,IAAL,EAAU,GAAV,IAAc,CAAK,IAAL,EAAU,GAAV,CAAd,CDqHf;AAAA,MCrHT,CADL;AAAA,WAEK,IAFL;AAAA,KF7EG;AAAA,EEiFH,IAAK,KAAL,oBAAY,MAAZ;AAAA;AAAA;AAAA,WACM,MAAD,CAAQ,IAAR,EDkMI,WClMO,CAAM,MAAN,CAAX,EACQ,UAAG,SAAH,EAAa,GAAb;AAAA;AAAA;AAAA,MACE,CAAK,SAAL,EAAe,GAAf,IAAmB,CAAK,MAAL,EAAY,GAAZ,CAAnB,CADF;AAAA,aAEE,SAFF;AAAA,MADR,CADL;AAAA,KFjFG;AAAA,EEuFH,IAAK,SAAL,wBAAiB,MAAjB,EAAwB,EAAxB;AAAA;AAAA;AAAA,WACM,MAAD,CAAQ,IAAR,ED4LI,WC5LO,CAAM,MAAN,CAAX,EACQ,UAAG,SAAH,EAAa,GAAb,EAAiB,KAAjB;AAAA;AAAA;AAAA,MACE,CAAK,SAAL,EAAe,GAAf,IAAoB,EAAD,CAAI,CAAK,MAAL,EAAY,GAAZ,CAAJ,EAAqB,GAArB,CAAnB,CADF;AAAA,aAEE,SAFF;AAAA,MADR,CADL;AAAA,KFvFG;AAAA,EE6FH,IAAK,SAAL,wBAAiB,IAAjB,EAAsB,IAAtB;AAAA;AAAA;AAAA,WACM,SAAD,CAAa,KAAD,CAAO,IAAP,CAAZ,EAAyB,IAAzB,CADL;AAAA,KFtGC;AAAA,EMJD,IAAK,MAAL,GAAY,IAAZ,CNcG;AAAA,EMbH,CAAK,QAAL,EAAc,CAAC,MAAD,CAAd,IAAsB,MAAtB,CNaG;AAAA,EMZH,CAAK,MAAL,EAAY,CAAC,MAAD,CAAZ,IACK;AAAA,IAAE,CAAC,KAAD,CAAF,EAAsB,sCAAtB;AAAA,IACE,CAAC,OAAD,CADF,EACsB,OADtB;AAAA,IAEE,CAAC,MAAD,CAFF,EAEsB,mCAFtB;AAAA,IAGE,CAAC,MAAD,CAHF,EAGsB,mBAHtB;AAAA,IAIE,CAAC,OAAD,CAJF,EAIsB,0CAJtB;AAAA,IAKE,CAAC,OAAD,CALF,EAKsB,QALtB;AAAA,IAME,CAAC,EAAD,CANF,EAMsB,GANtB;AAAA,IAOE,CAAC,IAAD,CAPF,EAOsB,MAPtB;AAAA,IAQE,CAAC,GAAD,CARF,EAQsB,OARtB;AAAA,IASE,CAAC,IAAD,CATF,EASsB,QATtB;AAAA,IAUE,CAAC,cAAD,CAVF,EAUsB,WAVtB;AAAA,IAWE,CAAC,SAAD,CAXF,EAWsB,sBAXtB;AAAA,IAYE,CAAC,cAAD,CAZF,EAYsB,eAZtB;AAAA,IAaE,CAAC,eAAD,CAbF,EAauB,eAbvB;AAAA,IAcE,CAAC,OAAD,CAdF,EAcW,KAdX;AAAA,IAeE,CAAC,UAAD,CAfF,EAec,KAfd;AAAA,IAgBE,CAAC,OAAD,CAhBF,EAgBW,GAhBX;AAAA,GADL,CNYG;AAAA,EMOH,CAAK,MAAL,EAAY,CAAC,eAAD,CAAZ,IAA+B,EAAE,CAAC,KAAD,CAAF,EACE,CAAC,OAAD,CADF,EAEE,CAAC,MAAD,CAFF,EAGE,CAAC,MAAD,CAHF,EAIE,CAAC,IAAD,CAJF,EAKE,CAAC,IAAD,CALF,EAME,CAAC,GAAD,CANF,EAOE,CAAC,EAAD,CAPF,EAQE,CAAC,OAAD,CARF,EASE,CAAC,OAAD,CATF,EAUE,CAAC,cAAD,CAVF,EAWE,CAAC,SAAD,CAXF,EAYE,CAAC,cAAD,CAZF,EAaE,CAAC,eAAD,CAbF,EAcE,CAAC,OAAD,CAdF,EAeE,CAAC,UAAD,CAfF,EAgBE,CAAC,OAAD,CAhBF,EAA/B;AAAA,GAAK,MAAL,EAkBK,CAAC,cAAD,CAlBL,IAkBuB,0BAAD,CACC,UAAG,CAAH;AAAA;AAAA;AAAA,IACE,IAAK,CAAL,GAAO,KLuEnB,MAHI,CKpEsB,CAAC,GAAD,GAAK,CAAK,aAAL,EAAmB,CAAnB,CAAL,CLoEtB,E,SAAA,CKpEe,CAAP,CADF;AAAA,IAEE,CAAK,CAAL,EAAO,CAAC,IAAD,CAAP,IAAa,CAAb,CAFF;AAAA,WAGE,CAHF;AAAA,IADD,CAlBtB,CNPG;AAAA,EM+BH,IAAK,cAAL,GAAqB,qBAArB,CN/BG;AAAA,EMiCH,CAAK,QAAL,EAAc,CAAC,SAAD,CAAd,IAA0B,CAAI,kBAAJ,IAAwB,IAAxB,CAA1B,CNjCG;AAAA,EMkCH,IAAK,MAAL,qBAAc,IAAd;AAAA;AAAA;AAAA,WACK,EAAM,aAAN,IADL;AAAA,KNlCG;AAAA,EMoCH,IAAK,SAAL,wBAAiB,IAAjB;AAAA;AAAA;AAAA,IACK,IAAK,EAAL,GAAS,MAAD,CAAS,IAAT,CAAR,CADL;AAAA,IAEK,CAAK,kBAAL,EAAyB,EAAzB,IAA4B,IAA5B,CAFL;AAAA,WAGM,SAAD,CAAY,IAAZ,EAAiB,EAAC,MAAD,EAAS,EAAT,EAAjB,CAHL;AAAA,KNpCG;AAAA,EMyCH,CAAK,MAAL,EAAa,CAAC,MAAD,CAAb,IAAsB,CAAtB,CNzCG;AAAA,EM2CE,YAAL,2BAAmB,MAAnB,EAA0B,OAA1B;AAAA;AAAA;AAAA,IACK,IAAK,OAAL,GAAa,CAAI,OAAJ,IACI;AAAA,MAAE,QAAF,EAAW,CAAX;AAAA,MACE,KADF,EACQ,EADR;AAAA,MAEE,IAFF,EAEO,CAFP;AAAA,MAGE,WAHF,EAGe,CAHf;AAAA,MAGiB,GAHjB,EAGqB,CAHrB;AAAA,KADJ,CAAb;AAAA,QAKK,KALL,GAKW,IALX;AAAA,QAMK,SANL,GAMgB,IANhB;AAAA,QAOK,cAPL,GAOqB,MAPrB,CADL;AAAA,IAUK;AAAA,ML6LI,6BA6DwB;AAAA,aK1PrB,KL0PqB;AAAA,QA3Db,eAAgB;AAAA,UK9LvB,MAAD,CAAQ,cAAR,EACQ,UAAG,CAAH;AAAA;AAAA;AAAA,YACU,KAAR,GAAe,MAAD,CAAQ,cAAR,CAAd;AAAA,YACQ,SADR,GACmB,MADnB,CADF;AAAA,mBAGE,KAHF;AAAA,YADR,CLyPqB;AAAA,iBKnPrB;AAAA,gBAAM,CLsUL,CA/P+B,OKvEjB,KLsUd,KA/P+C,CAAC,SAAD,CA+P/C,CKtUK,ILsUa,CKtUJ,KLsUI,KAAW,IAAX,CKtUb,CAAN;AAAA,cACM,IAAK,WAAL,GAAkB,CAAO,KAAP,EL3BN,CK2BM,CAAlB;AAAA,kBACK,MADL,GACY,CAAQ,WAAR,ELnCZ,CAAC,MAAD,CKmCY,CADZ,CL0Ge;AAAA,cKvGd,kBAAD,CACE,SAAD,CAAY;AAAA,gBAAE,QAAF,EAAW,EAAX;AAAA,gBACE,GADF,EACM,YADN;AAAA,gBAEE,IAFF,EAEO,aAFP;AAAA,gBAGE,KAHF,EAGQ,WAHR;AAAA,gBAIE,IAJF,EAIO,SAJP;AAAA,gBAKE,KALF,EAKQ,gBALR;AAAA,gBAME,IANF,EAMO,YANP;AAAA,gBAOE,GAPF,EAOM,WAPN;AAAA,gBAQE,MARF,EAQS,MART;AAAA,eAAZ,CADD,CLuGe;AAAA,cK5Ff;AAAA,oBACC,CAAG,CAAC,OAAD,CAAH,KAAY,SAAZ,CADD;AAAA,kBAGE,EAAM,YAAN,ILoQwB;AAAA,mBKnQnB,OLmQmB,EKlQnB,CAAC,GAAD,CLkQmB,IKlQd,CLkQc;AAAA,0BKnQnB,OLmQmB,EKjQnB,CAAC,WAAD,CLiQmB,IKjQL,gBLiQK,CKvQ1B;AAAA,2BAQC,CAAK,CAAG,CAAC,MAAD,CAAH,KAAW,SAAX,CAAL,IACK,CLuSZ,EKvSY,KAAW,WLuSpB,CAAY,OAAZ,CKvSiC,ILuSjC,CKvSS,CADL,CARD;AAAA,kBAWE,IAAK,kBAAL,GAA0B,CAAG,CAAS,iBAAD,CAAoB,IAApB,CAAR,EL3D/B,CAAC,MAAD,CK2D+B,CAAH,GAAsC,CAAtC,CAA1B,CL4PwB;AAAA,kBK3Pf,YAAT,IAAsB,kBL2PE;AAAA,yBK1PxB,CAAK,OAAL,EAAa,CAAC,GAAD,CAAb,IAAkB,CAAG,MAAH,GAAW,uBAAD,CAA4B,IAA5B,CAAV,CAAlB,CAbF;AAAA;AAAA,kBLyQ6B,OK1PnB,WAAT,IAAqB,ML0PO,CKzQ7B;AAAA;AAAA,kBL4Fe;AAAA,cK3EN,gBAAT,IAA0B,ML2EX;AAAA,qBK1EP,cAAR,GAAwB;AAAA,oBAAI,qBAAJ;AAAA,kBLqPE,OKpPG,oBAAD,CAAuB,MAAvB,CLoPF,CKrPF;AAAA;AAAA,kBLuPK,OKrPD,ELqPC,CKvPL;AAAA;AAAA,kBAAxB,CAjCN;AAAA;AAAA,cLmPqB,CA3DG;AAAA,YAAhB,CA2Da;AAAA;AAAA,0BK1P5B;AAAA,QAVL;AAAA,WAqDK,aArDL;AAAA,KN3CG;AAAA,EMkGH,IAAK,KAAL,GAAW,YAAX,CN5GC;AAAA,EOJD,IAAK,aAAL,GAAmB,IAAnB;AAAA,MACK,eADL,GACsB;AAAA,IAAE,GAAF,EAAM,GAAN;AAAA,IAAU,GAAV,EAAc,GAAd;AAAA,IAAkB,GAAlB,EAAsB,GAAtB;AAAA,GADtB;AAAA,MAEK,YAFL,GAEmB;AAAA,IAAE,GAAF,EAAM,CAAC,UAAD,CAAN;AAAA,IACE,GADF,EACM,CAAC,OAAD,CADN;AAAA,IAEE,GAFF,EAEM,CAAC,KAAD,CAFN;AAAA,GAFnB,CPeG;AAAA,EOTH,IAAK,WAAL,0BAAkB,KAAlB;AAAA;AAAA;AAAA,IACK,IAAK,MAAL,GAAY;AAAA,MAAE,IAAF,EAAO,CAAC,IAAD,CAAP;AAAA,MACE,QADF,EACW,EADX;AAAA,MAEE,IAFF,EAEO,aAFP;AAAA,MAGE,GAHF,EAGM,CAHN;AAAA,MAIE,IAJF,EAIO,CAJP;AAAA,KAAZ;AAAA,QAKK,OALL,GAKa;AAAA,MAAE,UAAF,EAAc,EAAC,MAAD,EAAd;AAAA,MACE,MADF,EACS,MADT;AAAA,MAEE,KAFF,EAEQ,KAFR;AAAA,MAGE,QAHF,EAGW,CAHX;AAAA,KALb,CADL;AAAA,IAWM,MAAD,CAAQ,OAAR,EAAgB,KAAhB,EACQ,UAAG,OAAH,EAAW,KAAX,EAAiB,KAAjB;AAAA;AAAA;AAAA,MACE,IAAK,YAAL,GAAkB,CAAI,CAAK,aAAL,EAAmB,UAAnB,CAAJ,IAAmC,qBAAnC,CAAlB,CADF;AAAA,aAEG,YAAD,CAAc,KAAd,EAAoB,OAApB,EAA4B,KAA5B,CAFF;AAAA,MADR,CAXL;AAAA,WAeK,MAfL;AAAA,KPSG;AAAA,EOQH,CAAK,QAAL,EAAc,CAAC,WAAD,CAAd,IAA2B,WAA3B,CPRG;AAAA,EOUE,4BAAL,2CAAoC,KAApC,EAA0C,OAA1C;AAAA;AAAA;AAAA,IACK,IAAK,KAAL,GAAW,CAAO,kBAAP,ENsBc,CMtBd,CAAX,CADL;AAAA,IAEK,CAAK,KAAL,EACK,CAAC,QAAD,CADL,IACe,EADf;AAAA,KAAK,KAAL,EAEK,CAAC,IAAD,CAFL,IAEW,CAAK,YAAL,EAAmB,WAAnB,CAFX;AAAA,KAAK,KAAL,EAGK,CAAC,MAAD,CAHL,IAGa,KAHb,CAFL;AAAA,IAMM,cAAD,CAAiB,KAAjB,EAAuB,OAAvB,CANL;AAAA,IAOW,cAAN,CAAqB,IAArB,CAA0B,KAA1B,CAPL;AAAA,IAQM,0BAAD,CAA6B,KAA7B,CARL;AAAA,WASK,OATL;AAAA,KPVG;AAAA,EOsBE,6BAAL,4CAAqC,IAArC,EAA0C,OAA1C,EAAkD,KAAlD;AAAA;AAAA;AAAA,IACK,IAAK,KAAL,GAAW,CAAO,kBAAP,ENUc,CMVd,CAAX,CADL;AAAA,IAGK;AAAA,UAAM,CAAI,CAAK,eAAL,EAAsB,WAAtB,CAAJ,KAAuC,UAAvC,CAAN;AAAA,QN6I4B,iBM5If,CAAC,kBAAD,GAAqB,MAAD,CAAS,oBAAD,CAAuB,KAAvB,CAAR,CAApB,GACoB,UADpB,GAC8B,UAD9B,GACwC,GADxC,GAC2C,UAD3C,GACqD,GADrD,GACwD,SADxD,GAEoB,YAFpB,GAEiC,oBAAD,CAAuB,IAAvB,CAFhC,GAGoB,UAHpB,GAG8B,SAH9B,GAGuC,GAHvC,GAG0C,SAH1C,GAGmD,GAHnD,GAGsD,QAHtD,GAIoB,IAJpB,CN4Ie,CM7I5B;AAAA;AAAA,QAHL;AAAA,IAUK,CAAK,KAAL,EAAW,CAAC,GAAD,CAAX,IAAgB,QAAhB,CAVL;AAAA,IAWM,wBAAD,EAXL;AAAA,IAYM,aAAD,CAAgB,KAAhB,EAAsB,OAAtB,CAZL;AAAA,IAaK;AAAA,UAAM,CAAO,yBAAP,KN4EmB,CM5EnB,CAAN;AAAA,QNmI4B,iBMlIf,CAAC,sBAAD,GACO,OAAN,CAAc,UAAd,CADD,CNkIe,CMnI5B;AAAA;AAAA,QAbL;AAAA,WAgBK,OAhBL;AAAA,KPtBG;AAAA,EOwCH,IAAK,WAAL,0BAAmB,IAAnB,EAAwB,OAAxB;AAAA;AAAA;AAAA,IACK,EAAM,gBAAN,IADL;AAAA,IAGK,IAAK,KAAL,GAAW,CAAO,kBAAP,ENVc,CMUd,CAAX,CAHL;AAAA,IAIK,CAAK,IAAL,EACK,CAAC,QAAD,CADL,IACe,EADf;AAAA,KAAK,IAAL,EAEK,CAAC,MAAD,CAFL,IAEa,KAFb,CAJL;AAAA,IAQM,mBAAD,CAAqB,IAArB,CARL;AAAA,IASM,0BAAD,CAA6B,IAA7B,CATL;AAAA,WAUK,OAVL;AAAA,KPxCG;AAAA,EOoDH,IAAK,cAAL,6BAAsB,IAAtB,EAA2B,OAA3B;AAAA;AAAA;AAAA,IACK,CAAK,IAAL,EAAU,CAAC,QAAD,CAAV,IAAoB,CAAK,OAAL,EAAa,CAAC,QAAD,CAAb,CAApB,CADL;AAAA,IAEK,CAAK,OAAL,EAAa,CAAC,QAAD,CAAb,IAAuB,CAAvB,CAFL;AAAA,WAGK,OAHL;AAAA,KPpDG;AAAA,EOyDH,IAAK,aAAL,4BAAqB,IAArB,EAA0B,OAA1B;AAAA;AAAA;AAAA,IACK;AAAA,UAAM,CAAG,aAAH,GAAiB,CAAjB,CAAN;AAAA,QACM,EAAM,aAAN,IN2GsB;AAAA,QM1GrB,wBAAD,EN0GsB;AAAA,eMzGrB,aAAD,CAAgB,IAAhB,EAAqB,OAArB,CNyGsB,CM5G5B;AAAA;AAAA,QADL;AAAA,WAKK,OALL;AAAA,KPzDG;AAAA,EOgEE,iBAAL,gCAAwB,IAAxB,EAA6B,OAA7B,EAAqC,KAArC;AAAA;AAAA;AAAA,WAA6C,WAAD,CAAc,IAAd,EAAmB,OAAnB,CAA5C;AAAA,KPhEG;AAAA,EOiEE,kBAAL,iCAAyB,IAAzB,EAA8B,OAA9B,EAAsC,KAAtC;AAAA;AAAA;AAAA,WAA8C,WAAD,CAAc,IAAd,EAAmB,OAAnB,CAA7C;AAAA,KPjEG;AAAA,EOkEE,kBAAL,iCAAyB,IAAzB,EAA8B,OAA9B,EAAsC,KAAtC;AAAA;AAAA;AAAA,WAA8C,WAAD,CAAc,IAAd,EAAmB,OAAnB,CAA7C;AAAA,KPlEG;AAAA,EOmEE,gBAAL,+BAAuB,IAAvB,EAA4B,OAA5B,EAAoC,KAApC;AAAA;AAAA;AAAA,WAA4C,WAAD,CAAc,IAAd,EAAmB,OAAnB,CAA3C;AAAA,KPnEG;AAAA,EOqEE,wBAAL,uCAA+B,KAA/B,EAAqC,OAArC,EAA6C,KAA7C;AAAA;AAAA;AAAA,WAAoD,OAApD;AAAA,KPrEG;AAAA,EOsEE,qBAAL,oCAA4B,KAA5B,EAAkC,OAAlC,EAA0C,KAA1C;AAAA;AAAA;AAAA,WAAiD,OAAjD;AAAA,KPtEG;AAAA,EOuEE,qBAAL,oCAA4B,KAA5B,EAAkC,OAAlC,EAA0C,KAA1C;AAAA;AAAA;AAAA,WAAiD,OAAjD;AAAA,KPvEG;AAAA,EOyEE,qBAAL,oCAA4B,KAA5B,EAAkC,OAAlC,EAA0C,KAA1C;AAAA;AAAA;AAAA,IACM,cAAD,CAAiB,KAAjB,EAAuB,OAAvB,CADL;AAAA,IAEW,CAAK,CAAO,kBAAP,EN1Cc,CM0Cd,CAAL,EAAiC,CAAC,QAAD,CAAjC,CAAN,CAAkD,IAAlD,CAAuD,KAAvD,CAFL;AAAA,WAGM,aAAD,CAAgB,KAAhB,EAAsB,OAAtB,CAHL;AAAA,KPpFC;AAAA,EQJD,IAAK,MAAL,GAAY,IAAZ,CRgBG;AAAA,EQfH,CAAK,QAAL,EAAc,CAAC,MAAD,CAAd,IAAsB,MAAtB;AAAA,GAAK,QAAL,EAA6B,CAAC,KAAD,CAA7B,IAAoC,KAApC,CReG;AAAA,EQZH,IAAK,aAAL,4BAAwB,IAAxB;AAAA;AAAA;AAAA,QAAwB,IAAxB;AAAA;AAAA,WACM,GAAD,CAAK,IAAL,EACK,UAAG,GAAH;AAAA;AAAA;AAAA,aACE;AAAA,YAAK,WAAD,CAAO,GAAP,CAAJ;AAAA,UAAoB,CAAK,GAAL,EAAS,CAAC,QAAD,CAAT,IAA0B,aAAP,CPyBjC,KOzBiC,CPyB3B,IOzB2B,EAAuB,OAAD,CAAU,OAAD,CAAS,YAAT,CAAT,CAAtB,CAAnB,CPyVY;AAAA,iBOzVgE,GPyVhE,COzVhC;AAAA,mBACI,EAAO,GAAP,aAAO,GAAP,mBAAO,GAAP,+BADJ;AAAA,UPyVgC,OOxVT,aAAP,CPwBV,KOxBU,CPwBJ,IOxBI,EAAsB,GAAtB,CPwVgB,COzVhC;AAAA,mBAEI,CP0I2B,OO1IlB,GAAT,KP0I2C,CAAC,MAAD,CO1I3C,CAFJ;AAAA,UPyVgC,OOvVb,YAAD,EPuVc,COzVhC;AAAA,mBAGI,OAAS,GAAT,cAHJ;AAAA,UPyVgC,OOrVrB,GAAP,CACQ,OADR,CACgB,KPoGnB,MAHI,COjGsB,KPiGtB,EOjG4B,CAAC,CAAD,CPiG5B,COjGe,CADhB,EACiC,MADjC;AAAA,aAEQ,OAFR,CAEgB,KPmGnB,MAHI,COhGsB,YPgGtB,EOhGmC,CAAC,CAAD,CPgGnC,COhGe,CAFhB,EAEwC,MAFxC,CPqV4B,COzVhC;AAAA;AAAA,UP2VmC,OOnV9B,GPmV8B,CO3VnC;AAAA;AAAA,UADF;AAAA,MADL,CADL;AAAA,KRYG;AAAA,EQCH,IAAK,MAAL,qBAAgB,IAAhB;AAAA;AAAA;AAAA,QAAgB,IAAhB;AAAA;AAAA,WACK,EAAC,MAAD,EAAS,aAAD,CAAgB,IAAhB,CAAR,EAA8B,IAA9B,EADL;AAAA,KRDG;AAAA,EQKH,IAAK,WAAL,0BAAmB,MAAnB;AAAA;AAAA;AAAA,WACM,cAAD,CAAgB,KP0FR,MAHI,COvFW,oDPuFX,EOvFgE,CAAC,CAAD,CPuFhE,COvFI,CAAhB,EAAgF,MAAhF,CADL;AAAA,KRLG;AAAA,EQQE,aAAL,4BAAc,KAAd;AAAA;AAAA;AAAA,IACK;AAAA,UAAM,cAAN;AAAA,QP4J4B,OO5JN,WAAD,CAAa,YAAb,EAA2B,QAAD,CAAU,KAAV,CAA1B,CP4JO,CO5J5B;AAAA;AAAA,QADL;AAAA,IAEK,IAAK,aAAL,GAAqB,WAAD,CAAc,EAAC,SAAD,EAAY,SAAD,CAAW,KAAX,CAAX,EAAd,CAApB,CAFL;AAAA,WAGK;AAAA,UAAI,CAAK,KAAL,IAAW,cAAX,IAA0B,qBAA1B,CAAJ;AAAA,QPqUuC,OOpUnC;AAAA,iBAAQ,CAAK,CAAO,cAAP,EPoBQ,COpBR,CAAL,EAA4B,CAAC,KAAD,CAA5B,CAAR;AAAA,eACU,CAAC,MAAD,CADV;AAAA,eACkB,CAAC,KAAD,CADlB;AAAA,eACyB,CAAC,EAAD,CADzB;AAAA,YPwTkD,OOvTnB,SAAD,CAAW,KAAX,CPuToB,COxTlD;AAAA;AAAA,eAES,CAAC,MAAD,CAFT;AAAA,YAGS,IAAK,WAAL,GAAkB,CAAK,MAAL,EAAY,CAAC,MAAD,CAAZ,CAAlB,CPqTyC;AAAA,mBOpTzC;AAAA,kBAAI,CAAG,qBAAH,GAAyB,CAAzB,CAAJ;AAAA,gBPgU0B,OOhUM,aPgUN,COhU1B;AAAA;AAAA,gBPkU6B,OOjUzB,EAAG,WAAD,CAAqB,WAAP,CPDpB,KOCoB,CPDd,IOCc,EAAqB,oBAAD,CAAsB,CAAtB,EAAwB,EAAxB,CAApB,CAAd,CAAF,EACE,WADF,EAEG,WAAD,CAAoB,WAAN,CAAmB,CAAM,cP0BhD,CAAW,KAAX,CAAiB,EAAjB,CO1B0C,EPa3B,COb2B,CAAnB,CAAd,CAFF,EPiUyB,COlU7B;AAAA;AAAA,gBPoTyC,COxTlD;AAAA;AAAA,eAQS,CAAC,MAAD,CART;AAAA,YPwTkD,OO/SzC;AAAA,kBAAI,CAAG,qBAAH,GAAyB,CAAzB,CAAJ;AAAA,gBP2T0B,OO3TM,aP2TN,CO3T1B;AAAA;AAAA,gBP6T6B,OO5TzB,EAAS,aAAP,CPNN,KOMM,CPNA,IOMA,EACQ,oBAAD,CAAsB,CAAtB,EAAwB,CAAG,qBAAH,GAAyB,CAAzB,CAAxB,CADP,CAAF,EAEE,WAFF,EAGS,aAAP,CPTN,KOSM,CPTA,IOSA,EAAgB,oBAAD,CAAsB,EAAtB,CAAf,CAHF,EP4TyB,CO7T7B;AAAA;AAAA,gBP+SyC,COxTlD;AAAA;AAAA,eAcS,CAAC,GAAD,CAdT;AAAA,YPwTkD,OOzSzC,EAAG,SAAD,CAAW,KAAX,CAAF,EAAoB,WAApB,EAAiC,SAAD,CAAW;AAAA,kBAAI,CP4FtD,CO5FsD,KP4FpD,CO5F2D,qBP4F3D,GAAa,CAAb,CO5FoD,CAAJ;AAAA,gBPqTjB,OOpTqB,CAAM,cPiBxD,CAAW,KAAX,CAAiB,EAAjB,COjBkD,EPInC,COJmC,CPoTrB,COrTiB;AAAA;AAAA,gBPuTd,OOrTkB,CAAQ,oBAAD,CAAsB,EAAtB,CAAP,EPGnC,COHmC,CPqTlB,COvTc;AAAA;AAAA,gBAAX,CAAhC,EPySyC,COxTlD;AAAA;AAAA,eAkBS,CAAC,GAAD,CAlBT;AAAA,YPwTkD,OOrSzC;AAAA,kBAAI,CAAG,qBAAH,GAAyB,CAAzB,CAAJ;AAAA,gBPiT0B,OOjTM,aPiTN,COjT1B;AAAA;AAAA,gBAEK,IAAK,GAAL,GAAS,CAAQ,cAAR,EPAD,COAC,CAAT;AAAA,oBACK,aADL,GACsB,oBAAD,CAAsB,CAAtB,EAAwB,CAAG,qBAAH,GAAyB,CAAzB,CAAxB,CADrB;AAAA,oBAEK,UAFL,GAEkB,oBAAD,CAAsB,EAAtB,CAFjB,CPiTwB;AAAA,gBO9SvB,qBAAD,CAAyB,GAAzB,CP8SwB;AAAA,gBO7SvB,kBAAD,CAAqB,GAArB,CP6SwB;AAAA,uBO5SxB,EAAG,UAAD,CPtBP,KOsBO,CPtBD,IOsBC,EAAS,aAAT,CAAF,EACE,WADF,EAEG,UAAD,CPxBP,KOwBO,CPxBD,IOwBC,EAAS,UAAT,CAFF,EP4SwB,COnT7B;AAAA;AAAA,gBPqSyC,COxTlD;AAAA;AAAA;AAAA,YPwTkD,OO3RjC,aP2RiC,COxTlD;AAAA;AAAA,YPoUmC,COrUvC;AAAA;AAAA,QPuU0C,OOxStC,aPwSsC,COvU1C;AAAA;AAAA,QAHL;AAAA,KRRG;AAAA,EQ6CH,IAAK,gBAAL,+BAAiB,UAAjB;AAAA;AAAA;AAAA,WACK;AAAA,UAAK,WAAD,CAAO,UAAP,CAAJ;AAAA,QPkSuC,OOlSf,gBAAD,CAAY,mBAAZ,CPkSgB,COlSvC;AAAA,iBACI,EAAO,UAAP,aAAO,UAAP,mBAAO,UAAP,+BADJ;AAAA,QPkSuC,OOjSf,gBAAD,CAAY,CAAM,UPF/B,CAAW,KAAX,CAAiB,EAAjB,COEyB,EPfV,COeU,CAAZ,CPiSgB,COlSvC;AAAA,iBAEI,OAAS,UAAT,cAFJ;AAAA,QPkSuC,OOhSd,CAAG,GAAH,KAAO,CAAM,UPH5B,CAAW,KAAX,CAAiB,EAAjB,COGsB,EPhBP,COgBO,CAAP,CPgSc,COlSvC;AAAA;AAAA,QPoS0C,OOjStC,KPiSsC,COpS1C;AAAA;AAAA,QADL;AAAA,KR7CG;AAAA,EQmDH,IAAK,WAAL,0BAAmB,IAAnB;AAAA;AAAA;AAAA,IACK,IAAK,UAAL,GAAiB,SAAD,CAAW,IAAX,CAAhB,CADL;AAAA,WAGK;AAAA,UAAK,gBAAD,CAAa,UAAb,CAAJ;AAAA,QP0RuC,OO1RV,SP0RU,CO1RvC;AAAA,iBACK,gBAAD,CAAY,UAAZ,CADJ;AAAA,QP0RuC,OOzRX,UPyRW,CO1RvC;AAAA;AAAA,QP4R0C,OO1RtC,EAAE,UAAF,EAAa,GAAb,EP0RsC,CO5R1C;AAAA;AAAA,QAHL;AAAA,KRnDG;AAAA,EQ0DE,SAAL,wBAAa,IAAb;AAAA;AAAA;AAAA,QAAa,IAAb;AAAA;AAAA,WACK;AAAA,UAAI,CAAG,CAAH,KAAK,WAAL,CAAJ;AAAA,QPqRuC,OOrRhB,aAAD,CAAS,CAAO,IAAP,EP3BN,CO2BM,CAAT,CPqRiB,COrRvC;AAAA,iBACI,WADJ;AAAA,QPqRuC,OOpRvB,EAAG,UAAD,CAAY,IAAZ,EAAkB,GAAD,CAAM,UAAD,CAAY,CAAZ,EAAc,EAAd,CAAL,EAAuB,UAAG,IAAH;AAAA;AAAA;AAAA,iBAAU,WAAD,CAAc,IAAd,CAAT;AAAA,UAAvB,CAAjB,CAAF,EACE,IADF,EAEG,aAAD,CAAS,CAAM,IPjBvB,CAAW,KAAX,CAAiB,EAAjB,COiBiB,EP9BF,CO8BE,CAAT,CAFF,EPoRuB,COrRvC;AAAA;AAAA,QPuR0C,OOnRtC,EPmRsC,COvR1C;AAAA;AAAA,QADL;AAAA,KR1DG;AAAA,EQiEE,gBAAL;AAAA;AAAA;AAAA,WAAoB,CAAC,IAAD,CAApB;AAAA,KRjEG;AAAA,EQmEE,UAAL,yBAAW,MAAX,EAAmB,IAAnB,EAA2B,IAA3B;AAAA;AAAA;AAAA,QAA2B,IAA3B;AAAA;AAAA,IACK,IAAK,QAAL,GAAiB,SAAD,CAAW,MAAX,CAAhB;AAAA,QAAoC,QAApC,GAA8C,IAA9C,CADL;AAAA,WAGM,WAAD,CAAc,EAAE;AAAA,UAA2B,eAAD,CAAkB,QAAlB,CAAtB,CPoLH,KOpLG,CAAQ,KP0BpB,MAHI,COvBuB,KPuBvB,E,SAAA,COvBgB,CAAR,CAAJ;AAAA,QP0QuB,OO1QkC,EP0QlC,CO1QvB;AAAA;AAAA,QP4Q0B,OO5QkC,MP4QlC,CO5Q1B;AAAA;AAAA,QAAF,EACE,QADF,EACa,KADb,EAEG,aAAD,CPxDH,KOwDG,CPxDG,IOwDH,IAAS;AAAA,MAAE,IAAF,EAAO,MAAP;AAAA,MAAe,IAAf,EAAoB,IAApB;AAAA,MAAyB,IAAzB,EAA8B,QAA9B;AAAA,KAAT,UAAsD,IAAtD,EAFF,EAAd,CAHL;AAAA,KRnEG;AAAA,EQ2EE,YAAL,2BAAa,IAAb,EAAkB,IAAlB,EAA0B,IAA1B;AAAA;AAAA;AAAA,QAA0B,IAA1B;AAAA;AAAA,IACK,IAAK,MAAL,GAAc,eAAD,CAAmB,SAAD,CAAW,IAAX,CAAlB,CAAb;AAAA,QACK,OADL,GACa;AAAA,MAAE,IAAF,EAAO,IAAP;AAAA,MAAY,IAAZ,EAAiB,IAAjB;AAAA,MAAsB,IAAtB,EAA2B,IAA3B;AAAA,KADb;AAAA,QAEK,EAFL,GAES,eAAD,CAAmB,aAAD,CP9Db,KO8Da,CP9DP,IO8DO,IAAS,OAAT,UAAoB,IAApB,EAAlB,CAFR,CADL;AAAA,IAKK;AAAA,UAAM,cAAN;AAAA,QPqF4B,OOrFN,WAAD,CAAa,EAAb,CPqFO,COrF5B;AAAA;AAAA,QALL;AAAA,IAOK;AAAA;AAAA,QPuIqB,OOvIhB,CAAK,MAAL,EAAY,MAAZ,IAAqB,IAAD,CAAM,EAAN,CAApB,CAAL;AAAA;AAAA,QPyIqB,OOxIf,KAAD,CAAO,CAAC,yBAAD,GACE,oBAAD,CAAuB,IAAvB,CADD,GAC8B,KAD9B,GACoC,EADpC,CAAP,CPwIgB,COzIrB;AAAA;AAAA,QAPL;AAAA,WAWK,SAXL;AAAA,KR3EG;AAAA,EQwFE,WAAL,0BAAe,IAAf;AAAA;AAAA;AAAA,QAAe,IAAf;AAAA;AAAA,IACK,IAAK,EAAL,GAAS,eAAD,CAAmB,aAAD,CPzEb,KOyEa,CPzEP,IOyEO,EAAY,IAAZ,CAAlB,CAAR,CADL;AAAA,IAEK;AAAA,UAAM,cAAN;AAAA,QP2E4B,OO3EN,WAAD,CAAa,EAAb,CP2EO,CO3E5B;AAAA;AAAA,QAFL;AAAA,WAGM,eAAD,CAAmB,IAAD,CAAM,EAAN,CAAlB,CAHL;AAAA,KRxFG;AAAA,EQ8FE,aAAL,4BAAiB,IAAjB;AAAA;AAAA;AAAA,QAAiB,IAAjB;AAAA;AAAA,WACK,EAAC,GAAD,EAAM,UAAD,CAAY,KAAZ,EAAmB,GAAD,CAAK,IAAL,EAAU,SAAV,CAAlB,CAAL,EAA6C,GAA7C,EADL;AAAA,KR9FG;AAAA,EQiGE,cAAL,6BAAe,GAAf;AAAA;AAAA;AAAA,IACK,IAAK,QAAL,GAAc,EAAd,CADL;AAAA,IAEkB,GAAb,CP4FgB,OO5FhB,CP6FS,UO7FF,IP6FE;AAAA;AAAA;AAAA,aO7FS,gBAAD,CAAkB,IAAlB,CP6FR;AAAA,MO7FT,CAFL;AAAA,WAGK,QAHL;AAAA,KRjGG;AAAA,EQsGH,IAAK,OAAL,GAAa,cAAb,CRtGG;AAAA,EQwGE,aAAL,4BAAc,aAAd,EAAiC,IAAjC;AAAA;AAAA;AAAA,QAAiC,IAAjC;AAAA;AAAA,IACK;AAAA,UAAM,cAAN;AAAA,QP4D4B,OO3DrB,WAAD,CAAa,aAAb,CP2DsB,CO5D5B;AAAA;AAAA,QADL;AAAA,IAGK,IAAK,IAAL,GAAU,CAAI,CAAK,aAAL,EAAqB,CAAC,IAAD,CAArB,CAAJ,IAAgC,aAAhC,CAAV;AAAA,QACK,IADL,GACU,CAAI,CAAK,aAAL,EAAqB,CAAC,IAAD,CAArB,CAAJ,IAAgC,IAAhC,CADV;AAAA,QAEK,IAFL,GAEU;AAAA,UAAK,WAAD,CAAO,IAAP,EAAY,CAAC,UAAD,CAAZ,CAAJ;AAAA,QPmO6B,OOnOA,aPmOA,COnO7B;AAAA,iBACI,CAAM,WAAD,CAAO,IAAP,CAAL,IAAkB,EAAQ,IAAR,eAAlB,CADJ;AAAA,QACiD,IAAR,GAAa,EAAE,IAAF,EAAb,CPkOZ;AAAA,eOlOmC,EPkOnC,COnO7B;AAAA;AAAA,QPqOgC,OOnO5B,IPmO4B,COrOhC;AAAA;AAAA,QAFV;AAAA,QAKK,IALL,GAKU;AAAA,UAAM,kBAAN;AAAA,QPqDkB,OOpDJ,eAAD,CAAmB,SAAD,CAAW,kBAAX,CAAlB,CAAP,CACQ,OADR,CACgB,KPlBxB,MAHI,COqB2B,MPrB3B,EOqBkC,CAAC,CAAD,CPrBlC,COqBoB,CADhB,EACkC,GADlC;AAAA,WAEQ,MAFR,CAEe,GAFf,CPoDY,COrDlB;AAAA;AAAA,QALV;AAAA,QASK,IATL,GASW,MAAD,CAAQ,IAAR,EACQ,UAAG,GAAH;AAAA;AAAA;AAAA,aAAS,WAAD,CAAO,GAAP,EAAW,CAAC,IAAD,CAAX,CAAR;AAAA,MADR,CATV,CAHL;AAAA,IAeK,IAAK,QAAL,GAAe,IAAf;AAAA,QACK,IADL,GACW,MAAD,CACC,EAAE,kBAAF,EAAuB,QAAvB,EAAiC,kBAAjC,EAAsD,IAAtD,EAA2D,CAAO,IAAP,EPzF7C,COyF6C,CAA3D,EADD,EAEC,UAAG,CAAH;AAAA;AAAA;AAAA,aAAM,CAAM,WAAD,CAAO,CAAP,CAAL,IAAe,CAAK,CAAL,EAAO,CAAC,IAAD,CAAP,CAAf,CAAN;AAAA,MAFD,CADV,CAfL;AAAA,WAmBK,EAAC,WAAD,EAAa;AAAA,UAAI,IAAJ;AAAA,QPqN0B,OOrNjB,CAAC,GAAD,GAAK,IAAL,CPqNiB,COrN1B;AAAA;AAAA,QPuN6B,OOvNT,EPuNS,COvN7B;AAAA;AAAA,QAAb,EAAqC,GAArC,EACG,UAAD,CAAY,IAAZ,EAAkB,GAAD,CAAK,IAAL,EAAU,SAAV,CAAjB,CADF,EACyC,KADzC,EAEE;AAAA,UAAI,CAAI,kBAAJ,IAAyB,IAAzB,CAAJ;AAAA,QPmNqC,OOlNhC,MAAD,CAAQ,EAAC,IAAD,EACE;AAAA,cAAI,kBAAJ;AAAA,YPiNuB,OOjNE,CAAC,GAAD,GAAM,oBAAD,CAAuB,kBAAvB,EAA4C,KAA5C,CAAL,CPiNF,COjNvB;AAAA;AAAA,YPmN0B,OOnNwD,EPmNxD,COnN1B;AAAA;AAAA,YADF,EAEE;AAAA,cAAI,IAAJ;AAAA,YPgNuB,OOhNd,CAAC,GAAD,GAAK,SAAL,GAAe,GAAf,GAAmB,SAAnB,GAA6B,GAA7B,GAAiC,QAAjC,CPgNc,COhNvB;AAAA;AAAA,YPkN0B,OOlN0B,EPkN1B,COlN1B;AAAA;AAAA,YAFF,EAGE,KAHF,EAAR,CPkNiC,COnNrC;AAAA;AAAA,QPqNwC,OOjNlB,EPiNkB,COrNxC;AAAA;AAAA,QAFF,EAOE;AAAA,UAAM,CP8PA,CA/P+B,OOCtB,IP8PT,KA/P+C,CAAC,SAAD,CA+P/C,CO9PA,IP8PkB,CO9PT,IP8PS,KAAW,IAAX,CO9PlB,CAAN;AAAA,QPmC0B,OOlCnB,MAAD,CAAS,WAAD,CAAc,EAAC,MAAD,EAAS,SAAD,CAAW,IAAX,CAAR,EACZ,2CADY,EAEZ,CAAG,WAAH,GAAe,CAAf,CAFY,EAEM,GAFN,EAAd,CAAR,CPkCoB,COnC1B;AAAA;AAAA,QAPF,EAYG,MAAD,CAAe,SAAP,CPvHG,KOuHH,CPvHS,IOuHT,EAAW,IAAX,CAAR,CAZF,EAaE,IAbF,EAnBL;AAAA,KRxGG;AAAA,EQ0IH,CAAK,MAAL,EAAY,GAAZ,IAAgB,aAAhB,CR1IG;AAAA,EQ4IE,iBAAL,gCAAsB,KAAtB;AAAA;AAAA;AAAA,QAAsB,KAAtB;AAAA;AAAA,IACK,IAAK,gBAAL,GAAwB,qBAAxB,CADL;AAAA,IAEK,CAAK,WAAL,EAAW,CAAC,SAAD,CAAX,IAAuB,IAAvB,CAFL;AAAA,IAGK,IAAK,KAAL,GAAY,WAAD,CP/HE,KO+HF,CP/HQ,IO+HR,EAAU,KAAV,CAAX,CAHL;AAAA,IAIK,CAAK,WAAL,EAAW,CAAC,SAAD,CAAX,IAAuB,gBAAvB,CAJL;AAAA,WAKK,KALL;AAAA,KR5IG;AAAA,EQmJE,WAAL,0BAAe,KAAf;AAAA;AAAA;AAAA,QAAe,KAAf;AAAA;AAAA,IACK;AAAA,UAAM,CPhCA,COgCA,KPhCE,COgCI,YPhCJ,GAAa,CAAb,COgCF,CAAN;AAAA,QPiB4B,OOhBrB,KAAD,CAAO,CAAC,yCAAD,GACO,OAAN,CAAc,KAAd,CADD,CAAP,CPgBsB,COjB5B;AAAA;AAAA,QADL;AAAA,IAKK,IAAK,SAAL,GAAgB,qBAAhB;AAAA,QACK,WADL,GACmB,OAAD,CAAU,KAAV,EAAgB,UAAG,GAAH,EAAO,KAAP;AAAA;AAAA;AAAA,aACE,EAAE;AAAA,YAAI,CAAK,SAAL,IAAgB,EAAM,WAAD,CAAO,GAAP,EAAW,CAAC,MAAD,CAAX,CAAL,CAAhB,CAAJ;AAAA,UPsLC,OOrLG,EAAC,IAAD,EAAO,SAAD,CAAW,GAAX,CAAN,EAAsB,IAAtB,EPqLH,COtLD;AAAA;AAAA,UPwLI,OOtLC,SAAD,CAAW,GAAX,CPsLA,COxLJ;AAAA;AAAA,UAAF,EAGE,IAHF,EAIG,SAAD,CAAW,KAAX,CAJF,EADF;AAAA,MAAhB,CADlB,CALL;AAAA,WAYK;AAAA,UAAI,CAAI,CAAJ,IAAM,kBAAN,CAAJ;AAAA,QPiLuC,OOhLnC,EAAC,IAAD,EAAO,UAAD,CAAY,IAAZ,EAAiB,WAAjB,CAAN,EAAqC,IAArC,EPgLmC,COjLvC;AAAA;AAAA,QPmL0C,OOjLtC,EAAC,GAAD,EAAM,MAAD,CAAS,UAAD,CAAY,KAAZ,EAAkB,WAAlB,CAAR,CAAL,EAA8C,GAA9C,EPiLsC,COnL1C;AAAA;AAAA,QAZL;AAAA,KRnJG;AAAA,EQoKH,IAAK,OAAL,sBAAc,OAAd;AAAA;AAAA;AAAA,WACK;AAAA,UAAI,EAAK,CP2ND,CA/P+B,OOoCrB,OP2NV,KA/P+C,CAAC,SAAD,CA+P/C,CO3NC,IP2NiB,CO3NR,OP2NQ,KAAW,IAAX,CO3NjB,CAAL,CAAJ;AAAA,QP2KuC,OO3KX,EP2KW,CO3KvC;AAAA,iBACI,OAAS,OAAT,cADJ;AAAA,QP2KuC,OO1KV,OAAP,CACQ,OADR,CACgB,KPvE9B,MAHI,CO0EiC,IP1EjC,EO0EsC,CAAC,CAAD,CP1EtC,CO0E0B,CADhB,EACgC,MADhC;AAAA,WAEQ,OAFR,CAEgB,KPxE9B,MAHI,CO2EiC,KP3EjC,EO2EuC,CAAC,CAAD,CP3EvC,CO2E0B,CAFhB,EAEiC,aAFjC,CP0KiB,CO3KvC;AAAA;AAAA,QP6K0C,OOzKtC,OPyKsC,CO7K1C;AAAA;AAAA,QADL;AAAA,KRpKG;AAAA,EQ2KH,IAAK,SAAL,wBAAiB,KAAjB,EAAuB,GAAvB;AAAA;AAAA;AAAA,IACM,WAAD,CAAa,CAAQ,KAAR,GAAc,IAAd,GAAoB,QAAD,CAAU,GAAV,CAAnB,CAAb,CADL;AAAA,WAEK,GAFL;AAAA,KR3KG;AAAA,EQ+KH,IAAK,SAAL,GAAgB,SAAhB,CR/KG;AAAA,EQiLE,YAAL,2BAAa,OAAb;AAAA;AAAA;AAAA,WACK;AAAA,UAAI,OAAS,OAAT,cAAJ;AAAA,QP8JuC,OO9JjB,CAAC,IAAD,GAAO,OAAD,CAAS,OAAT,CAAN,GAAwB,IAAxB,CP8JiB,CO9JvC;AAAA,iBACI,CPhDkC,OOgDzB,OAAT,KPhDkD,CAAC,MAAD,COgDlD,CADJ;AAAA,QP8JuC,OO7JhB,YAAD,CAAS,gBAAD,EAAR,CP6JiB,CO9JvC;AAAA,iBAEK,WAAD,CAAO,OAAP,EAAe,CAAC,OAAD,CAAf,CAFJ;AAAA,QP8JuC,OO5JV,EAAC,IAAD,EAAO,SAAD,CAAW,OAAX,CAAN,EAA0B,IAA1B,EP4JU,CO9JvC;AAAA,iBAGK,WAAD,CAAO,OAAP,EAAe,CAAC,UAAD,CAAf,CAHJ;AAAA,QP8JuC,OO1JnC;AAAA,cAAI,CP2FJ,WO3FY,CAAO,YAAD,CAAe,OAAf,CAAN,CAAR,EP7JK,CAAC,MAAD,CO6JL,CAAJ;AAAA,YP0JmC,OOzJ9B,WAAD,CAAO,CAAC,uBAAD,CAAP,EAAiC,CAAC,IAAD,CAAjC,EAAwC,YAAD,CAAQ,cAAR,CAAvC,EACc,iBAAP,CPxKF,KOwKE,CPxKI,IOwKJ,EAAqB,wBAAD,CAA8B,YAAD,CAAe,OAAf,CAA7B,CAApB,CADP,CPyJ+B,CO1JnC;AAAA;AAAA,YP4JsC,OOzJlC,EAAC,IAAD,EAAO,OAAD,CAAW,SAAD,CAAW,OAAX,CAAV,EAA8B,OAA9B,CAAN,EAA6C,IAA7C,EPyJkC,CO5JtC;AAAA;AAAA,YP0JmC,CO9JvC;AAAA,iBASK,WAAD,CAAO,OAAP,EAAe,CAAC,OAAD,CAAf,CATJ;AAAA,QP8JuC,OOpJnC;AAAA,cAAI,CPqFJ,WOrFY,CAAO,YAAD,CAAe,OAAf,CAAN,CAAR,EPnKK,CAAC,MAAD,COmKL,CAAJ;AAAA,YPoJmC,OOnJ9B,WAAD,CAAO,CAAC,uBAAD,CAAP,EAAiC,CAAC,IAAD,CAAjC,EAAwC,YAAD,CAAQ,cAAR,CAAvC,EACc,iBAAP,CP9KF,KO8KE,CP9KI,IO8KJ,EAAqB,wBAAD,CAA8B,YAAD,CAAe,OAAf,CAA7B,CAApB,CADP,CPmJ+B,COpJnC;AAAA;AAAA,YPsJsC,OOnJjC,WAAD,CP/KK,KO+KL,CP/KW,IO+KX,EAAW,GAAD,CAAK,gBAAL,EAAsB,YAAtB,CAAV,CPmJkC,COtJtC;AAAA;AAAA,YPoJmC,CO9JvC;AAAA,iBAeK,WAAD,CAAO,OAAP,EAAe,CAAC,KAAD,CAAf,CAfJ;AAAA,QP8JuC,OO9InC;AAAA,cAAI,CP+EJ,WO/EY,CAAO,YAAD,CAAe,OAAf,CAAN,CAAR,EPzKK,CAAC,MAAD,COyKL,CAAJ;AAAA,YP8ImC,OO7I9B,WAAD,CAAO,CAAC,uBAAD,CAAP,EAAiC,CAAC,IAAD,CAAjC,EAAwC,YAAD,CAAQ,cAAR,CAAvC,EACc,iBAAP,CPpLF,KOoLE,CPpLI,IOoLJ,EAAqB,wBAAD,CAA8B,YAAD,CAAe,OAAf,CAA7B,CAApB,CADP,CP6I+B,CO9InC;AAAA;AAAA,YPgJsC,OO7IjC,WAAD,CPrLK,KOqLL,CPrLW,IOqLX,EAAW,GAAD,CAAK,gBAAL,EAAsB,YAAtB,CAAV,CP6IkC,COhJtC;AAAA;AAAA,YP8ImC,CO9JvC;AAAA;AAAA,QAsBM,WAAD,CAAa,CAAC,iBAAD,GAAoB,QAAD,CAAU,OAAV,CAAnB,CAAb,CP0IqC;AAAA,eOzIrC,OPyIqC,COhK1C;AAAA;AAAA,QADL;AAAA,KRjLG;AAAA,EQ2ME,YAAL,2BAAa,GAAb;AAAA;AAAA;AAAA,IACK,CAAK,QAAL,EAAc,CAAC,KAAD,CAAd,IAAsB,IAAD,CAAO,eAAD,CAAmB,SAAD,CAAW,GAAX,CAAlB,CAAN,CAArB,CADL;AAAA,WACqE,IADrE;AAAA,KR3MG;AAAA,EQ8MH,IAAK,OAAL,sBAAe,IAAf,EAAoB,EAApB;AAAA;AAAA;AAAA,WACK;AAAA,UAAK,WAAD,CAAO,IAAP,CAAJ;AAAA,QAEK,IAAK,UAAL,GAAkB,EAAD,CAAI,IAAJ,CAAjB,CP+HkC;AAAA,QO9HlC;AAAA,cAAO,WAAD,CAAO,UAAP,CAAN;AAAA,YP7CuB,OO8CjB,CAAK,UAAL,EAAiB,CAAC,QAAD,CAAjB,IAA4B,OAAD,CAAU,mBAAV,EAA+B,EAA/B,CAA3B,CADN;AAAA;AAAA,YP8HkC;AAAA,eO3HlC,UP2HkC,COjIvC;AAAA,iBAQI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BARJ;AAAA,QPiIuC,OOzHrB,GAAD,CAAK,IAAL,EAAU,UAAG,CAAH;AAAA;AAAA;AAAA,iBAAO,OAAD,CAAU,CAAV,EAAY,EAAZ,CAAN;AAAA,UAAV,CPyHsB,COjIvC;AAAA;AAAA,QPmI0C,OO1HrC,EAAD,CAAI,IAAJ,CP0HsC,COnI1C;AAAA;AAAA,QADL;AAAA,KR9MG;AAAA,EQ0NH,IAAK,QAAL,uBAAgB,IAAhB,EAAqB,EAArB;AAAA;AAAA;AAAA,WACK;AAAA,UAAK,WAAD,CAAO,IAAP,CAAJ;AAAA,QPqHuC,OOrHtB;AAAA,cAAO,EAAD,CAAI,IAAJ,CAAN;AAAA,YPtDW,OOsDM,QAAD,CAAW,aAAX,EAAyB,EAAzB,CPtDL,COsDX;AAAA;AAAA,YPqHsB,COrHvC;AAAA,iBACI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BADJ;AAAA,QPqHuC,OOpHZ,IAAV,CP7BD,OO6BC,CP5BR,UO4Be,CP5Bf;AAAA;AAAA;AAAA,iBO4BwB,QAAD,CAAW,CAAX,EAAa,EAAb,CP5BvB;AAAA,UO4BQ,CPoHsB,COrHvC;AAAA;AAAA,QPuH0C,OOrHrC,EAAD,CAAI,IAAJ,CPqHsC,COvH1C;AAAA;AAAA,QADL;AAAA,KR1NG;AAAA,EQgOH,IAAK,wBAAL,uCAAmC,IAAnC,EAAwC,UAAxC;AAAA;AAAA;AAAA,WACK;AAAA,UAAK,WAAD,CAAO,IAAP,CAAJ;AAAA,QAEK,IAAK,UAAL,GAAiB;AAAA,cAAK,yBAAD,CAA6B,WAA7B,CAAJ;AAAA,YP6GiB,OO7G8B,CAAK,UAAL,EAAgB,WAAhB,CP6G9B,CO7GjB;AAAA;AAAA,YP+GoB,OO/G0D,KAAD,CAAO,IAAP,CP+GzD,CO/GpB;AAAA;AAAA,YAAjB,CP6GkC;AAAA,QO5GlC;AAAA,cAAO,WAAD,CAAO,UAAP,CAAN;AAAA,YP/DuB,OOgEjB,CAAK,UAAL,EAAiB,CAAC,QAAD,CAAjB,IAA4B,wBAAD,CAA8B,mBAA9B,EAAmD,UAAnD,CAA3B,CADN;AAAA;AAAA,YP4GkC;AAAA,QOzG1B,UAAR,GAAqB,UAAD,CAAa,UAAb,CAApB,CPyGkC;AAAA,eOxGlC,UPwGkC,CO/GvC;AAAA,iBASI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BATJ;AAAA,QP+GuC,OOrGhC,GAAD,CAAK,IAAL,EAAU,UAAG,CAAH;AAAA;AAAA;AAAA,iBAAO,wBAAD,CAA8B,CAA9B,EAAgC,UAAhC,CAAN;AAAA,UAAV,CPqGiC,CO/GvC;AAAA;AAAA,QPiH0C,OOrGtC,IPqGsC,COjH1C;AAAA;AAAA,QADL;AAAA,KRhOG;AAAA,EQgPE,kBAAL,iCAAoB,MAApB,EAA4B,UAA5B;AAAA;AAAA;AAAA,IACK,IAAK,aAAL,GACM,wBAAD,CAA8B,CAAK,kBAAL,EAAyB,MAAzB,CAA9B,EAAgE,UAAhE,CADL,CADL;AAAA,WAIM,SAAD,CAAW,aAAX,CAJL;AAAA,KRhPG;AAAA,EQsPH,IAAK,cAAL,6BAAe,IAAf;AAAA;AAAA;AAAA,WAAsB,WAAD,CAAO,IAAP,EAAY,CAAC,EAAD,CAAZ,CAArB;AAAA,KRtPG;AAAA,EQwPH,IAAK,YAAL,2BAAoB,IAApB;AAAA;AAAA;AAAA,IACK,IAAK,QAAL,GAAc,IAAd,CADL;AAAA,IAEM,QAAD,CAAW,IAAX,EAAgB,UAAG,CAAH;AAAA;AAAA;AAAA,MACE;AAAA,YAAO,cAAD,CAAU,CAAV,CAAN;AAAA,UPtFU,OOuFJ,CAAK,QAAL,EAAc,QAAd,IAAyB,SAAD,CAAW,CAAX,CAAxB,CADN;AAAA;AAAA,UADF;AAAA,aAGE,EAAM,WAAD,CAAO,CAAP,EAAS,CAAC,IAAD,CAAT,CAAL,CAHF;AAAA,MAAhB,CAFL;AAAA,WAMK,QANL;AAAA,KRxPG;AAAA,EQgQH,IAAK,UAAL,yBAAkB,IAAlB;AAAA;AAAA;AAAA,IACK;AAAA,UAAM,CAAK,IAAL,IAAU,EAAO,aAAP,aAAO,aAAP,mBAAO,aAAP,+BAAV,CAAN;AAAA,QACM,IAAK,QAAL,GAAc,EAAd,CP7FsB;AAAA,QO8FN,aAAhB,CPpEU,OOoEV,CPnEG,UOmEI,OPnEJ;AAAA;AAAA;AAAA,iBOoEG;AAAA,gBAAI,CAAM,WAAD,CAAO,OAAP,EAAe,CAAC,IAAD,CAAf,CAAL,IACK,EAAO,gBAAP,aAAO,gBAAP,mBAAO,gBAAP,+BADL,IAEK,CAAG,uBAAH,KAA2B,CAA3B,CAFL,IAGK,EAAO,CAAO,gBAAP,EPvOH,COuOG,CAAP,aAAO,CAAO,gBAAP,EPvOH,COuOG,CAAP,mBAAO,CAAO,gBAAP,EPvOH,COuOG,CAAP,+BAHL,CAAJ;AAAA,cP4E2B,OOxErB,mBAAD,CAAqB,QAArB,EAA8B,CAAO,gBAAP,EPxOtB,COwOsB,CAA9B,CPwEsB,CO5E3B;AAAA;AAAA,cP8E8B,OOzExB,aAAD,CAAe,OAAf,CPyEyB,CO9E9B;AAAA;AAAA,cPpEH;AAAA,UOmEH,CP9FsB;AAAA,eOsGtB,CAAK,IAAL,EAAU,CAAC,QAAD,CAAV,IAAoB,QAApB,CAVN;AAAA;AAAA,QADL;AAAA,WAYK,IAZL;AAAA,KRhQG;AAAA,EQ+QH,IAAK,wBAAL,uCAAkC,IAAlC;AAAA;AAAA;AAAA,WACM,OAAD,CAAU,GAAD,CPCL,WODU,CAAM,IAAN,CAAL,EACK,UAAG,GAAH;AAAA;AAAA;AAAA,aAAQ,EAAC,GAAD,EAAM,CAAK,IAAL,EAAU,GAAV,CAAN,EAAR;AAAA,MADL,CAAT,CADL;AAAA,KR/QG;AAAA,EQoRE,WAAL,0BAAe,IAAf;AAAA;AAAA;AAAA,QAAe,IAAf;AAAA;AAAA,IACO,IAAK,WAAL,GAAkB,EAAlB,CADP;AAAA,WAEO;AAAA,UAAI,EAAQ,IAAR,eAAJ;AAAA,QP0DqC,OO1DnB,IP0DmB,CO1DrC;AAAA;AAAA,QAEK,IAAK,UAAL,yBAAkB,IAAlB;AAAA;AAAA;AAAA,iBACK,EAAC,IAAD,EAAO,UAAD,CAAY,IAAZ,EAAkB,GAAD,CAAK,IAAL,EAAU,UAAG,GAAH;AAAA;AAAA;AAAA,mBAAQ,cAAR;AAAA,YAAV,CAAjB,CAAN,EAA2D,IAA3D,EADL;AAAA,WP0DmC;AAAA,QOvDlC,YAAD,CAAe,UAAG,GAAH;AAAA;AAAA;AAAA,iBACT;AAAA,gBAAK,WAAD,CAAO,GAAP,EAAW,CAAC,IAAD,CAAX,CAAJ;AAAA,cPoD0B,OOpDH,gBAAD,CAAmB,EAAC,UAAD,EAAa,SAAD,CAAW,GAAX,CAAZ,EAAnB,CPoDI,COpD1B;AAAA,uBACC,EAAO,CAAM,WPhPjB,CAAW,KAAX,CAAiB,EAAjB,COgPW,EP7PI,CO6PJ,CAAP,aAAO,CAAM,WPhPjB,CAAW,KAAX,CAAiB,EAAjB,COgPW,EP7PI,CO6PJ,CAAP,mBAAO,CAAM,WPhPjB,CAAW,KAAX,CAAiB,EAAjB,COgPW,EP7PI,CO6PJ,CAAP,+BADD;AAAA,cPoD0B,OOnDS,CAAM,WPhP5C,CAAW,KAAX,CAAiB,EAAjB,COgPsC,EP7PvB,CO6PuB,CAAN,CAA0B,IAA1B,CAA+B,EAAC,UAAD,EAAa,SAAD,CAAW,GAAX,CAAZ,EAA/B,CPmDH,COpD1B;AAAA;AAAA,cPsD6B,OOpD3B,gBAAD,CAAmB,EAAC,EAAC,UAAD,EAAa,SAAD,CAAW,GAAX,CAAZ,EAAD,EAAnB,CPoD4B,COtD7B;AAAA;AAAA,cADS;AAAA,UAAf,CPuDmC;AAAA,QOlD3B,WAAR,GAAsB,GAAD,CAAK,WAAL,EACK,UAAG,OAAH;AAAA;AAAA;AAAA,iBACE;AAAA,gBAAI,EAAO,OAAP,aAAO,OAAP,mBAAO,OAAP,+BAAJ;AAAA,cP8CI,OO7CC,UAAD,CAAa,OAAb,CP6CA,CO9CJ;AAAA;AAAA,cPgDO,OO9CH,kBP8CG,COhDP;AAAA;AAAA,cADF;AAAA,UADL,CAArB,CPkDmC;AAAA,eO5CnC;AAAA,cAAI,CAAG,CAAH,KAAK,CAAQ,WAAR,EP7QH,CAAC,MAAD,CO6QG,CAAL,CAAJ;AAAA,YP0CgC,OOzC5B,CAAO,WAAP,EPvQc,COuQd,CPyC4B,CO1ChC;AAAA;AAAA,YP4CmC,OO1C/B,EAAC,CAAO,WAAP,EPxQa,COwQb,CAAD,EAAsB,UAAtB,EAAkC,UAAD,CAAY,IAAZ,EAAuB,WAAN,CP9P/C,KO8P+C,CP9PzC,CO8PyC,CAAjB,CAAjC,EAAsE,GAAtE,EP0C+B,CO5CnC;AAAA;AAAA,YP4CmC,CO5DxC;AAAA;AAAA,QAFP;AAAA,KRpRG;AAAA,EQ2SE,WAAL,0BAAY,MAAZ,EAAuB,IAAvB;AAAA;AAAA;AAAA,QAAuB,IAAvB;AAAA;AAAA,WACK;AAAA,UAAK,UAAD,CAAM,IAAN,EAAW,UAAG,GAAH;AAAA;AAAA;AAAA,eAAS,WAAD,CAAO,GAAP,EAAW,CAAC,IAAD,CAAX,CAAR;AAAA,QAAX,CAAJ;AAAA,QPoCuC,OOnChC,YAAD,CAAc,MAAd,EAAuB,WAAD,CP7Rf,KO6Re,CP7RT,IO6RS,EAAgB,IAAhB,CAAtB,CPmCiC,COpCvC;AAAA;AAAA,QPsC0C,OOpCpC,EAAG,SAAD,CAAW,MAAX,CAAF,EACQ,GADR,EACa,UAAD,CAAY,IAAZ,EAAkB,GAAD,CAAK,IAAL,EAAU,SAAV,CAAjB,CADZ,EACmD,GADnD,EPoCoC,COtC1C;AAAA;AAAA,QADL;AAAA,KR3SG;AAAA,EQiTE,WAAL,0BAAe,QAAf;AAAA;AAAA;AAAA,QAAe,QAAf;AAAA;AAAA,WACM,SAAD,CAAW,QAAX,CADL;AAAA,KR7TC;AAAA,ESGD,IAAK,WAAL,0BAAY,KAAZ,EAAkB,IAAlB;AAAA;AAAA;AAAA,WACK,CACC,CRuYO,CA/P+B,OQxI7B,KRuYF,KA/P+C,CAAC,SAAD,CA+P/C,CQvYP,IRuYyB,CQvYhB,KRuYgB,KAAW,IAAX,CQvYzB,CADD,IAEC,CAAG,CAAC,MAAD,CAAH,KAAW,OAAQ,KAAnB,CAFD,IAGC,OAAS,UAAT,cAHD,IAIC,CAAI,CRmIiC,OQnIrB,IAAZ,KRmIiD,CAAC,SAAD,CQnIjD,CAAJ,IAAsB,CAAG,UAAH,KAAc,IAAd,CAAtB,CAJD,IAKE,oBAAD,CAAwB,CAAC,QAAD,CAAxB,CALD,CADL;AAAA,KTUG;AAAA,ESFH,IAAK,gBAAL,+BAAkB,IAAlB;AAAA;AAAA;AAAA,WACK;AAAA,UAAK,WAAD,CAAO,IAAP,CAAJ;AAAA,QRgVuC,OQhVrB,gBAAD,CAAa,aAAb,CRgVsB,CQhVvC;AAAA,iBACI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BADJ;AAAA,QRgVuC,OQ/UrB,UAAD,CAAM,IAAN,EAAW,gBAAX,CR+UsB,CQhVvC;AAAA,iBAEI,OAAS,IAAT,cAFJ;AAAA,QRgVuC,OQ9UnB,UAAD,CAAY,KR8FvB,MAHI,CQ3F0B,QR2F1B,E,SAAA,CQ3FmB,CAAZ,CR8UoB,CQhVvC;AAAA;AAAA,QRkV0C,OQ/UtC,CAAI,CAAG,IAAH,KAAQ,IAAR,CAAJ,IACI,CR2H8B,OQ3HlB,IAAZ,KR2H8C,CAAC,SAAD,CQ3H9C,CADJ,IAEI,CAAG,KAAH,KAAS,IAAT,CAFJ,CR+UsC,CQlV1C;AAAA;AAAA,QADL;AAAA,KTEG;AAAA,ESMH,IAAK,WAAL,0BAAmB,IAAnB;AAAA;AAAA;AAAA,WACK;AAAA,UAAK,WAAD,CAAO,IAAP,CAAJ;AAAA,QACkB,CAAK,IAAL,EAAU,CAAC,QAAD,CAAV,IAAqB,WAAD,CAAc,aAAd,CAApB,CRuUqB;AAAA,eQtUrB;AAAA,cAAI,CAAK,aAAL,IAAmB,oBAAnB,CAAJ;AAAA,YRsUqB,OQtUwB,IRsUxB,CQtUrB;AAAA;AAAA,YRwUwB,OQxU0B,IRwU1B,CQxUxB;AAAA;AAAA,YRsUqB,CQxUvC;AAAA,iBAGI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAHJ;AAAA,QAIkB,IAAK,SAAL,GAAgB,OAAD,CAAU,GAAD,CAAK,IAAL,EAAU,WAAV,CAAT,CAAf,CRoUqB;AAAA,eQnUrB;AAAA,cAAI,CAAK,SAAL,IAAe,gBAAf,CAAJ;AAAA,YRmUqB,OQnUgB,SRmUhB,CQnUrB;AAAA;AAAA,YRqUwB,OQrUuB,IRqUvB,CQrUxB;AAAA;AAAA,YRmUqB,CQxUvC;AAAA;AAAA,QR0U0C,OQpUtC;AAAA,cAAI,CAAI,CAAG,IAAH,KAAQ,EAAR,CAAJ,IAAgB,CAAG,IAAH,KAAQ,KAAR,CAAhB,CAAJ;AAAA,YRkUmC,OQlUC,IRkUD,CQlUnC;AAAA;AAAA,YRoUsC,OQpUG,IRoUH,CQpUtC;AAAA;AAAA,YRoUsC,CQ1U1C;AAAA;AAAA,QADL;AAAA,KTNG;AAAA,ESeH,IAAK,gBAAL,+BAAwB,IAAxB;AAAA;AAAA;AAAA,WACK;AAAA,UAAI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAAJ;AAAA,QR+TuC,OQ/TrB,GAAD,CAAK,IAAL,EAAU,gBAAV,CR+TsB,CQ/TvC;AAAA,iBACI,CAAM,WAAD,CAAO,IAAP,CAAL,IAAkB,CAAI,CAAC,MAAD,CAAJ,KAAY,SAAZ,CAAlB,CADJ;AAAA,QR+TuC,OQ9TQ,SAAD,CAAW,IAAX,CR8TP,CQ/TvC;AAAA,iBAEI,CAAM,WAAD,CAAO,IAAP,CAAL,IAAkB,CAAG,CAAC,MAAD,CAAH,KAAW,SAAX,CAAlB,CAFJ;AAAA,QAG8C,CAAK,IAAL,EAAU,CAAC,QAAD,CAAV,IAAqB,gBAAD,CAAmB,aAAnB,CAApB,CR4TP;AAAA,eQ3TO,IR2TP,CQ/TvC;AAAA;AAAA,QRiU0C,OQ5TtC,IR4TsC,CQjU1C;AAAA;AAAA,QADL;AAAA,KTfG;AAAA,ESuBH,IAAK,SAAL,wBAAgB,IAAhB,EAAqB,YAArB;AAAA;AAAA;AAAA,IACK;AAAA,UACC,OAAS,IAAT,cADD;AAAA,QRuTuC,OQrT9B,IAAR,GAAa;AAAA,UAAE,IAAF,EAAO,CAAC,EAAD,CAAP;AAAA,UAAW,KAAX,EAAiB,IAAjB;AAAA,UAAsB,QAAtB,EAA+B,EAA/B;AAAA,SAAb,CAFD;AAAA,iBAIC,CRsGqC,OQtG5B,IAAT,KRsGqD,CAAC,MAAD,CQtGrD,CAJD;AAAA,QRuTuC,OQlT9B,IAAR,GAAa;AAAA,UAAE,IAAF,EAAO,CAAC,MAAD,CAAP;AAAA,UAAe,KAAf,EAAsB,aAAD,EAArB;AAAA,UAAsC,QAAtC,EAA+C,EAA/C;AAAA,SAAb,CALD;AAAA;AAAA,QADL;AAAA,WAQK;AAAA,UAAI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAAJ;AAAA,QRgTuC,OQhTtB,IRgTsB,CQhTvC;AAAA,iBACI,CR+VI,CA/P+B,OQhG1B,IR+VL,KA/P+C,CAAC,SAAD,CA+P/C,CQ/VJ,IR+VsB,CQ/Vb,IR+Va,KAAW,IAAX,CQ/VtB,CADJ;AAAA,QAEoB,IAAK,UAAL,GAAgB,CAAI,CAAK,SAAL,EAAe,SAAf,CAAJ,IAA8B,iBAA9B,CAAhB,CR8SmB;AAAA,QQ7SnB,IAAK,MAAL,GAAa,UAAD,CAAY,IAAZ,CAAZ,CR6SmB;AAAA,QQ5SnB,IAAK,UAAL,GAAkB,gBAAD,CAAmB;AAAA,cAAK,WAAD,CAAO,MAAP,CAAJ;AAAA,YR4SjB,OQ5SoC,MR4SpC,CQ5SiB;AAAA;AAAA,YR8Sd,OQ7SD;AAAA,cAAE,QAAF,EAAW,MAAX;AAAA,cAAkB,IAAlB,EAAuB,CAAC,MAAD,CAAvB;AAAA,aR6SC,CQ9Sc;AAAA;AAAA,YAAnB,CAAjB,CR4SmB;AAAA,QQ1SnB,CAAK,UAAL,EACK,CAAC,QAAD,CADL,IACgB,OAAD,CAAU,OAAD,CAAS,mBAAT,CAAT,CADf;AAAA,SAAK,UAAL,EAEK,CAAC,MAAD,CAFL,IAEa,IAFb,CR0SmB;AAAA,QQtSnB;AAAA,cAAM,cAAN;AAAA,YR2HQ,OQ1HD,WAAD,CAAc,QAAD,CAAU,IAAV,CAAb,EACc,GAAD,CAAK,IAAL,CADb,EAEc,QAAD,CAAU,UAAV,CAFb,CR0HE,CQ3HR;AAAA;AAAA,YRsSmB;AAAA,QQjSnB,CAAK,IAAL,EAAU,CAAC,UAAD,CAAV,IAAsB,UAAtB,CRiSmB;AAAA,eQ9RnB;AAAA,cAAK,gBAAD,CAAa,UAAb,CAAJ;AAAA,YR8RmB,OQ9RW,SR8RX,CQ9RnB;AAAA;AAAA,YRgSsB,OQ/RlB,UR+RkB,CQhStB;AAAA;AAAA,YR8RmB,CQhTvC;AAAA;AAAA,QARL;AAAA,KTvBG;AAAA,ESqDH,CAAK,QAAL,EAAc,CAAC,SAAD,CAAd,IAAyB,SAAzB,CTrDG;AAAA,ESuDH,IAAK,YAAL,GAAmB,IAAnB,CTvDG;AAAA,ESyDE,aAAL,4BAAoB,IAApB;AAAA;AAAA;AAAA,IACK,IAAK,MAAL,GAAa,SAAD,CAAW,CAAO,aAAP,ER3BE,CQ2BF,CAAX,CAAZ,CADL;AAAA,IAEK,CAAK,MAAL,EAAY,CAAC,QAAD,CAAZ,IAAsB,EAAC,CAAC,SAAD,GAAW,CAAO,eAAP,ER5BT,CQ4BS,CAAX,CAAD,EAAtB,CAFL;AAAA,WAGK,MAHL;AAAA,KTzDG;AAAA,ES8DE,cAAL,6BAAqB,IAArB;AAAA;AAAA;AAAA,WACM,kBAAD,CAAc,IAAd,EAAmB,aAAnB,CADL;AAAA,KT9DG;AAAA,ESiEE,YAAL,2BAAmB,IAAnB;AAAA;AAAA;AAAA,WACM,SAAD,CAAW,CAAO,aAAP,ERnCc,CQmCd,CAAX,CADL;AAAA,KTjEG;AAAA,ESoEE,cAAL,6BAAqB,IAArB;AAAA;AAAA;AAAA,WACM,iBAAD,CAAa,IAAb,EAAkB,aAAlB,CADL;AAAA,KTpEG;AAAA,ESwEE,iBAAL,gCAAwB,IAAxB;AAAA;AAAA;AAAA,WACK,UADL;AAAA,KTxEG;AAAA,ES2EE,gBAAL,+BAAuB,IAAvB;AAAA;AAAA;AAAA,WACK,IADL;AAAA,KT3EG;AAAA,ES8EE,gBAAL,+BAAuB,IAAvB;AAAA;AAAA;AAAA,WACY,UAAD,CAAc,kBAAD,CAAoB,KRgB/B,MAHI,CQbkC,GRalC,EQbsC,CAAC,CAAD,CRatC,CQb2B,CAApB,EAAmC,EAAnC,CAAb,CAAN,CAA2D,QAA3D,EADL;AAAA,KT9EG;AAAA,ESiFE,cAAL,6BAAqB,IAArB;AAAA;AAAA;AAAA,WACK;AAAA,UAAI,CAAG,CAAH,KAAK,oBAAL,CAAJ;AAAA,QR6PuC,OQ5PlC,SAAD,CAAW,CAAO,aAAP,ERpDU,CQoDV,CAAX,CR4PmC,CQ7PvC;AAAA;AAAA,QR+P0C,OQ7PrC,UAAD,CAAY,IAAZ,EAAkB,OAAD,CAAU,GAAD,CAAK,aAAL,EAAmB,WAAnB,CAAT,CAAjB,CR6PsC,CQ/P1C;AAAA;AAAA,QADL;AAAA,KTjFG;AAAA,ESsFE,oBAAL,mCAA2B,IAA3B,EAAgC,YAAhC;AAAA;AAAA;AAAA,WACK;AAAA,UAAI,oBAAJ;AAAA,QAEK,IAAK,IAAL,GAAU,CAAO,aAAP,ER1DU,CQ0DV,CAAV;AAAA,YACK,IADL,GACgB,aAAN,CRjDD,KQiDC,CRjDK,CQiDL,CADV;AAAA,YAEK,KAFL,GAEW,CAAK,MAAL,EAAa,eAAD,CAAmB,SAAD,CAAW,IAAX,CAAlB,CAAZ,CAFX,CRsPkC;AAAA,QQlPlC;AAAA,cAAM,CRkSH,CA/P+B,OQnCnB,KRkSZ,KA/P+C,CAAC,SAAD,CA+P/C,CQlSG,IRkSe,CQlSN,KRkSM,KAAW,IAAX,CQlSf,CAAN;AAAA,YRuEuB,OQvED,CAAK,IAAL,EAAU,CAAC,IAAD,CAAV,IAAgB,CAAC,KAAD,CAAhB,CAAtB;AAAA;AAAA,YRkPkC;AAAA,QQhPlC;AAAA,cAAM,CAAK,IAAL,IAAU,CAAG,CAAC,MAAD,CAAH,KAAW,SAAX,CAAV,CAAN;AAAA,YACc,KRoES,GQpEH,aRoEG;AAAA,mBQpEW,IRoEX,GQpEgB,aRoEhB,CQrEvB;AAAA;AAAA,YRgPkC;AAAA,QQ7OlC;AAAA,cAAM,CR4B2B,OQ5Bf,KAAZ,KR4B2C,CAAC,SAAD,CQ5B3C,CAAN;AAAA,YACc,KRiES,GQjEH,WRiEG;AAAA,mBQjES,IRiET,GQjEc,aRiEd,CQlEvB;AAAA;AAAA,YR6OkC;AAAA,eQ1OjC,WAAD,CAAa,IAAb,EAAkB,IAAlB,CR0OkC,CQxPvC;AAAA;AAAA,QR0P0C,OQ1OtC,MR0OsC,CQ1P1C;AAAA;AAAA,QADL;AAAA,KTtFG;AAAA,ESyGE,iBAAL,gCAAwB,IAAxB;AAAA;AAAA;AAAA,WACY,WAAP,CR3Fa,KQ2Fb,CR3FmB,IQ2FnB,EAAmB,aAAnB,CADL;AAAA,KTzGG;AAAA,ES4GE,eAAL,8BAAsB,IAAtB;AAAA;AAAA;AAAA,WAAmC,WAAP,CR7FV,KQ6FU,CR7FJ,IQ6FI,EAAmB,aAAnB,CAA5B;AAAA,KT5GG;AAAA,ES8GE,iBAAL,gCAAwB,IAAxB;AAAA;AAAA;AAAA,IACK,IAAK,MAAL,GAAY,UAAZ,CADL;AAAA,WAEM,MAAD,CAAe,MAAP,CACQ,OADR,CACgB,KRlBhB,MAHI,CQqBmB,KRrBnB,EQqByB,CAAC,CAAD,CRrBzB,CQqBY,CADhB,EACiC,GADjC;AAAA,OAEQ,OAFR,CAEgB,KRnBhB,MAHI,CQsBmB,MRtBnB,E,SAAA,CQsBY,CAFhB,EAE+B,SAF/B;AAAA,OAGQ,OAHR,CAGgB,KRpBhB,MAHI,CQuBmB,IRvBnB,E,SAAA,CQuBY,CAHhB,EAG6B,QAH7B,CAAR,EAIS,YAAD,CAAc,KRrBd,MAHI,CQwBiB,MRxBjB,EQwBwB,CAAC,CAAD,CRxBxB,CQwBU,CAAd,CAJR,EAKQ,UAAG,YAAH,EAAiB,KAAjB;AAAA;AAAA;AAAA,aACG,oBAAD,CAAuB,KAAvB,EAC6B,CAAQ,KAAR,ERvFb,CQuFa,CAAN,CAAqB,WAArB,EADvB,CADF;AAAA,MALR,CAFL;AAAA,KT9GG;AAAA,ESyHE,gBAAL,+BAAuB,IAAvB;AAAA;AAAA;AAAA,WACY,UAAP,CAAmB,KAAnB,CAAyB,IAAzB;AAAA,OACQ,IADR,CACa,aADb,CADL;AAAA,KTzHG;AAAA,ES6HE,iBAAL,gCAAwB,IAAxB;AAAA;AAAA;AAAA,WAA8B,IAA9B;AAAA,KT1IC;AAAA,EUJD,IAAK,QAAL,uBAAe,KAAf;AAAA;AAAA;AAAA,IACM,mBAAD,EADL;AAAA,WAEM,eAAD,CAAmB,SAAD,CAAY,WAAD,CAAc,KAAD,CAAO,KAAP,CAAb,CAAX,CAAlB,CAFL;AAAA,KVkBG;AAAA,EUdH,IAAK,SAAL,wBAAgB,KAAhB;AAAA;AAAA;AAAA,IACM,mBAAD,EADL;AAAA,WAEM,YAAD,CAAe,SAAD,CAAY,WAAD,CAAc,KAAD,CAAO,KAAP,CAAb,CAAX,CAAd,CAFL;AAAA,KVcG;AAAA,EUVH,CAAK,QAAL,EAAc,CAAC,QAAD,CAAd,IAAwB,QAAxB,CVUG;AAAA,EURE,gBAAL;AAAA;AAAA;AAAA,WACK,CAAM,oBAAD,EAAL,EAA6B,CAAC,OAAD,CAA7B,CADL;AAAA,KVQG;AAAA,EULE,qBAAL,oCAA6B,IAA7B;AAAA;AAAA;AAAA,WACM,YAAD,CAAc,KTkGN,MAHI,CS/FS,UT+FT,E,SAAA,CS/FE,CAAd,EAAiC,IAAjC,CADL;AAAA,KVKG;AAAA,EUFH,CAAK,QAAL,EAAc,CAAC,IAAD,CAAd,IAAoB,CAAC,aAAD,CAApB,CVEG;AAAA,EUAH,IAAK,cAAL,6BAAwB,GAAxB,EAA4B,IAA5B,EAAiC,EAAjC;AAAA;AAAA;AAAA,IACK,IAAK,MAAL,GAAY;AAAA,MAAE,GAAF,EAAM,YAAN;AAAA,MACE,IADF,EACO,aADP;AAAA,KAAZ,CADL;AAAA,IAGK,CAAK,QAAL,EACK,CAAC,GAAD,CADL,IACW,GADX;AAAA,KAAK,QAAL,EAEK,CAAC,IAAD,CAFL,IAEW,IAFX,CAHL;AAAA,IAOK,IAAK,MAAL,GAAa,EAAD,EAAZ,CAPL;AAAA,IASK,CAAK,QAAL,EACK,CAAC,GAAD,CADL,IACW,UADX;AAAA,KAAK,QAAL,EAEK,CAAC,IAAD,CAFL,IAEW,WAFX,CATL;AAAA,WAaK,MAbL;AAAA,KVAG;AAAA,EUeH,CAAK,QAAL,EAAc,CAAC,WAAD,CAAd,IAA4B,IAA5B,CVfG;AAAA,EUiBE,qBAAL,oCAA6B,QAA7B;AAAA;AAAA;AAAA,WACM,eAAD,CAAmB,sBAAD,CAAyB,QAAzB,CAAlB,CADL;AAAA,KVjBG;AAAA,EUoBE,qBAAL,oCAA6B,QAA7B;AAAA;AAAA;AAAA,IACM,mBAAD,EADL;AAAA,IAEK,IAAK,MAAL,GAAY,8BAAZ,CAFL;AAAA,IAGK,CAAK,oBAAL,EAA0B,CAAC,SAAD,CAA1B,IAAsC,IAAtC,CAHL;AAAA,IAIK,IAAK,OAAL,GAAc,qBAAD,CAAwB,QAAxB,CAAb,CAJL;AAAA,IAKK,CAAK,oBAAL,EAA0B,CAAC,SAAD,CAA1B,IAAsC,MAAtC,CALL;AAAA,WAMK,OANL;AAAA,KVpBG;AAAA,EU4BE,uBAAL,sCAA8B,IAA9B;AAAA;AAAA;AAAA,WACM,gBAAD,CAAmB,IAAD,CAAO,eAAD,CAAmB,SAAD,CAAW,IAAX,CAAlB,CAAN,CAAlB,CADL;AAAA,KV1CC;AAAA;AAAA,EAiBE,IAAK,OAAL,GAAa,EAAC,OAAD,EAAS,SAAT,EAAb,CAjBF;AAAA,EAkBO,oBAAL;AAAA;AAAA;AAAA,WAA8B,OAA9B;AAAA,KAlBF;AAAA,EAoBO,sBAAL;AAAA;AAAA;AAAA,WACK,CAAQ,YAAR,GAAqB,mBAArB,GAAyC,eAAzC,CADL;AAAA,KApBF;AAAA,EAuBE,CAAK,QAAL,EAAc,CAAC,GAAD,CAAd,IAAmB,SAAnB,CAvBF;AAAA,SAyBE;AAAA,QAAM,CCoHmC,ODpHzB,CAAV,KCoHmD,CAAC,SAAD,CDpHnD,CAAN;AAAA,MCwJ8B,ODnLtB,CA4BF,CAAG;AAAA;AAAA;AAAA,QACC,IAAK,QAAL,GAAc,aAAd;AAAA,YACK,OADL,GACc,WAAD,CA9Bf,CCoXkB,CDtVc,4CCsVd,CDtVW,CACI,GADJ,CACQ;AAAA;AAAA;AAAA,iBAAI,QAAJ;AAAA,UADR,CAAd,CADb,CADD;AAAA,QAKM,mBAAL;AAAA;AAAA;AAAA,iBAA4B,KAA5B;AAAA,WALD;AAAA,QAQC,IAAK,QAAL,uBAAgB,EAAhB;AAAA;AAAA;AAAA,iBACM,KAAK,QCsEP,CDtEgB,ECsEhB,CDtEE,CAAD,EADL;AAAA,WARD;AAAA,QAWM,gBAAL,+BAAuB,GAAvB;AAAA;AAAA;AAAA,iBAvCA,KCoXgB,CD5UJ,GC4UI,CD5UX,CAAY,IAAZ,CAAiB,UAAG,IAAH;AAAA;AAAA;AAAA,mBAAU,QAAD,CAAY,QAAD,CAAU,IAAV,CAAX,CAAT;AAAA,YAAjB,CADL;AAAA,WAXD;AAAA,QAcM,mBAAL,kCAA2B,EAA3B;AAAA;AAAA;AAAA,iBACa,gBAAD,CAAkB,8BAAlB,CAAP,CACQ,IADR,CACa;AAAA;AAAA;AAAA,mBAAI;AAAA,kBAAM,CC+FE,OD/FS,EAAX,KC+FkB,CAAC,QAAD,CD/FlB,CAAN;AAAA,gBCuIF,ODvIwB,EAAD,CAAI,QAAJ,CCuIvB,CDvIE;AAAA;AAAA,gBAAJ;AAAA,YADb,CADL;AAAA,WAdD;AAAA,eAkBS,mBAAD,EAAP,CAA+B,IAA/B,CAAqC,GAAD,CAAK,OAAL,EAAa,gBAAb,CAApC,CAlBD;AAAA,QAAH,CCuJwB,CDxJ9B;AAAA;AAAA,MAzBF;AAAA,EAAD,CA4CsF,IA5CtF,C","sourcesContent":["(meta \"//# sourceMappingURL=browser.map\\n\")\n\n(chainable $ $.get)\n\n((#(root)\n (var sibilant {} exports sibilant)\n (def error (str) (throw str))\n (def inspect (item) (if item.to-source (item.to-source) (item.to-string)))\n (set root 'sibilant sibilant)\n\n (include \"../include/functional\")\n (include \"./pretty-printer\")\n (include \"./output-formatter\")\n (include \"../include/functional\")\n (include \"./parser\")\n (include \"./restructurer\")\n (include \"./macros\")\n (include \"./transpiler\")\n (include \"./require-and-include\")\n\n ; (var package (include \"../package.son\"))\n (var package {version \"BROWSER\"})\n (def sibilant.package-info () package)\n\n (def sibilant.version-string ()\n (concat package.name \" browser version \" package.version))\n\n (set sibilant 'dir \"browser\")\n\n (when (defined? $)\n ($ (#>\n (var sibilant root.sibilant\n scripts ($.make-array ($ \"script[type=\\\"application/sibilant\\\"][src]\"\n (map (#> this.src)))))\n\n (def sibilant.initialize () false)\n\n \n (def eval-code (js)\n ((new Function js)))\n\n (def sibilant.include (url)\n ($.get url (done (#(data) (eval-code (sibilize data))))))\n\n (def sibilant.load-macros (fn)\n (chain (sibilant.include \"/javascripts/macros.sibilant\")\n (done (#> (when (function? fn) (fn sibilant))))))\n\n (chain (sibilant.load-macros) (then (map scripts sibilant.include))))))) this)\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)","(def bulk-map (arr fn)\n (var index 0\n group-size fn.length\n ret-arr [])\n\n (while (< index arr.length)\n (send ret-arr push\n (apply fn (send arr slice\n index (+ index group-size))))\n (incr-by index group-size))\n ret-arr)\n\n(def inject (start items fn)\n (var value start)\n (when (list? items)\n (each (item index) items\n (assign value (fn value item index))))\n value)\n\n(def map (items fn)\n (inject [] items\n (#(collector item index)\n (send collector push (fn item index))\n collector)))\n\n(def select (items fn)\n (inject [] items\n (#(collector item index)\n (when (fn item index)\n (send collector push item))\n collector)))\n\n(def detect (items fn)\n (var return-item undefined\n index 0\n items (or items []))\n\n (until (or (= items.length index) return-item)\n (when (fn (get items index) index)\n (assign return-item (get items index)))\n (incr index))\n\n return-item)\n\n(def all? (items fn)\n (undefined? (detect items (#(item index) (not (fn item index))))))\n\n(def none? (items fn)\n (undefined? (detect items fn)))\n\n(def any? (items fn)\n (defined? (detect items fn)))\n\n(def reject (items fn)\n (var args [ items fn ])\n (select items (thunk (not (apply fn arguments)))))\n\n(def compact (arr)\n (select arr (#(item)\n (and\n (!= null item)\n (!= false item)\n (defined? item)))))\n\n(def interleave (glue arr)\n (if (list? glue) (inject [] arr\n (#(collector item index)\n (collector.concat [item (get glue index)])))\n\n \n (inject [(first arr)] (rest arr)\n (#(collector item index) (collector.concat [glue item])))))\n\n\n(def flatten (...items)\n (inject [] items\n (#(collector item)\n (collector.concat\n (if (list? item)\n (apply flatten item)\n item)))))\n\n\n(def recurse-map (item fn)\n (if (list? item) (map item (#(subitem) (recurse-map subitem fn)))\n (fn item)))\n\n(def pluck (items attribute)\n (map items (#(item) (get item attribute))))\n\n(def merge-into (into from)\n (each (key) (keys from) (set into key (get from key)))\n into)\n\n(def clone (object)\n (inject {} (keys object)\n (#(collector key)\n (set collector key (get object key))\n collector)))\n\n(def map-values (object fn)\n (inject {} (keys object)\n (#(collector key index)\n (set collector key (fn (get object key) key))\n collector)))\n\n(def merge-with (into from)\n (merge-into (clone into) from))\n","(def log! (...args)\n (send (inspect! ..args ) for-each (#(o) (console.log o))))\n\n(def inspect! (...args)\n (args.map (#(arg) (util.inspect arg { colors false depth 3}))))\n\n(def color (code items depth)\n (concat code (join \"\" items) \"\\033[0m\"))\n\n(def black (...args) (color \"\\033[0;30m\" args))\n(def red (...args) (color \"\\033[0;31m\" args))\n(def green (...args) (color \"\\033[0;32m\" args))\n(def brown (...args) (color \"\\033[0;33m\" args))\n(def blue (...args) (color \"\\033[0;34m\" args))\n(def purple (...args) (color \"\\033[0;35m\" args))\n(def cyan (...args) (color \"\\033[0;36m\" args))\n(def gray (...args) (color \"\\033[0;37m\" args))\n(def bold-gray (...args) (color \"\\033[1;30m\" args))\n(def bold-red (...args) (color \"\\033[1;31m\" args))\n(def bold-green (...args) (color \"\\033[1;32m\" args))\n(def yellow (...args) (color \"\\033[1;33m\" args))\n(def bold-blue (...args) (color \"\\033[1;34m\" args))\n(def bold-purple (...args) (color \"\\033[1;35m\" args))\n(def bold-cyan (...args) (color \"\\033[1;36m\" args))\n(def white (...args) (color \"\\033[1;37m\" args))\n","(include \"./colors.sibilant\")\n\n(def sibilant.pretty-print (node color)\n (when (undefined? color) (assign color true))\n\n (real-newlines (if (node? node) (do\n (var pretty-printer (or (get sibilant.pretty-print node.type)\n sibilant.pretty-print.default))\n (pretty-printer node color))\n (list? node)\n (concat (if color (black \"[\") \"\")\n (join (if color (black \",\") \"\") (map node prettify))\n (if color (black \"]\") \"\"))\n\n color (red (util.inspect node))\n (real-newlines (util.inspect node)))))\n\n\n(def sibilant.pretty-print.default (node color)\n (real-newlines (sibilant.pretty-print.colorize node color\n (concat\n (if (and node.modifiers node.modifiers.length)\n (join \"\" (map node.modifiers (#(n) (sibilant.pretty-print n color)))) \"\")\n node.token\n (if (and node.contents node.contents.length)\n (join \" \" (map node.contents (#(n) (sibilant.pretty-print n color)))) \"\")\n (or (get acceptable-pairs node.token) \"\")))))\n\n(def sibilant.pretty-print.root (node color)\n (join \"\\n\" (map node.contents (#(n) (sibilant.pretty-print n color)))))\n\n(def sibilant.pretty-print.output (node color)\n (concat (if color (black \"{\") \"\")\n (if (list? node.contents)\n (join (if color (black \",\") \"\")\n (map node.contents (#(c) (sibilant.pretty-print.colorize node color (prettify c)))))\n (sibilant.pretty-print.colorize node color node.contents))\n (if color (black \"}\") \"\")))\n\n(def real-newlines (node)\n (chain node (split \"\\\\n\") (join \"\\n\")))\n\n\n(def sibilant.pretty-print.colorize (node color string)\n (if (not color) string\n (= node.hint 'macro) (yellow string)\n (= node.type 'output) (purple string)\n (green string)))\n\n(var prettify sibilant.pretty-print)","(def output-formatter (node)\n (if (list? node) (join \"\" (map node output-formatter))\n (and (node? node) (= node.type 'output))\n (output-formatter node.contents)\n (or (string? node) (number? node)) node\n (not (exists? node)) \"\"\n (node? node) (do\n (console.log \"WE SHOULD NOT BE HERE\")\n (output-formatter (transpile node)))))\n\n(set sibilant 'output-formatter output-formatter)","(var parser {})\n(set sibilant 'parser parser)\n(set parser 'tokens\n { 'regex \"(\\\\/(\\\\\\\\\\\\\\/|[^\\\\/\\\\n])+\\\\/[glim]*)\"\n 'comment \"(;.*)\"\n 'string \"(\\\"(([^\\\"]|(\\\\\\\\\\\"))*[^\\\\\\\\])?\\\")\"\n 'number \"(-?[0-9][0-9.,]*)\"\n 'literal \"(-?[*.$a-zA-Z_][*.a-zA-Z0-9-_]*(\\\\?|!)?)\"\n 'special \"([&'])\"\n 'at \"@\"\n 'tick \"[`']\"\n 'hat \"(\\\\^)\"\n 'dots \"(\\\\.+)\"\n 'arg-placeholder \"(#[0-9]+)\"\n 'other-char \"([#><=!\\\\+\\\\/\\\\*-]+)\"\n 'open-expression \"(\\\\(|\\\\{|\\\\[)\"\n 'close-expression \"(\\\\)|\\\\}|\\\\])\"\n 'newline \"\\\\n\"\n 'whitespace \"\\\\s\"\n 'ignored \".\" })\n\n(set parser 'token-precedence [ 'regex\n 'comment\n 'string\n 'number\n 'dots\n 'tick\n 'hat\n 'at\n 'special\n 'literal\n 'arg-placeholder\n 'other-char\n 'open-expression\n 'close-expression\n 'newline\n 'whitespace\n 'ignored\n ]\n 'ordered-regexes (parser.token-precedence.map\n (#(x)\n (var r (regex (\"^\" (get parser.tokens x))))\n (set r 'name x)\n r)))\n\n(var ordered-regexes parser.ordered-regexes)\n\n(set sibilant 'node-cache (or sibilant.node-cache {}))\n(def node-id (node)\n (incr node-id.last-id))\n(def cache-node (node)\n (var id (node-id node))\n (set sibilant.node-cache id node)\n (merge-into node {node-id id}))\n\n(set node-id 'last-id 0)\n\n(def parser.parse (string context)\n (var context (or context\n { position 0\n stack []\n line 1\n last-newline 0 col 0})\n match true\n regex-name null\n remaining-input string)\n\n (while match\n (detect ordered-regexes\n (#(r)\n (assign match (r.exec remaining-input)\n regex-name r.name)\n match))\n\n (when (exists? match)\n (var match-string (first match)\n length (length match-string))\n \n (context.stack.push\n (cache-node { contents []\n dir sibilant.dir\n file sibilant.file\n token match-string\n type regex-name\n start context.position\n line context.line\n col context.col\n length length }))\n\n (if\n (= 'newline regex-name)\n (do\n (incr context.line)\n (set context\n 'col 0\n 'last-newline context.position))\n\n (and (= 'string regex-name)\n (includes? match-string \"\\n\"))\n (do\n (var string-newline-count (- (length (match-string.split \"\\n\")) 1))\n (incr-by context.line string-newline-count)\n (set context 'col (- length (match-string.last-index-of \"\\n\"))))\n\n (incr-by context.col length))\n\n (incr-by context.position length)\n (assign remaining-input (if remaining-input.length\n (remaining-input.slice length)\n \"\"))))\n context.stack)\n\n(var parse parser.parse)\n","(var restructurers {}\n acceptable-pairs { \"(\" \")\" \"[\" \"]\" \"{\" \"}\" }\n bracket-types { \"(\" 'expression\n \"[\" 'bracket\n \"{\" 'brace })\n\n(def restructure (input)\n (var output { type 'root\n contents []\n file sibilant.file\n col 0\n line 1 }\n context { parse-stack [output]\n output output\n input input\n specials 0 })\n\n (inject context input\n (#(context token index)\n (var restructurer (or (get restructurers token.type) restructurers.default))\n (restructurer token context index)))\n output)\n\n(set sibilant 'restructure restructure)\n\n(def restructurers.open-expression (token context)\n (var first (first context.parse-stack))\n (set token\n 'contents []\n 'type (get bracket-types token.token)\n 'parent first)\n (accept-specials token context)\n (send first.contents push token)\n (context.parse-stack.unshift token)\n context)\n\n\n(def restructurers.close-expression (node context index)\n (var first (first context.parse-stack))\n\n (when (!= (get acceptable-pairs first.token) node.token)\n (throw (\"trying to close \" (yellow (sibilant.pretty-print first))\n \"\\n on \"first.file\":\"first.line\":\"first.col\n \"\\n with \"(sibilant.pretty-print node)\n \"\\n on \"node.file\":\"node.line\":\"node.col\n \"\\n\")))\n\n (set first 'end node.end)\n (context.parse-stack.shift)\n (close-specials first context)\n (when (zero? context.parse-stack.length)\n (throw (\"unbalanced parens:\\n\"\n (call inspect parse-stack))))\n context)\n\n(def open-special (node context)\n (incr context.specials)\n\n (var first (first context.parse-stack))\n (set node\n 'contents []\n 'parent first)\n\n (first.contents.push node)\n (context.parse-stack.unshift node)\n context)\n\n(def accept-specials (node context)\n (set node 'specials (get context 'specials))\n (set context 'specials 0)\n context)\n\n(def close-specials (node context)\n (when (> node.specials 0)\n (decr node.specials)\n (context.parse-stack.shift)\n (close-specials node context))\n context)\n\n(def restructurers.hat (node context index) (open-special node context))\n(def restructurers.dots (node context index) (open-special node context))\n(def restructurers.tick (node context index) (open-special node context))\n(def restructurers.at (node context index) (open-special node context))\n\n(def restructurers.whitespace (token context index) context)\n(def restructurers.newline (token context index) context)\n(def restructurers.ignored (token context index) context)\n\n(def restructurers.default (token context index)\n (accept-specials token context)\n (send (get (first context.parse-stack) 'contents) push token)\n (close-specials token context))\n","(var macros {})\n(set sibilant 'macros macros 'debug false)\n\n\n(def recurse-indent (...args)\n (map args\n (#(arg)\n (if (node? arg) (do (set arg 'contents (apply recurse-indent (compact (flatten arg.contents)))) arg)\n (list? arg) (apply recurse-indent arg)\n (number? arg) (arg.to-string)\n (string? arg)\n (chain arg\n (replace (regex \"\\\\n\" 'g) \"\\n \")\n (replace (regex \"\\\\n\\\\s+\\\\n\" 'g) \"\\n\\n\"))\n\n arg))))\n\n(def indent (...args)\n [\"\\n \" (recurse-indent args) \"\\n\"])\n\n\n(def escape-regex (string)\n (string.replace (regex \"[\\\\-\\\\[\\\\]\\\\/\\\\{\\\\}\\\\(\\\\)\\\\*\\\\+\\\\?\\\\.\\\\\\\\\\^\\\\$\\\\|]\" 'g) \"\\\\$&\"))\n\n(def ^return (token)\n (when sibilant.debug (console.log \"returning \" (prettify token)))\n (var default-return (as-statement [\"return \" (transpile token)]))\n (if (and token token.contents token.contents.length)\n (switch (get (first token.contents) 'token)\n (('return 'throw 'do) (transpile token))\n ('delete\n (var delete-macro (get macros 'delete))\n (if (< token.contents.length 3) default-return\n [ (as-statement (apply delete-macro (token.contents.slice 1 -1)))\n \"\\nreturn \"\n (as-statement (call delete-macro (last token.contents)))]))\n ('assign\n (if (< token.contents.length 4) default-return\n [ (apply ^assign\n (token.contents.slice 1 (- token.contents.length 2)))\n \"\\nreturn \"\n (apply ^assign (token.contents.slice -2))]))\n ('var\n [ (transpile token) \"\\nreturn \" (transpile (if (even? token.contents.length)\n (last token.contents)\n (first (token.contents.slice -2))))])\n ('set\n (if (< token.contents.length 5) default-return\n (do\n (var obj (second token.contents)\n non-return-part (token.contents.slice 2 (- token.contents.length 2))\n return-part (token.contents.slice -2))\n (non-return-part.unshift obj)\n (return-part.unshift obj)\n [ (^set ...non-return-part)\n \"\\nreturn \"\n (^set ...return-part)])))\n (default default-return))\n default-return))\n\n\n(def statement? (transpiled)\n (if (node? transpiled) (statement? transpiled.contents)\n (list? transpiled) (statement? (last transpiled))\n (string? transpiled) (= \";\" (last transpiled))\n false))\n\n(def as-statement (node)\n (var transpiled (transpile node))\n\n (if (empty-node? transpiled) undefined\n (statement? transpiled) transpiled\n [ transpiled \";\" ]))\n\n(def ^do (...body)\n (if (= 1 body.length) (^return (first body))\n body.length [ (interleave \"\\n\" (map (body.slice 0 -1) (#(node) (as-statement node))))\n \"\\n\"\n (^return (last body)) ]\n \"\"))\n\n(def ^empty-list () 'null)\n\n(def ^def (fn-name args ...body)\n (var fn-name-tr (transpile fn-name) this-node this)\n\n (as-statement [ (if (match? (regex \"\\\\.\") (output-formatter fn-name-tr)) \"\" \"var \")\n fn-name-tr \" = \"\n (^lambda { name fn-name args args node this-node } ...body )\n ] ))\n\n(def ^macro (name args ...body)\n (var name-tr (output-formatter (transpile name))\n options { name name args args node this}\n js (output-formatter (^lambda options ...body)))\n\n (when sibilant.debug (console.log js))\n \n (try (set macros name-tr (eval js))\n (error (\"error in parsing macro \"\n (sibilant.pretty-print name) \":\\n\" js)))\n\n undefined)\n\n(def ^meta (...body)\n (var js (output-formatter (^scoped ...body)))\n (when sibilant.debug (console.log js))\n (output-formatter (eval js)))\n\n\n(def ^concat (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n\n(def ^reverse (arr)\n (var reversed [])\n (each (item) arr (reversed.unshift item))\n reversed)\n\n(var reverse ^reverse)\n\n(def ^lambda (args-or-options ...body)\n (when sibilant.debug\n (console.log args-or-options))\n (var args (or (get args-or-options 'args) args-or-options)\n body (or (get args-or-options 'body) body)\n args (if (node? args 'expression) args.contents\n (and (node? args) (empty? body)) (do (assign body [ args ]) [])\n args)\n name (when args-or-options.name\n (chain (output-formatter (transpile args-or-options.name))\n (replace (regex \"\\\\W+\" 'g) \"$\")\n (concat \"$\")))\n rest (detect args\n (#(arg) (node? arg 'dots))))\n\n (var this-node this\n node (detect\n [ args-or-options.node this-node args-or-options.name args (first body) ]\n (#(n) (and (node? n) (get n 'file)))))\n [\"(function\" (if name (\" \" name) \"\") \"(\"\n (interleave \", \" (map args transpile)) \") {\"\n (if (or args-or-options.name node)\n (indent [\"/*\"\n (if args-or-options.name (\" \" (sibilant.pretty-print args-or-options.name false)) \"\")\n (if node (\" \" node.file \":\" node.line \":\" node.col) \"\")\n \" */\"]) \"\")\n (when (exists? rest)\n (indent (as-statement [\"var \" (transpile rest)\n \" = Array.prototype.slice.call(arguments, \"\n (- args.length 1) \")\"])))\n\n (indent (apply ^do body))\n \"})\"])\n\n(set macros \"#\" ^lambda)\n\n(def ^quoted-hash (...pairs)\n (var cached-quote-value ^hash.quote-keys)\n (set ^hash 'quote-keys true)\n (var value (^hash ...pairs))\n (set ^hash 'quote-keys cached-quote-value)\n value)\n\n(def ^hash (...pairs)\n (when (odd? pairs.length)\n (error (\"odd number of key-value pairs in hash: \"\n (call inspect pairs))))\n\n (var quote-keys ^hash.quote-keys\n pair-strings (bulk-map pairs (#(key value)\n [ (if (and quote-keys (not (node? key 'string)))\n [\"\\\"\" (transpile key) \"\\\"\"]\n (transpile key))\n \": \"\n (transpile value)])))\n (if (>= 1 pair-strings.length)\n [\"{ \" (interleave \", \" pair-strings) \" }\"]\n [\"{\" (indent (interleave \",\\n\" pair-strings)) \"}\"]))\n\n\n(def qescape (content)\n (if (not (exists? content)) \"\"\n (string? content) (chain content\n (replace (regex \"\\\"\" 'g) \"\\\\\\\"\")\n (replace (regex \"\\\\n\" 'g) \"\\\\n\\\" +\\n\\\"\"))\n content))\n\n(def log-pretty (label arg)\n (console.log (concat label \": \" (prettify arg)))\n arg)\n\n(var pretty-log log-pretty)\n\n(def ^quote (content)\n (if (string? content) (\"\\\"\" (qescape content) \"\\\"\")\n (number? content) (^quote (content.to-string))\n (node? content 'literal) [\"\\\"\" (transpile content) \"\\\"\"]\n (node? content 'expression)\n (if (length (keys (find-unquotes content)))\n (^call 'macros.expand-quote.call 'this (^quote content.node-id)\n (apply ^quoted-hash (alternating-keys-and-values (find-unquotes content))))\n [\"\\\"\" (map-node (transpile content) qescape) \"\\\"\"])\n\n (node? content 'bracket)\n (if (length (keys (find-unquotes content)))\n (^call 'macros.expand-quote.call 'this (^quote content.node-id)\n (apply ^quoted-hash (alternating-keys-and-values (find-unquotes content))))\n (^list ...(map content.contents ^quote)))\n\n (node? content 'brace)\n (if (length (keys (find-unquotes content)))\n (^call 'macros.expand-quote.call 'this (^quote content.node-id)\n (apply ^quoted-hash (alternating-keys-and-values (find-unquotes content))))\n (^hash ...(map content.contents ^quote)))\n\n (do\n (console.log (\"unknown content\" (prettify content)))\n content)))\n\n(def ^debug (val)\n (set sibilant 'debug (eval (output-formatter (transpile val)))) null)\n\n(def map-node (node fn)\n (if (node? node)\n (do\n (var mapped-node (fn node))\n (when (node? mapped-node)\n (set mapped-node 'contents (map-node mapped-node.contents fn)))\n\n mapped-node)\n\n (list? node) (map node (#(c) (map-node c fn)))\n (fn node)))\n\n(def each-node (node fn)\n (if (node? node) (when (fn node) (each-node node.contents fn))\n (list? node) (each (c) node (each-node c fn))\n (fn node)))\n\n\n(def map-node-for-quote-expansion (node expansions)\n (if (node? node)\n (do\n (var mapped-node (if (expansions.has-own-property node.node-id) (get expansions node.node-id) (clone node)))\n (when (node? mapped-node)\n (set mapped-node 'contents (map-node-for-quote-expansion mapped-node.contents expansions)))\n\n (assign mapped-node (splice-dots mapped-node))\n mapped-node)\n\n (list? node)\n (map node (#(c) (map-node-for-quote-expansion c expansions)))\n\n node))\n\n\n(def ^expand-quote (node-id expansions)\n (var expanded-nodes\n (map-node-for-quote-expansion (get sibilant.node-cache node-id) expansions))\n\n (transpile expanded-nodes))\n\n(def unquote? (node) (node? node 'at))\n\n(def find-unquotes (node)\n (var unquotes {})\n (each-node node (#(n)\n (when (unquote? n)\n (set unquotes n.node-id (transpile n)))\n (not (node? n 'tick))))\n unquotes)\n\n(def splice-dots (node)\n (when (and node (list? node.contents))\n (var contents [])\n (each (content) node.contents\n (if (and (node? content 'dots)\n (list? content.contents)\n (= content.contents.length 1)\n (list? (first content.contents)))\n (contents.push.apply contents (first content.contents))\n (contents.push content)))\n\n (set node 'contents contents))\n node)\n\n\n(def alternating-keys-and-values (hash)\n (flatten (map (keys hash)\n (#(key) [key, (get hash key)]))))\n\n\n(def ^list (...args)\n (var arg-segments [])\n (if (empty? args) \"[]\"\n (do\n (def simple-list (args)\n [\"[ \" (interleave \", \" (map args (#(arg) arg.transpiled))) \" ]\"])\n\n (args.for-each (#(arg)\n (if (node? arg 'dots) (arg-segments.push {transpiled (transpile arg)})\n (list? (last arg-segments)) (send (last arg-segments) push {transpiled (transpile arg)})\n (arg-segments.push [{transpiled (transpile arg)}]))))\n\n (assign arg-segments (map arg-segments\n (#(segment)\n (if (list? segment)\n (simple-list segment)\n segment.transpiled))))\n\n (if (= 1 (length arg-segments))\n (first arg-segments)\n [(first arg-segments) \".concat(\" (interleave \", \" (rest arg-segments))\")\"]))))\n\n\n(def ^call (fn-name ...args)\n (if (any? args (#(arg) (node? arg 'dots)))\n (macros.apply fn-name (macros.list ...args))\n [ (transpile fn-name)\n \"(\" (interleave \", \" (map args transpile)) \")\" ]))\n\n(def ^dots (...contents)\n (transpile contents))\n\n",";; (def flatten-output (nodes)\n;; (inject [] nodes\n;; (#(collector item)\n;; (if (list? item) (apply flatten-output item)\n;; (if \n \n\n(def node? (thing type)\n (and\n (exists? thing)\n (= 'object (typeof thing))\n (string? thing.type)\n (or (undefined? type) (= thing.type type))\n (thing.has-own-property 'contents)))\n\n(def empty-node? (item)\n (if (node? item) (empty-node? item.contents)\n (list? item) (all? item empty-node?)\n (string? item) (item.match (regex \"^\\\\s*$\"))\n (or (= null item)\n (undefined? item)\n (= false item))))\n\n(def compact-node (item)\n (if (node? item) (do\n (set item 'contents (compact-node item.contents))\n (if (and item.contents item.contents.length) item null))\n (list? item) (do\n (var compacted (compact (map item compact-node)))\n (if (and compacted compacted.length) compacted null))\n (if (or (= item \"\") (= item false)) null item)))\n\n(def recurse-transpile (node)\n (if (list? node) (map node recurse-transpile)\n (and (node? node) (!= 'output node.type)) (transpile node)\n (and (node? node) (= 'output node.type)) (do\n (set node 'contents (recurse-transpile node.contents))\n node)\n node))\n\n(def transpile (node preprocessor)\n (if\n (string? node)\n (assign node { type 'js token node contents []})\n\n (number? node)\n (assign node { type 'number token (node.to-string) contents []}))\n \n (if (list? node) node\n (exists? node) (do\n (var transpiler (or (get transpile node.type) transpile.default))\n (var result (transpiler node))\n (var result-node (recurse-transpile (if (node? result) result\n { contents result type 'output })))\n (set result-node\n 'contents (compact (flatten result-node.contents))\n 'source node)\n\n (when sibilant.debug\n (console.log (prettify node)\n (red \"->\")\n (prettify result-node)))\n\n (set node 'transpiled result-node)\n\n \n (if (empty-node? result-node) undefined\n result-node))))\n\n\n(set sibilant 'transpile transpile)\n\n(var reader-macros {})\n\n(def transpile.hat (node)\n (var output (transpile (first node.contents)))\n (set output 'contents [(\"macros.\" (first output.contents))])\n output)\n\n(def transpile.tick (node)\n (^quote.apply node node.contents))\n\n(def transpile.at (node)\n (transpile (first node.contents)))\n\n(def transpile.dots (node)\n (^dots.apply node node.contents))\n\n\n(def transpile.default (node)\n node.token)\n\n(def transpile.output (node)\n node)\n\n(def transpile.number (node)\n (send (parse-float (node.token.replace (regex \",\" 'g) \"\")) to-string))\n\n(def transpile.root (node)\n (if (= 1 node.contents.length)\n (transpile (first node.contents))\n (interleave \"\\n\" (compact (map node.contents as-statement)))))\n\n(def transpile.expression (node preprocessor)\n (if node.contents.length\n (do\n (var head (first node.contents)\n args (rest node.contents)\n macro (get macros (output-formatter (transpile head))))\n\n (when (exists? macro) (set head 'hint 'macro))\n\n (when (and head (= 'string head.type))\n (assign macro macros.concat args node.contents))\n\n (when (undefined? macro)\n (assign macro macros.call args node.contents))\n\n (macro.apply node args))\n\n \"null\"))\n\n(def transpile.bracket (node)\n (apply macros.list node.contents))\n\n(def transpile.brace (node) (apply macros.hash node.contents))\n\n(def transpile.literal (node)\n (var string node.token)\n (inject (chain string\n (replace (regex \"\\\\*\" 'g) \"_\")\n (replace (regex \"\\\\?$\") \"__QUERY\")\n (replace (regex \"!$\") \"__BANG\"))\n (string.match (regex \"-(.)\" 'g))\n (#(return-string match)\n (return-string.replace match\n (send (second match) to-upper-case)))))\n\n(def transpile.string (node)\n (chain node.token (split \"\\n\")\n (join \"\\\\n\\\" +\\n\\\"\")))\n\n(def transpile.comment (node) null)\n\n","(def sibilize (input)\n (sibilant.initialize)\n (output-formatter (transpile (restructure (parse input)))))\n\n(def sourcemap (input)\n (sibilant.initialize)\n (sourcemapper (transpile (restructure (parse input)))))\n\n(set sibilant 'sibilize sibilize)\n\n(def sibilant.version ()\n (get (sibilant.package-info) 'version))\n\n(def sibilant.strip-shebang (data)\n (data.replace (regex \"^#!.*\\\\n\") \"\\n\"))\n\n(set sibilant 'file 'eval.sibilant)\n\n(def with-dir-and-file (dir file fn)\n (var before { dir sibilant.dir\n file sibilant.file })\n (set sibilant\n 'dir dir\n 'file file)\n\n (var retval (fn))\n\n (set sibilant\n 'dir before.dir\n 'file before.file)\n\n retval)\n\n(set sibilant 'source-cache {})\n\n(def sibilant.sibilize-file (file-name)\n (output-formatter (sibilant.transpile-file file-name)))\n\n(def sibilant.sibilize-json (file-name)\n (sibilant.initialize)\n (var before sibilant.macros.hash.quote-keys)\n (set sibilant.macros.hash 'quote-keys true)\n (var content (sibilant.sibilize-file file-name))\n (set sibilant.macros.hash 'quote-keys before)\n content)\n\n(def sibilant.macros.include (file)\n (sibilant.include (eval (output-formatter (transpile file)))))\n\n"]} \ No newline at end of file diff --git a/lib/cli.js b/lib/cli.js index 3c32fa4..fbba511 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -1,10 +1,13 @@ +require("source-map-support").install(); +//# sourceMappingURL=./cli.map +; var sibilant = require("../lib/sibilant.js"), path = require("path"), options = require("../lib/options.js"), fs = require("fs"), mod = require("module"); var runInSandbox = (function runInSandbox$(js, inputPath) { - /* run-in-sandbox /Users/jbr/code/sibilant/src/cli.sibilant:7:0 */ + /* run-in-sandbox /Users/jbr/code/sibilant/src/cli.sibilant:10:0 */ (function() { if ((typeof inputPath === "undefined")) { @@ -31,44 +34,44 @@ var cli = { unlabeled: "file" }; cli.version = (function cli$version$() { - /* cli.version /Users/jbr/code/sibilant/src/cli.sibilant:33:0 */ + /* cli.version /Users/jbr/code/sibilant/src/cli.sibilant:36:0 */ return console.log(sibilant.versionString()); }); cli.repl = (function cli$repl$(args) { - /* cli.repl /Users/jbr/code/sibilant/src/cli.sibilant:36:0 */ + /* cli.repl /Users/jbr/code/sibilant/src/cli.sibilant:39:0 */ return require("../lib/repl"); }); var readStdin = (function readStdin$(fn) { - /* read-stdin /Users/jbr/code/sibilant/src/cli.sibilant:38:0 */ + /* read-stdin /Users/jbr/code/sibilant/src/cli.sibilant:41:0 */ var stdin = process.stdin, data = ""; stdin.resume(); stdin.setEncoding("utf8"); stdin.on("data", (function(chunk) { - /* /Users/jbr/code/sibilant/src/cli.sibilant:43:21 */ + /* /Users/jbr/code/sibilant/src/cli.sibilant:46:21 */ return data = (data + chunk); })); return stdin.on("end", (function() { - /* /Users/jbr/code/sibilant/src/cli.sibilant:44:20 */ + /* /Users/jbr/code/sibilant/src/cli.sibilant:47:20 */ return fn(data); })); }); cli.eval = (function cli$eval$(args, options) { - /* cli.eval /Users/jbr/code/sibilant/src/cli.sibilant:46:0 */ + /* cli.eval /Users/jbr/code/sibilant/src/cli.sibilant:49:0 */ (options)["execute"] = true; return cli.input(args, options); }); cli.input = (function cli$input$(args, options) { - /* cli.input /Users/jbr/code/sibilant/src/cli.sibilant:50:0 */ + /* cli.input /Users/jbr/code/sibilant/src/cli.sibilant:53:0 */ var process = (function process$(sibilantCode) { - /* process /Users/jbr/code/sibilant/src/cli.sibilant:51:5 */ + /* process /Users/jbr/code/sibilant/src/cli.sibilant:54:5 */ var jsCode = sibilant.sibilize(sibilantCode); return (function() { @@ -88,10 +91,10 @@ cli.input = (function cli$input$(args, options) { })(); }); cli.help = (function cli$help$(args, options) { - /* cli.help /Users/jbr/code/sibilant/src/cli.sibilant:60:0 */ + /* cli.help /Users/jbr/code/sibilant/src/cli.sibilant:63:0 */ return fs.readFile((__dirname + "/../cli-help"), { encoding: "utf8" }, (function(err, data) { - /* /Users/jbr/code/sibilant/src/cli.sibilant:62:19 */ + /* /Users/jbr/code/sibilant/src/cli.sibilant:65:19 */ (function() { if (err) { @@ -112,7 +115,7 @@ args.unshift((process.argv)[1], "FILENAME"); } })(); (cliOptions.file || []).forEach((function(inputFile) { - /* /Users/jbr/code/sibilant/src/cli.sibilant:75:0 */ + /* /Users/jbr/code/sibilant/src/cli.sibilant:78:0 */ var inputPath = path.join(process.cwd(), inputFile), inputExtname = path.extname(inputPath), diff --git a/lib/cli.map b/lib/cli.map index b1a5af0..dc24e20 100644 --- a/lib/cli.map +++ b/lib/cli.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/cli.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(var sibilant (require \"../lib/sibilant.js\")\n path (require 'path)\n options (require \"../lib/options.js\")\n fs (require 'fs)\n mod (require 'module))\n\n(def run-in-sandbox (js input-path)\n (when (undefined? input-path)\n (assign input-path \".\"))\n (set require.main\n 'module-cache {}\n 'filename (fs.realpath-sync input-path)\n 'paths (mod.*node-module-paths\n (path.dirname\n (fs.realpath-sync input-path))))\n (require.main.*compile js require.main.filename))\n\n\n(var cli {\n v 'version\n h 'help\n unhandled 'help\n f 'file\n o 'output\n x 'execute\n e 'eval\n i 'input\n m 'sourcemap\n after-break false\n execute false\n unlabeled 'file})\n\n(def cli.version ()\n (console.log (sibilant.version-string)))\n\n(def cli.repl (args) (require \"../lib/repl\"))\n\n(def read-stdin (fn)\n (var stdin process.stdin\n data \"\")\n (stdin.resume)\n (stdin.set-encoding \"utf8\")\n (stdin.on 'data (#(chunk) (assign data (concat data chunk))))\n (stdin.on 'end (#> (fn data))))\n\n(def cli.eval (args options)\n (set options 'execute true)\n (cli.input args options))\n\n(def cli.input (args options)\n (def process (sibilant-code)\n (var js-code (sibilant.sibilize sibilant-code))\n (if options.execute\n (run-in-sandbox js-code)\n (console.log js-code)))\n (if (empty? args)\n (read-stdin process)\n (process (first args))))\n\n(def cli.help (args options)\n (fs.read-file (concat **dirname \"/../cli-help\") { encoding 'utf8 }\n (#(err data)\n (when err (throw err))\n (console.log data))))\n\n(var cli-options (options cli)\n args (or cli-options.after-break []))\n\n(args.unshift (second process.argv) \"FILENAME\")\n\n(set process 'argv args 'ARGV args)\n\n(when (empty? (keys cli-options)) (cli.repl))\n\n(each (input-file) (or cli-options.file [])\n (var input-path (path.join (process.cwd) input-file)\n input-extname (path.extname input-path)\n input-basename (path.basename input-path input-extname)\n translated (if (= \".son\" input-extname)\n (sibilant.sibilize-json input-path)\n (sibilant.sibilize-file input-path))\n output-dir (when cli-options.output\n (or (first cli-options.output)\n (path.dirname input-path)))\n map-dir (when cli-options.sourcemap \n (or (first cli-options.sourcemap)\n output-dir))\n output-extname (if (= \".son\" input-extname) \".json\" \".js\"))\n\n (if output-dir (do\n (var output-path (concat (path.join output-dir input-basename)\n output-extname))\n\n (fs.write-file output-path translated)\n (when map-dir\n (var map-path (concat (path.join map-dir input-basename) \".map\"))\n ;; yes, it's dumb that this reads the file twice\n (fs.write-file map-path (sibilant.sourcemap-file input-path))))\n \n cli-options.execute (run-in-sandbox translated input-path)\n\n (console.log translated)))","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/cli.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(send (require \"source-map-support\") install)\n(meta \"//# sourceMappingURL=./cli.map\\n\")\n\n(var sibilant (require \"../lib/sibilant.js\")\n path (require 'path)\n options (require \"../lib/options.js\")\n fs (require 'fs)\n mod (require 'module))\n\n(def run-in-sandbox (js input-path)\n (when (undefined? input-path)\n (assign input-path \".\"))\n (set require.main\n 'module-cache {}\n 'filename (fs.realpath-sync input-path)\n 'paths (mod.*node-module-paths\n (path.dirname\n (fs.realpath-sync input-path))))\n (require.main.*compile js require.main.filename))\n\n\n(var cli {\n v 'version\n h 'help\n unhandled 'help\n f 'file\n o 'output\n x 'execute\n e 'eval\n i 'input\n m 'sourcemap\n after-break false\n execute false\n unlabeled 'file})\n\n(def cli.version ()\n (console.log (sibilant.version-string)))\n\n(def cli.repl (args) (require \"../lib/repl\"))\n\n(def read-stdin (fn)\n (var stdin process.stdin\n data \"\")\n (stdin.resume)\n (stdin.set-encoding \"utf8\")\n (stdin.on 'data (#(chunk) (assign data (concat data chunk))))\n (stdin.on 'end (#> (fn data))))\n\n(def cli.eval (args options)\n (set options 'execute true)\n (cli.input args options))\n\n(def cli.input (args options)\n (def process (sibilant-code)\n (var js-code (sibilant.sibilize sibilant-code))\n (if options.execute\n (run-in-sandbox js-code)\n (console.log js-code)))\n (if (empty? args)\n (read-stdin process)\n (process (first args))))\n\n(def cli.help (args options)\n (fs.read-file (concat **dirname \"/../cli-help\") { encoding 'utf8 }\n (#(err data)\n (when err (throw err))\n (console.log data))))\n\n(var cli-options (options cli)\n args (or cli-options.after-break []))\n\n(args.unshift (second process.argv) \"FILENAME\")\n\n(set process 'argv args 'ARGV args)\n\n(when (empty? (keys cli-options)) (cli.repl))\n\n(each (input-file) (or cli-options.file [])\n (var input-path (path.join (process.cwd) input-file)\n input-extname (path.extname input-path)\n input-basename (path.basename input-path input-extname)\n translated (if (= \".son\" input-extname)\n (sibilant.sibilize-json input-path)\n (sibilant.sibilize-file input-path))\n output-dir (when cli-options.output\n (or (first cli-options.output)\n (path.dirname input-path)))\n map-dir (when cli-options.sourcemap \n (or (first cli-options.sourcemap)\n output-dir))\n output-extname (if (= \".son\" input-extname) \".json\" \".js\"))\n\n (if output-dir (do\n (var output-path (concat (path.join output-dir input-basename)\n output-extname))\n\n (fs.write-file output-path translated)\n (when map-dir\n (var map-path (concat (path.join map-dir input-basename) \".map\"))\n ;; yes, it's dumb that this reads the file twice\n (fs.write-file map-path (sibilant.sourcemap-file input-path))))\n \n cli-options.execute (run-in-sandbox translated input-path)\n\n (console.log translated)))","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file diff --git a/lib/colors.map b/lib/colors.map index a48f351..e6eea0b 100644 --- a/lib/colors.map +++ b/lib/colors.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/colors.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(def log! (...args)\n (send (inspect! ..args ) for-each (#(o) (console.log o))))\n\n(def inspect! (...args)\n (args.map (#(arg) (util.inspect arg { colors false depth 3}))))\n\n(def color (code items depth)\n (concat code (join \"\" items) \"\\033[0m\"))\n\n(def black (...args) (color \"\\033[0;30m\" args))\n(def red (...args) (color \"\\033[0;31m\" args))\n(def green (...args) (color \"\\033[0;32m\" args))\n(def brown (...args) (color \"\\033[0;33m\" args))\n(def blue (...args) (color \"\\033[0;34m\" args))\n(def purple (...args) (color \"\\033[0;35m\" args))\n(def cyan (...args) (color \"\\033[0;36m\" args))\n(def gray (...args) (color \"\\033[0;37m\" args))\n(def bold-gray (...args) (color \"\\033[1;30m\" args))\n(def bold-red (...args) (color \"\\033[1;31m\" args))\n(def bold-green (...args) (color \"\\033[1;32m\" args))\n(def yellow (...args) (color \"\\033[1;33m\" args))\n(def bold-blue (...args) (color \"\\033[1;34m\" args))\n(def bold-purple (...args) (color \"\\033[1;35m\" args))\n(def bold-cyan (...args) (color \"\\033[1;36m\" args))\n(def white (...args) (color \"\\033[1;37m\" args))\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/colors.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(def log! (...args)\n (send (inspect! ..args ) for-each (#(o) (console.log o))))\n\n(def inspect! (...args)\n (args.map (#(arg) (util.inspect arg { colors false depth 3}))))\n\n(def color (code items depth)\n (concat code (join \"\" items) \"\\033[0m\"))\n\n(def black (...args) (color \"\\033[0;30m\" args))\n(def red (...args) (color \"\\033[0;31m\" args))\n(def green (...args) (color \"\\033[0;32m\" args))\n(def brown (...args) (color \"\\033[0;33m\" args))\n(def blue (...args) (color \"\\033[0;34m\" args))\n(def purple (...args) (color \"\\033[0;35m\" args))\n(def cyan (...args) (color \"\\033[0;36m\" args))\n(def gray (...args) (color \"\\033[0;37m\" args))\n(def bold-gray (...args) (color \"\\033[1;30m\" args))\n(def bold-red (...args) (color \"\\033[1;31m\" args))\n(def bold-green (...args) (color \"\\033[1;32m\" args))\n(def yellow (...args) (color \"\\033[1;33m\" args))\n(def bold-blue (...args) (color \"\\033[1;34m\" args))\n(def bold-purple (...args) (color \"\\033[1;35m\" args))\n(def bold-cyan (...args) (color \"\\033[1;36m\" args))\n(def white (...args) (color \"\\033[1;37m\" args))\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file diff --git a/lib/core.map b/lib/core.map index 2bf0f36..e01a18f 100644 --- a/lib/core.map +++ b/lib/core.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/core.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(set sibilant 'tokens\n { 'regex \"(\\\\/(\\\\\\\\\\\\\\/|[^\\\\/\\\\n])+\\\\/[glim]*)\"\n 'comment \"(;.*)\"\n 'string \"(\\\"(([^\\\"]|(\\\\\\\\\\\"))*[^\\\\\\\\])?\\\")\"\n 'number \"(-?[0-9][0-9.,]*)\"\n 'literal \"(-?[*.$a-zA-Z^_][*.a-zA-Z0-9-_]*(\\\\?|!)?)\"\n 'special \"([&']?)\"\n 'dots \"(\\\\.+)\"\n 'other-char \"([#><=!\\\\+\\\\/\\\\*-]+)\"\n 'open-paren \"(\\\\()\"\n 'special-open-paren \"('?\\\\()\"\n 'close-paren \"(\\\\))\"\n 'alternative-parens \"\\\\{|\\\\[|\\\\}|\\\\]\" })\n\n(set sibilant.tokens 'special-literal\n (concat sibilant.tokens.special sibilant.tokens.literal))\n\n(set sibilant 'token-precedence\n '( regex comment string number dots special-literal other-char\n special-open-paren close-paren alternative-parens))\n\n(set sibilant\n 'ordered-regexes (map sibilant.token-precedence (#(x) (get sibilant.tokens x)))\n 'master-regex (regex (join \"|\" sibilant.ordered-regexes) 'g))\n\n(def tokenize (string)\n (var tokens []\n parse-stack [tokens]\n specials [])\n\n (def accept-token (token)\n (send (get parse-stack 0) push token))\n\n (def increase-nesting ()\n (var new-arr [])\n (accept-token new-arr)\n (parse-stack.unshift new-arr))\n\n (def decrease-nesting ()\n (specials.shift)\n (parse-stack.shift)\n (when (zero? parse-stack.length)\n (throw (\"unbalanced parens:\\n\"\n (call inspect parse-stack)))))\n\n (def handle-token (token)\n (var special (first token)\n token token)\n\n (switch special\n (\"'\"\n (assign token (token.slice 1))\n (increase-nesting)\n (accept-token 'quote))\n (\"^\" (assign token (\"macros.\"(token.slice 1)) special false))\n (default (assign special false)))\n\n (specials.unshift (as-boolean special))\n\n (switch token\n (\"(\" (increase-nesting))\n ((\"]\" \"}\" \")\") (decrease-nesting))\n\n (\"{\" (increase-nesting) (accept-token 'hash))\n (\"[\" (increase-nesting) (accept-token 'list))\n\n (default\n (if (token.match (regex (\"^\" sibilant.tokens.number \"$\")))\n (accept-token (parse-float (token.replace (regex \",\" 'g) \"\")))\n (accept-token token))))\n\n (when (and (!= token \"(\")\n (specials.shift))\n (decrease-nesting)))\n\n\n (chain string\n (match sibilant.master-regex)\n (for-each handle-token))\n\n (when (> parse-stack.length 1)\n (error \"unexpected EOF, probably missing a )\\n\"\n (call inspect (first parse-stack))))\n tokens)\n\n(set sibilant 'tokenize tokenize)\n\n(def indent (...args)\n (concat\n (chain (compact args)\n (join \"\\n\")\n (replace (regex \"^\") \"\\n\")\n (replace (regex \"\\\\n\" 'g) \"\\n \"))\n \"\\n\"))\n\n(def construct-hash (array-of-arrays)\n (inject {} array-of-arrays\n (#(object item)\n (set object (first item) (get object (second item)))\n object)))\n\n(var macros {})\n(set sibilant 'macros macros)\n\n(set macros 'return\n (#(token)\n (var default-return (\"return \" (translate token)))\n\n (if (list? token)\n (switch (first token)\n ('(return throw do) (translate token))\n ('delete\n (var delete-macro (get macros 'delete))\n (if (< token.length 3) default-return\n (concat (apply delete-macro (token.slice 1 -1))\n \"\\nreturn \"\n (call delete-macro (last token)))))\n ('(setf assign)\n (if (< token.length 4) default-return\n (concat (apply ^setf\n (token.slice 1 (- token.length 2)))\n \"\\nreturn \"\n (apply ^setf (token.slice -2)))))\n ('set\n (if (< token.length 5) default-return\n (do\n (var obj (second token)\n non-return-part (token.slice 2 (- token.length 2))\n return-part (token.slice -2))\n (non-return-part.unshift obj)\n (return-part.unshift obj)\n (concat (^set ...non-return-part)\n \"\\nreturn \"\n (^set ...return-part)))))\n (default default-return))\n default-return)))\n\n(def as-statement (string)\n (chain string (to-string) (replace (regex \";*\\\\s*$\") \";\")))\n\n(def ^statement (...args)\n (concat (^call ...args) \";\\n\"))\n\n(def ^do (...body)\n (var last-index (Math.max 0 (- body.length 1)))\n\n (set body last-index ['return (get body last-index)])\n\n (join \"\\n\"\n (map body (#(arg) (concat (as-statement (translate arg)))))))\n\n(def ^empty-list () 'null)\n\n(def ^call (fn-name ...args)\n (concat (translate fn-name)\n \"(\" (join \", \" (map args translate)) \")\"))\n\n(def ^def (fn-name ...args-and-body)\n (var fn-name-tr (translate fn-name)\n start (if (match? (regex \"\\\\.\") fn-name-tr) \"\" \"var \"))\n (concat start fn-name-tr \" = \"\n (^lambda ...args-and-body)\n \";\\n\"))\n\n(def ^macro (name ...args-and-body)\n (var js (^lambda ...args-and-body)\n name (translate name))\n (try (set macros name (eval js))\n (error (\"error in parsing macro \"\n name \":\\n\" (indent js))))\n undefined)\n\n(def ^concat (...args)\n (\"(\" (join \" + \" (map args translate)) \")\"))\n\n(def transform-args (arglist)\n (var last null\n args [])\n\n (each (arg) arglist\n (if (or (= \"&rest\" arg) (= \"...\" arg))\n (assign last arg)\n (do\n (args.push [last arg])\n (assign last null))))\n\n (when last (error (\"unexpected argument modifier: \" last)))\n\n args)\n\n\n(def ^reverse (arr)\n (var reversed [])\n (each (item) arr (reversed.unshift item))\n reversed)\n\n(var reverse ^reverse)\n\n(def build-args-string (args rest)\n (var args-string \"\")\n\n (if (defined? rest)\n (concat args-string\n \"var \" (translate (second rest))\n \" = Array.prototype.slice.call(arguments, \"\n args.length \");\\n\")\n args-string))\n\n(def ^lambda (arglist ...body)\n (var args (transform-args arglist)\n rest (first (select args\n (#(arg)\n (or (= \"&rest\" (first arg))\n (= \"...\" (first arg))))))\n doc-string undefined)\n\n (set body (- body.length 1)\n [ 'return (get body (- body.length 1)) ])\n\n (when (and (= (typeof (first body)) 'string)\n (send (first body) match (regex \"^\\\".*\\\"$\")))\n (assign doc-string\n (\"/* \" (eval (body.shift)) \" */\\n\")))\n\n (var no-rest-args (if rest (args.slice 0 -1) args)\n args-string (build-args-string no-rest-args rest))\n\n (\"(function(\"\n (join \", \" (map args (#(arg) (translate (second arg)))))\n \") {\"\n (indent doc-string args-string\n (join \"\\n\"\n (map body\n (#(stmt)\n (var tstmt (translate stmt))\n (concat tstmt\n (if (= (last tstmt) \";\") \"\" \";\"))))))\n \"})\"))\n\n(set macros \"#\" ^lambda)\n\n(def ^quote (item)\n (if (= \"Array\" item.constructor.name)\n (\"[ \" (join \", \" (map item ^quote)) \" ]\")\n (if (= 'number (typeof item)) item\n (\"\\\"\" (literal item) \"\\\"\"))))\n\n(def ^hash (...pairs)\n (when (odd? pairs.length)\n (error (\"odd number of key-value pairs in hash: \"\n (call inspect pairs))))\n\n (var quote-keys (and (exists? ^state) (^state 'quote-keys))\n pair-strings (bulk-map pairs (#(key value)\n (concat (if quote-keys\n (^quote (translate key))\n (translate key))\n \": \"\n (translate value)))))\n (if (>= 1 pair-strings.length)\n (\"{ \" (join \", \" pair-strings) \" }\")\n (\"{\" (indent (join \",\\n\" pair-strings)) \"}\")))\n\n\n(def literal (string)\n (inject (chain string\n (replace (regex \"\\\\*\" 'g) \"_\")\n (replace (regex \"\\\\?$\") \"__QUERY\")\n (replace (regex \"!$\") \"__BANG\"))\n (string.match (regex \"-(.)\" 'g))\n (#(return-string match)\n (return-string.replace match\n (send (second match) to-upper-case)))))\n\n\n\n(def translate-list-token (token hint)\n (if (empty? token)\n (^empty-list)\n (do\n (var first (translate (first token))\n macro (get macros first))\n (if (defined? macro)\n (apply macro (token.slice 1))\n (if (and (string? first) (= \"\\\"\" (first first)))\n (^concat ...token)\n (apply (get macros (or hint 'call)) token))))))\n\n(def translate-string-token (token hint)\n (if (token.match (regex (\"^\" sibilant.tokens.literal \"$\")))\n (literal token)\n (if (token.match (regex \"^;\"))\n (token.replace (regex \"^;+\") \"//\")\n (if (= \"\\\"\" (first token) (last token))\n (chain token (split \"\\n\") (join \"\\\\n\\\" +\\n\\\"\"))\n token))))\n\n(def translate (token hint)\n (var hint hint)\n (when (and hint (undefined? (get macros hint)))\n (assign hint undefined))\n\n (when (defined? token)\n (when (string? token) (assign token (token.trim)))\n (try\n (if (list? token)\n (translate-list-token token hint)\n (if (string? token)\n (translate-string-token token hint)\n token))\n (error (concat e.stack \"\\n\"\n \"Encountered when attempting to process:\\n\"\n (indent (call inspect token)))))))\n\n\n(set sibilant 'translate translate)\n\n(def translate-all (contents)\n (var buffer \"\")\n (each (token) (tokenize contents)\n (var line (translate token 'statement))\n (when line (assign buffer (concat buffer line \"\\n\"))))\n buffer)\n\n(set sibilant 'translate-all translate-all)\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/core.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(set sibilant 'tokens\n { 'regex \"(\\\\/(\\\\\\\\\\\\\\/|[^\\\\/\\\\n])+\\\\/[glim]*)\"\n 'comment \"(;.*)\"\n 'string \"(\\\"(([^\\\"]|(\\\\\\\\\\\"))*[^\\\\\\\\])?\\\")\"\n 'number \"(-?[0-9][0-9.,]*)\"\n 'literal \"(-?[*.$a-zA-Z^_][*.a-zA-Z0-9-_]*(\\\\?|!)?)\"\n 'special \"([&']?)\"\n 'dots \"(\\\\.+)\"\n 'other-char \"([#><=!\\\\+\\\\/\\\\*-]+)\"\n 'open-paren \"(\\\\()\"\n 'special-open-paren \"('?\\\\()\"\n 'close-paren \"(\\\\))\"\n 'alternative-parens \"\\\\{|\\\\[|\\\\}|\\\\]\" })\n\n(set sibilant.tokens 'special-literal\n (concat sibilant.tokens.special sibilant.tokens.literal))\n\n(set sibilant 'token-precedence\n '( regex comment string number dots special-literal other-char\n special-open-paren close-paren alternative-parens))\n\n(set sibilant\n 'ordered-regexes (map sibilant.token-precedence (#(x) (get sibilant.tokens x)))\n 'master-regex (regex (join \"|\" sibilant.ordered-regexes) 'g))\n\n(def tokenize (string)\n (var tokens []\n parse-stack [tokens]\n specials [])\n\n (def accept-token (token)\n (send (get parse-stack 0) push token))\n\n (def increase-nesting ()\n (var new-arr [])\n (accept-token new-arr)\n (parse-stack.unshift new-arr))\n\n (def decrease-nesting ()\n (specials.shift)\n (parse-stack.shift)\n (when (zero? parse-stack.length)\n (throw (\"unbalanced parens:\\n\"\n (call inspect parse-stack)))))\n\n (def handle-token (token)\n (var special (first token)\n token token)\n\n (switch special\n (\"'\"\n (assign token (token.slice 1))\n (increase-nesting)\n (accept-token 'quote))\n (\"^\" (assign token (\"macros.\"(token.slice 1)) special false))\n (default (assign special false)))\n\n (specials.unshift (as-boolean special))\n\n (switch token\n (\"(\" (increase-nesting))\n ((\"]\" \"}\" \")\") (decrease-nesting))\n\n (\"{\" (increase-nesting) (accept-token 'hash))\n (\"[\" (increase-nesting) (accept-token 'list))\n\n (default\n (if (token.match (regex (\"^\" sibilant.tokens.number \"$\")))\n (accept-token (parse-float (token.replace (regex \",\" 'g) \"\")))\n (accept-token token))))\n\n (when (and (!= token \"(\")\n (specials.shift))\n (decrease-nesting)))\n\n\n (chain string\n (match sibilant.master-regex)\n (for-each handle-token))\n\n (when (> parse-stack.length 1)\n (error \"unexpected EOF, probably missing a )\\n\"\n (call inspect (first parse-stack))))\n tokens)\n\n(set sibilant 'tokenize tokenize)\n\n(def indent (...args)\n (concat\n (chain (compact args)\n (join \"\\n\")\n (replace (regex \"^\") \"\\n\")\n (replace (regex \"\\\\n\" 'g) \"\\n \"))\n \"\\n\"))\n\n(def construct-hash (array-of-arrays)\n (inject {} array-of-arrays\n (#(object item)\n (set object (first item) (get object (second item)))\n object)))\n\n(var macros {})\n(set sibilant 'macros macros)\n\n(set macros 'return\n (#(token)\n (var default-return (\"return \" (translate token)))\n\n (if (list? token)\n (switch (first token)\n ('(return throw do) (translate token))\n ('delete\n (var delete-macro (get macros 'delete))\n (if (< token.length 3) default-return\n (concat (apply delete-macro (token.slice 1 -1))\n \"\\nreturn \"\n (call delete-macro (last token)))))\n ('(setf assign)\n (if (< token.length 4) default-return\n (concat (apply ^setf\n (token.slice 1 (- token.length 2)))\n \"\\nreturn \"\n (apply ^setf (token.slice -2)))))\n ('set\n (if (< token.length 5) default-return\n (do\n (var obj (second token)\n non-return-part (token.slice 2 (- token.length 2))\n return-part (token.slice -2))\n (non-return-part.unshift obj)\n (return-part.unshift obj)\n (concat (^set ...non-return-part)\n \"\\nreturn \"\n (^set ...return-part)))))\n (default default-return))\n default-return)))\n\n(def as-statement (string)\n (chain string (to-string) (replace (regex \";*\\\\s*$\") \";\")))\n\n(def ^statement (...args)\n (concat (^call ...args) \";\\n\"))\n\n(def ^do (...body)\n (var last-index (Math.max 0 (- body.length 1)))\n\n (set body last-index ['return (get body last-index)])\n\n (join \"\\n\"\n (map body (#(arg) (concat (as-statement (translate arg)))))))\n\n(def ^empty-list () 'null)\n\n(def ^call (fn-name ...args)\n (concat (translate fn-name)\n \"(\" (join \", \" (map args translate)) \")\"))\n\n(def ^def (fn-name ...args-and-body)\n (var fn-name-tr (translate fn-name)\n start (if (match? (regex \"\\\\.\") fn-name-tr) \"\" \"var \"))\n (concat start fn-name-tr \" = \"\n (^lambda ...args-and-body)\n \";\\n\"))\n\n(def ^macro (name ...args-and-body)\n (var js (^lambda ...args-and-body)\n name (translate name))\n (try (set macros name (eval js))\n (error (\"error in parsing macro \"\n name \":\\n\" (indent js))))\n undefined)\n\n(def ^concat (...args)\n (\"(\" (join \" + \" (map args translate)) \")\"))\n\n(def transform-args (arglist)\n (var last null\n args [])\n\n (each (arg) arglist\n (if (or (= \"&rest\" arg) (= \"...\" arg))\n (assign last arg)\n (do\n (args.push [last arg])\n (assign last null))))\n\n (when last (error (\"unexpected argument modifier: \" last)))\n\n args)\n\n\n(def ^reverse (arr)\n (var reversed [])\n (each (item) arr (reversed.unshift item))\n reversed)\n\n(var reverse ^reverse)\n\n(def build-args-string (args rest)\n (var args-string \"\")\n\n (if (defined? rest)\n (concat args-string\n \"var \" (translate (second rest))\n \" = Array.prototype.slice.call(arguments, \"\n args.length \");\\n\")\n args-string))\n\n(def ^lambda (arglist ...body)\n (var args (transform-args arglist)\n rest (first (select args\n (#(arg)\n (or (= \"&rest\" (first arg))\n (= \"...\" (first arg))))))\n doc-string undefined)\n\n (set body (- body.length 1)\n [ 'return (get body (- body.length 1)) ])\n\n (when (and (= (typeof (first body)) 'string)\n (send (first body) match (regex \"^\\\".*\\\"$\")))\n (assign doc-string\n (\"/* \" (eval (body.shift)) \" */\\n\")))\n\n (var no-rest-args (if rest (args.slice 0 -1) args)\n args-string (build-args-string no-rest-args rest))\n\n (\"(function(\"\n (join \", \" (map args (#(arg) (translate (second arg)))))\n \") {\"\n (indent doc-string args-string\n (join \"\\n\"\n (map body\n (#(stmt)\n (var tstmt (translate stmt))\n (concat tstmt\n (if (= (last tstmt) \";\") \"\" \";\"))))))\n \"})\"))\n\n(set macros \"#\" ^lambda)\n\n(def ^quote (item)\n (if (= \"Array\" item.constructor.name)\n (\"[ \" (join \", \" (map item ^quote)) \" ]\")\n (if (= 'number (typeof item)) item\n (\"\\\"\" (literal item) \"\\\"\"))))\n\n(def ^hash (...pairs)\n (when (odd? pairs.length)\n (error (\"odd number of key-value pairs in hash: \"\n (call inspect pairs))))\n\n (var quote-keys (and (exists? ^state) (^state 'quote-keys))\n pair-strings (bulk-map pairs (#(key value)\n (concat (if quote-keys\n (^quote (translate key))\n (translate key))\n \": \"\n (translate value)))))\n (if (>= 1 pair-strings.length)\n (\"{ \" (join \", \" pair-strings) \" }\")\n (\"{\" (indent (join \",\\n\" pair-strings)) \"}\")))\n\n\n(def literal (string)\n (inject (chain string\n (replace (regex \"\\\\*\" 'g) \"_\")\n (replace (regex \"\\\\?$\") \"__QUERY\")\n (replace (regex \"!$\") \"__BANG\"))\n (string.match (regex \"-(.)\" 'g))\n (#(return-string match)\n (return-string.replace match\n (send (second match) to-upper-case)))))\n\n\n\n(def translate-list-token (token hint)\n (if (empty? token)\n (^empty-list)\n (do\n (var first (translate (first token))\n macro (get macros first))\n (if (defined? macro)\n (apply macro (token.slice 1))\n (if (and (string? first) (= \"\\\"\" (first first)))\n (^concat ...token)\n (apply (get macros (or hint 'call)) token))))))\n\n(def translate-string-token (token hint)\n (if (token.match (regex (\"^\" sibilant.tokens.literal \"$\")))\n (literal token)\n (if (token.match (regex \"^;\"))\n (token.replace (regex \"^;+\") \"//\")\n (if (= \"\\\"\" (first token) (last token))\n (chain token (split \"\\n\") (join \"\\\\n\\\" +\\n\\\"\"))\n token))))\n\n(def translate (token hint)\n (var hint hint)\n (when (and hint (undefined? (get macros hint)))\n (assign hint undefined))\n\n (when (defined? token)\n (when (string? token) (assign token (token.trim)))\n (try\n (if (list? token)\n (translate-list-token token hint)\n (if (string? token)\n (translate-string-token token hint)\n token))\n (error (concat e.stack \"\\n\"\n \"Encountered when attempting to process:\\n\"\n (indent (call inspect token)))))))\n\n\n(set sibilant 'translate translate)\n\n(def translate-all (contents)\n (var buffer \"\")\n (each (token) (tokenize contents)\n (var line (translate token 'statement))\n (when line (assign buffer (concat buffer line \"\\n\"))))\n buffer)\n\n(set sibilant 'translate-all translate-all)\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file diff --git a/lib/macros.js b/lib/macros.js index f069e8b..19490db 100644 --- a/lib/macros.js +++ b/lib/macros.js @@ -205,19 +205,32 @@ macros.macro = (function macros$macro$(name, args, body) { })(); return undefined; }); +macros.meta = (function macros$meta$(body) { + /* ^meta /Users/jbr/code/sibilant/src/macros.sibilant:105:0 */ + + var body = Array.prototype.slice.call(arguments, 0); + + var js = outputFormatter(macros.scoped.apply(this, body)); + (function() { + if (sibilant.debug) { + return console.log(js); + } + })(); + return outputFormatter(eval(js)); +}); macros.concat = (function macros$concat$(args) { - /* ^concat /Users/jbr/code/sibilant/src/macros.sibilant:105:0 */ + /* ^concat /Users/jbr/code/sibilant/src/macros.sibilant:111:0 */ var args = Array.prototype.slice.call(arguments, 0); return [ "(", interleave(" + ", map(args, transpile)), ")" ]; }); macros.reverse = (function macros$reverse$(arr) { - /* ^reverse /Users/jbr/code/sibilant/src/macros.sibilant:108:0 */ + /* ^reverse /Users/jbr/code/sibilant/src/macros.sibilant:114:0 */ var reversed = []; arr.forEach((function(item) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:110:5 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:116:5 */ return reversed.unshift(item); })); @@ -225,7 +238,7 @@ macros.reverse = (function macros$reverse$(arr) { }); var reverse = macros.reverse; macros.lambda = (function macros$lambda$(argsOrOptions, body) { - /* ^lambda /Users/jbr/code/sibilant/src/macros.sibilant:115:0 */ + /* ^lambda /Users/jbr/code/sibilant/src/macros.sibilant:121:0 */ var body = Array.prototype.slice.call(arguments, 1); @@ -253,13 +266,13 @@ macros.lambda = (function macros$lambda$(argsOrOptions, body) { } })(), rest = detect(args, (function(arg) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:128:23 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:134:23 */ return node__QUERY(arg, "dots"); })); var thisNode = this, node = detect([ argsOrOptions.node, thisNode, argsOrOptions.name, args, (body)[0] ], (function(n) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:133:16 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:139:16 */ return (node__QUERY(n) && (n)["file"]); })); @@ -295,7 +308,7 @@ macros.lambda = (function macros$lambda$(argsOrOptions, body) { }); (macros)["#"] = macros.lambda; macros.quotedHash = (function macros$quotedHash$(pairs) { - /* ^quoted-hash /Users/jbr/code/sibilant/src/macros.sibilant:151:0 */ + /* ^quoted-hash /Users/jbr/code/sibilant/src/macros.sibilant:157:0 */ var pairs = Array.prototype.slice.call(arguments, 0); @@ -306,7 +319,7 @@ macros.quotedHash = (function macros$quotedHash$(pairs) { return value; }); macros.hash = (function macros$hash$(pairs) { - /* ^hash /Users/jbr/code/sibilant/src/macros.sibilant:158:0 */ + /* ^hash /Users/jbr/code/sibilant/src/macros.sibilant:164:0 */ var pairs = Array.prototype.slice.call(arguments, 0); @@ -317,7 +330,7 @@ macros.hash = (function macros$hash$(pairs) { })(); var quoteKeys = macros.hash.quoteKeys, pairStrings = bulkMap(pairs, (function(key, value) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:164:39 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:170:39 */ return [ (function() { if ((quoteKeys && (!node__QUERY(key, "string")))) { @@ -336,7 +349,7 @@ macros.hash = (function macros$hash$(pairs) { })(); }); var qescape = (function qescape$(content) { - /* qescape /Users/jbr/code/sibilant/src/macros.sibilant:175:0 */ + /* qescape /Users/jbr/code/sibilant/src/macros.sibilant:181:0 */ return (function() { if ((!((typeof content !== "undefined") && (content !== null)))) { @@ -350,14 +363,14 @@ var qescape = (function qescape$(content) { })(); }); var logPretty = (function logPretty$(label, arg) { - /* log-pretty /Users/jbr/code/sibilant/src/macros.sibilant:182:0 */ + /* log-pretty /Users/jbr/code/sibilant/src/macros.sibilant:188:0 */ console.log((label + ": " + prettify(arg))); return arg; }); var prettyLog = logPretty; macros.quote = (function macros$quote$(content) { - /* ^quote /Users/jbr/code/sibilant/src/macros.sibilant:188:0 */ + /* ^quote /Users/jbr/code/sibilant/src/macros.sibilant:194:0 */ return (function() { if (typeof(content) === "string") { @@ -374,6 +387,22 @@ macros.quote = (function macros$quote$(content) { return [ "\"", mapNode(transpile(content), qescape), "\"" ]; } })(); + } else if (node__QUERY(content, "bracket")) { + return (function() { + if ((Object.keys(findUnquotes(content)))["length"]) { + return macros.call("macros.expandQuote.call", "this", macros.quote(content.nodeId), macros.quotedHash.apply(this, alternatingKeysAndValues(findUnquotes(content)))); + } else { + return macros.list.apply(this, map(content.contents, macros.quote)); + } + })(); + } else if (node__QUERY(content, "brace")) { + return (function() { + if ((Object.keys(findUnquotes(content)))["length"]) { + return macros.call("macros.expandQuote.call", "this", macros.quote(content.nodeId), macros.quotedHash.apply(this, alternatingKeysAndValues(findUnquotes(content)))); + } else { + return macros.hash.apply(this, map(content.contents, macros.quote)); + } + })(); } else { console.log(("unknown content" + prettify(content))); return content; @@ -381,13 +410,13 @@ macros.quote = (function macros$quote$(content) { })(); }); macros.debug = (function macros$debug$(val) { - /* ^debug /Users/jbr/code/sibilant/src/macros.sibilant:201:0 */ + /* ^debug /Users/jbr/code/sibilant/src/macros.sibilant:220:0 */ (sibilant)["debug"] = eval(outputFormatter(transpile(val))); return null; }); var mapNode = (function mapNode$(node, fn) { - /* map-node /Users/jbr/code/sibilant/src/macros.sibilant:204:0 */ + /* map-node /Users/jbr/code/sibilant/src/macros.sibilant:223:0 */ return (function() { if (node__QUERY(node)) { @@ -400,7 +429,7 @@ var mapNode = (function mapNode$(node, fn) { return mappedNode; } else if (((node) && typeof (node) === "object" && (node).constructor.name === "Array")) { return map(node, (function(c) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:213:32 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:232:32 */ return mapNode(c, fn); })); @@ -410,7 +439,7 @@ var mapNode = (function mapNode$(node, fn) { })(); }); var eachNode = (function eachNode$(node, fn) { - /* each-node /Users/jbr/code/sibilant/src/macros.sibilant:216:0 */ + /* each-node /Users/jbr/code/sibilant/src/macros.sibilant:235:0 */ return (function() { if (node__QUERY(node)) { @@ -421,7 +450,7 @@ var eachNode = (function eachNode$(node, fn) { })(); } else if (((node) && typeof (node) === "object" && (node).constructor.name === "Array")) { return node.forEach((function(c) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:218:22 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:237:22 */ return eachNode(c, fn); })); @@ -431,7 +460,7 @@ var eachNode = (function eachNode$(node, fn) { })(); }); var mapNodeForQuoteExpansion = (function mapNodeForQuoteExpansion$(node, expansions) { - /* map-node-for-quote-expansion /Users/jbr/code/sibilant/src/macros.sibilant:222:0 */ + /* map-node-for-quote-expansion /Users/jbr/code/sibilant/src/macros.sibilant:241:0 */ return (function() { if (node__QUERY(node)) { @@ -451,7 +480,7 @@ var mapNodeForQuoteExpansion = (function mapNodeForQuoteExpansion$(node, expansi return mappedNode; } else if (((node) && typeof (node) === "object" && (node).constructor.name === "Array")) { return map(node, (function(c) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:233:21 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:252:21 */ return mapNodeForQuoteExpansion(c, expansions); })); @@ -461,22 +490,22 @@ var mapNodeForQuoteExpansion = (function mapNodeForQuoteExpansion$(node, expansi })(); }); macros.expandQuote = (function macros$expandQuote$(nodeId, expansions) { - /* ^expand-quote /Users/jbr/code/sibilant/src/macros.sibilant:238:0 */ + /* ^expand-quote /Users/jbr/code/sibilant/src/macros.sibilant:257:0 */ var expandedNodes = mapNodeForQuoteExpansion((sibilant.nodeCache)[nodeId], expansions); return transpile(expandedNodes); }); var unquote__QUERY = (function unquote__QUERY$(node) { - /* unquote? /Users/jbr/code/sibilant/src/macros.sibilant:244:0 */ + /* unquote? /Users/jbr/code/sibilant/src/macros.sibilant:263:0 */ return node__QUERY(node, "at"); }); var findUnquotes = (function findUnquotes$(node) { - /* find-unquotes /Users/jbr/code/sibilant/src/macros.sibilant:246:0 */ + /* find-unquotes /Users/jbr/code/sibilant/src/macros.sibilant:265:0 */ var unquotes = { }; eachNode(node, (function(n) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:248:21 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:267:21 */ (function() { if (unquote__QUERY(n)) { @@ -488,13 +517,13 @@ var findUnquotes = (function findUnquotes$(node) { return unquotes; }); var spliceDots = (function spliceDots$(node) { - /* splice-dots /Users/jbr/code/sibilant/src/macros.sibilant:254:0 */ + /* splice-dots /Users/jbr/code/sibilant/src/macros.sibilant:273:0 */ (function() { - if (((node.contents) && typeof (node.contents) === "object" && (node.contents).constructor.name === "Array")) { + if ((node && ((node.contents) && typeof (node.contents) === "object" && (node.contents).constructor.name === "Array"))) { var contents = []; node.contents.forEach((function(content) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:257:11 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:276:11 */ return (function() { if ((node__QUERY(content, "dots") && ((content.contents) && typeof (content.contents) === "object" && (content.contents).constructor.name === "Array") && (content.contents.length === 1) && (((content.contents)[0]) && typeof ((content.contents)[0]) === "object" && ((content.contents)[0]).constructor.name === "Array"))) { @@ -510,16 +539,16 @@ var spliceDots = (function spliceDots$(node) { return node; }); var alternatingKeysAndValues = (function alternatingKeysAndValues$(hash) { - /* alternating-keys-and-values /Users/jbr/code/sibilant/src/macros.sibilant:269:0 */ + /* alternating-keys-and-values /Users/jbr/code/sibilant/src/macros.sibilant:288:0 */ return flatten(map(Object.keys(hash), (function(key) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:271:19 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:290:19 */ return [ key, (hash)[key] ]; }))); }); macros.list = (function macros$list$(args) { - /* ^list /Users/jbr/code/sibilant/src/macros.sibilant:274:0 */ + /* ^list /Users/jbr/code/sibilant/src/macros.sibilant:293:0 */ var args = Array.prototype.slice.call(arguments, 0); @@ -529,16 +558,16 @@ macros.list = (function macros$list$(args) { return "[]"; } else { var simpleList = (function simpleList$(args) { - /* simple-list /Users/jbr/code/sibilant/src/macros.sibilant:278:12 */ + /* simple-list /Users/jbr/code/sibilant/src/macros.sibilant:297:12 */ return [ "[ ", interleave(", ", map(args, (function(arg) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:279:50 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:298:50 */ return arg.transpiled; }))), " ]" ]; }); args.forEach((function(arg) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:281:27 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:300:27 */ return (function() { if (node__QUERY(arg, "dots")) { @@ -551,7 +580,7 @@ macros.list = (function macros$list$(args) { })(); })); argSegments = map(argSegments, (function(segment) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:287:38 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:306:38 */ return (function() { if (((segment) && typeof (segment) === "object" && (segment).constructor.name === "Array")) { @@ -572,13 +601,13 @@ macros.list = (function macros$list$(args) { })(); }); macros.call = (function macros$call$(fnName, args) { - /* ^call /Users/jbr/code/sibilant/src/macros.sibilant:297:0 */ + /* ^call /Users/jbr/code/sibilant/src/macros.sibilant:316:0 */ var args = Array.prototype.slice.call(arguments, 1); return (function() { if (any__QUERY(args, (function(arg) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:298:20 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:317:20 */ return node__QUERY(arg, "dots"); }))) { @@ -589,7 +618,7 @@ macros.call = (function macros$call$(fnName, args) { })(); }); macros.dots = (function macros$dots$(contents) { - /* ^dots /Users/jbr/code/sibilant/src/macros.sibilant:303:0 */ + /* ^dots /Users/jbr/code/sibilant/src/macros.sibilant:322:0 */ var contents = Array.prototype.slice.call(arguments, 0); diff --git a/lib/macros.map b/lib/macros.map index 58333d3..8b28c8c 100644 --- a/lib/macros.map +++ b/lib/macros.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/macros.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(var macros {})\n(set sibilant 'macros macros 'debug false)\n\n\n(def recurse-indent (...args)\n (map args\n (#(arg)\n (if (node? arg) (do (set arg 'contents (apply recurse-indent (compact (flatten arg.contents)))) arg)\n (list? arg) (apply recurse-indent arg)\n (number? arg) (arg.to-string)\n (string? arg)\n (chain arg\n (replace (regex \"\\\\n\" 'g) \"\\n \")\n (replace (regex \"\\\\n\\\\s+\\\\n\" 'g) \"\\n\\n\"))\n\n arg))))\n\n(def indent (...args)\n [\"\\n \" (recurse-indent args) \"\\n\"])\n\n\n(def escape-regex (string)\n (string.replace (regex \"[\\\\-\\\\[\\\\]\\\\/\\\\{\\\\}\\\\(\\\\)\\\\*\\\\+\\\\?\\\\.\\\\\\\\\\^\\\\$\\\\|]\" 'g) \"\\\\$&\"))\n\n(def ^return (token)\n (when sibilant.debug (console.log \"returning \" (prettify token)))\n (var default-return (as-statement [\"return \" (transpile token)]))\n (if (and token token.contents token.contents.length)\n (switch (get (first token.contents) 'token)\n (('return 'throw 'do) (transpile token))\n ('delete\n (var delete-macro (get macros 'delete))\n (if (< token.contents.length 3) default-return\n [ (as-statement (apply delete-macro (token.contents.slice 1 -1)))\n \"\\nreturn \"\n (as-statement (call delete-macro (last token.contents)))]))\n ('assign\n (if (< token.contents.length 4) default-return\n [ (apply ^assign\n (token.contents.slice 1 (- token.contents.length 2)))\n \"\\nreturn \"\n (apply ^assign (token.contents.slice -2))]))\n ('var\n [ (transpile token) \"\\nreturn \" (transpile (if (even? token.contents.length)\n (last token.contents)\n (first (token.contents.slice -2))))])\n ('set\n (if (< token.contents.length 5) default-return\n (do\n (var obj (second token.contents)\n non-return-part (token.contents.slice 2 (- token.contents.length 2))\n return-part (token.contents.slice -2))\n (non-return-part.unshift obj)\n (return-part.unshift obj)\n [ (^set ...non-return-part)\n \"\\nreturn \"\n (^set ...return-part)])))\n (default default-return))\n default-return))\n\n\n(def statement? (transpiled)\n (if (node? transpiled) (statement? transpiled.contents)\n (list? transpiled) (statement? (last transpiled))\n (string? transpiled) (= \";\" (last transpiled))\n false))\n\n(def as-statement (node)\n (var transpiled (transpile node))\n\n (if (empty-node? transpiled) undefined\n (statement? transpiled) transpiled\n [ transpiled \";\" ]))\n\n(def ^do (...body)\n (if (= 1 body.length) (^return (first body))\n body.length [ (interleave \"\\n\" (map (body.slice 0 -1) (#(node) (as-statement node))))\n \"\\n\"\n (^return (last body)) ]\n \"\"))\n\n(def ^empty-list () 'null)\n\n(def ^def (fn-name args ...body)\n (var fn-name-tr (transpile fn-name) this-node this)\n\n (as-statement [ (if (match? (regex \"\\\\.\") (output-formatter fn-name-tr)) \"\" \"var \")\n fn-name-tr \" = \"\n (^lambda { name fn-name args args node this-node } ...body )\n ] ))\n\n(def ^macro (name args ...body)\n (var name-tr (output-formatter (transpile name))\n options { name name args args node this}\n js (output-formatter (^lambda options ...body)))\n\n (when sibilant.debug (console.log js))\n \n (try (set macros name-tr (eval js))\n (error (\"error in parsing macro \"\n (sibilant.pretty-print name) \":\\n\" js)))\n\n undefined)\n\n(def ^concat (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n\n(def ^reverse (arr)\n (var reversed [])\n (each (item) arr (reversed.unshift item))\n reversed)\n\n(var reverse ^reverse)\n\n(def ^lambda (args-or-options ...body)\n (when sibilant.debug\n (console.log args-or-options))\n (var args (or (get args-or-options 'args) args-or-options)\n body (or (get args-or-options 'body) body)\n args (if (node? args 'expression) args.contents\n (and (node? args) (empty? body)) (do (assign body [ args ]) [])\n args)\n name (when args-or-options.name\n (chain (output-formatter (transpile args-or-options.name))\n (replace (regex \"\\\\W+\" 'g) \"$\")\n (concat \"$\")))\n rest (detect args\n (#(arg) (node? arg 'dots))))\n\n (var this-node this\n node (detect\n [ args-or-options.node this-node args-or-options.name args (first body) ]\n (#(n) (and (node? n) (get n 'file)))))\n [\"(function\" (if name (\" \" name) \"\") \"(\"\n (interleave \", \" (map args transpile)) \") {\"\n (if (or args-or-options.name node)\n (indent [\"/*\"\n (if args-or-options.name (\" \" (sibilant.pretty-print args-or-options.name false)) \"\")\n (if node (\" \" node.file \":\" node.line \":\" node.col) \"\")\n \" */\"]) \"\")\n (when (exists? rest)\n (indent (as-statement [\"var \" (transpile rest)\n \" = Array.prototype.slice.call(arguments, \"\n (- args.length 1) \")\"])))\n\n (indent (apply ^do body))\n \"})\"])\n\n(set macros \"#\" ^lambda)\n\n(def ^quoted-hash (...pairs)\n (var cached-quote-value ^hash.quote-keys)\n (set ^hash 'quote-keys true)\n (var value (^hash ...pairs))\n (set ^hash 'quote-keys cached-quote-value)\n value)\n\n(def ^hash (...pairs)\n (when (odd? pairs.length)\n (error (\"odd number of key-value pairs in hash: \"\n (call inspect pairs))))\n\n (var quote-keys ^hash.quote-keys\n pair-strings (bulk-map pairs (#(key value)\n [ (if (and quote-keys (not (node? key 'string)))\n [\"\\\"\" (transpile key) \"\\\"\"]\n (transpile key))\n \": \"\n (transpile value)])))\n (if (>= 1 pair-strings.length)\n [\"{ \" (interleave \", \" pair-strings) \" }\"]\n [\"{\" (indent (interleave \",\\n\" pair-strings)) \"}\"]))\n\n\n(def qescape (content)\n (if (not (exists? content)) \"\"\n (string? content) (chain content\n (replace (regex \"\\\"\" 'g) \"\\\\\\\"\")\n (replace (regex \"\\\\n\" 'g) \"\\\\n\\\" +\\n\\\"\"))\n content))\n\n(def log-pretty (label arg)\n (console.log (concat label \": \" (prettify arg)))\n arg)\n\n(var pretty-log log-pretty)\n\n(def ^quote (content)\n (if (string? content) (\"\\\"\" (qescape content) \"\\\"\")\n (number? content) (^quote (content.to-string))\n (node? content 'literal) [\"\\\"\" (transpile content) \"\\\"\"]\n (node? content 'expression)\n (if (length (keys (find-unquotes content)))\n (^call 'macros.expand-quote.call 'this (^quote content.node-id)\n (apply ^quoted-hash (alternating-keys-and-values (find-unquotes content))))\n [\"\\\"\" (map-node (transpile content) qescape) \"\\\"\"])\n (do\n (console.log (\"unknown content\" (prettify content)))\n content)))\n\n(def ^debug (val)\n (set sibilant 'debug (eval (output-formatter (transpile val)))) null)\n\n(def map-node (node fn)\n (if (node? node)\n (do\n (var mapped-node (fn node))\n (when (node? mapped-node)\n (set mapped-node 'contents (map-node mapped-node.contents fn)))\n\n mapped-node)\n\n (list? node) (map node (#(c) (map-node c fn)))\n (fn node)))\n\n(def each-node (node fn)\n (if (node? node) (when (fn node) (each-node node.contents fn))\n (list? node) (each (c) node (each-node c fn))\n (fn node)))\n\n\n(def map-node-for-quote-expansion (node expansions)\n (if (node? node)\n (do\n (var mapped-node (if (expansions.has-own-property node.node-id) (get expansions node.node-id) (clone node)))\n (when (node? mapped-node)\n (set mapped-node 'contents (map-node-for-quote-expansion mapped-node.contents expansions)))\n\n (assign mapped-node (splice-dots mapped-node))\n mapped-node)\n\n (list? node)\n (map node (#(c) (map-node-for-quote-expansion c expansions)))\n\n node))\n\n\n(def ^expand-quote (node-id expansions)\n (var expanded-nodes\n (map-node-for-quote-expansion (get sibilant.node-cache node-id) expansions))\n\n (transpile expanded-nodes))\n\n(def unquote? (node) (node? node 'at))\n\n(def find-unquotes (node)\n (var unquotes {})\n (each-node node (#(n)\n (when (unquote? n)\n (set unquotes n.node-id (transpile n)))\n (not (node? n 'tick))))\n unquotes)\n\n(def splice-dots (node)\n (when (list? node.contents)\n (var contents [])\n (each (content) node.contents\n (if (and (node? content 'dots)\n (list? content.contents)\n (= content.contents.length 1)\n (list? (first content.contents)))\n (contents.push.apply contents (first content.contents))\n (contents.push content)))\n\n (set node 'contents contents))\n node)\n\n\n(def alternating-keys-and-values (hash)\n (flatten (map (keys hash)\n (#(key) [key, (get hash key)]))))\n\n\n(def ^list (...args)\n (var arg-segments [])\n (if (empty? args) \"[]\"\n (do\n (def simple-list (args)\n [\"[ \" (interleave \", \" (map args (#(arg) arg.transpiled))) \" ]\"])\n\n (args.for-each (#(arg)\n (if (node? arg 'dots) (arg-segments.push {transpiled (transpile arg)})\n (list? (last arg-segments)) (send (last arg-segments) push {transpiled (transpile arg)})\n (arg-segments.push [{transpiled (transpile arg)}]))))\n\n (assign arg-segments (map arg-segments\n (#(segment)\n (if (list? segment)\n (simple-list segment)\n segment.transpiled))))\n\n (if (= 1 (length arg-segments))\n (first arg-segments)\n [(first arg-segments) \".concat(\" (interleave \", \" (rest arg-segments))\")\"]))))\n\n\n(def ^call (fn-name ...args)\n (if (any? args (#(arg) (node? arg 'dots)))\n (macros.apply fn-name (macros.list ...args))\n [ (transpile fn-name)\n \"(\" (interleave \", \" (map args transpile)) \")\" ]))\n\n(def ^dots (...contents)\n (transpile contents))\n\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/macros.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(var macros {})\n(set sibilant 'macros macros 'debug false)\n\n\n(def recurse-indent (...args)\n (map args\n (#(arg)\n (if (node? arg) (do (set arg 'contents (apply recurse-indent (compact (flatten arg.contents)))) arg)\n (list? arg) (apply recurse-indent arg)\n (number? arg) (arg.to-string)\n (string? arg)\n (chain arg\n (replace (regex \"\\\\n\" 'g) \"\\n \")\n (replace (regex \"\\\\n\\\\s+\\\\n\" 'g) \"\\n\\n\"))\n\n arg))))\n\n(def indent (...args)\n [\"\\n \" (recurse-indent args) \"\\n\"])\n\n\n(def escape-regex (string)\n (string.replace (regex \"[\\\\-\\\\[\\\\]\\\\/\\\\{\\\\}\\\\(\\\\)\\\\*\\\\+\\\\?\\\\.\\\\\\\\\\^\\\\$\\\\|]\" 'g) \"\\\\$&\"))\n\n(def ^return (token)\n (when sibilant.debug (console.log \"returning \" (prettify token)))\n (var default-return (as-statement [\"return \" (transpile token)]))\n (if (and token token.contents token.contents.length)\n (switch (get (first token.contents) 'token)\n (('return 'throw 'do) (transpile token))\n ('delete\n (var delete-macro (get macros 'delete))\n (if (< token.contents.length 3) default-return\n [ (as-statement (apply delete-macro (token.contents.slice 1 -1)))\n \"\\nreturn \"\n (as-statement (call delete-macro (last token.contents)))]))\n ('assign\n (if (< token.contents.length 4) default-return\n [ (apply ^assign\n (token.contents.slice 1 (- token.contents.length 2)))\n \"\\nreturn \"\n (apply ^assign (token.contents.slice -2))]))\n ('var\n [ (transpile token) \"\\nreturn \" (transpile (if (even? token.contents.length)\n (last token.contents)\n (first (token.contents.slice -2))))])\n ('set\n (if (< token.contents.length 5) default-return\n (do\n (var obj (second token.contents)\n non-return-part (token.contents.slice 2 (- token.contents.length 2))\n return-part (token.contents.slice -2))\n (non-return-part.unshift obj)\n (return-part.unshift obj)\n [ (^set ...non-return-part)\n \"\\nreturn \"\n (^set ...return-part)])))\n (default default-return))\n default-return))\n\n\n(def statement? (transpiled)\n (if (node? transpiled) (statement? transpiled.contents)\n (list? transpiled) (statement? (last transpiled))\n (string? transpiled) (= \";\" (last transpiled))\n false))\n\n(def as-statement (node)\n (var transpiled (transpile node))\n\n (if (empty-node? transpiled) undefined\n (statement? transpiled) transpiled\n [ transpiled \";\" ]))\n\n(def ^do (...body)\n (if (= 1 body.length) (^return (first body))\n body.length [ (interleave \"\\n\" (map (body.slice 0 -1) (#(node) (as-statement node))))\n \"\\n\"\n (^return (last body)) ]\n \"\"))\n\n(def ^empty-list () 'null)\n\n(def ^def (fn-name args ...body)\n (var fn-name-tr (transpile fn-name) this-node this)\n\n (as-statement [ (if (match? (regex \"\\\\.\") (output-formatter fn-name-tr)) \"\" \"var \")\n fn-name-tr \" = \"\n (^lambda { name fn-name args args node this-node } ...body )\n ] ))\n\n(def ^macro (name args ...body)\n (var name-tr (output-formatter (transpile name))\n options { name name args args node this}\n js (output-formatter (^lambda options ...body)))\n\n (when sibilant.debug (console.log js))\n \n (try (set macros name-tr (eval js))\n (error (\"error in parsing macro \"\n (sibilant.pretty-print name) \":\\n\" js)))\n\n undefined)\n\n(def ^meta (...body)\n (var js (output-formatter (^scoped ...body)))\n (when sibilant.debug (console.log js))\n (output-formatter (eval js)))\n\n\n(def ^concat (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n\n(def ^reverse (arr)\n (var reversed [])\n (each (item) arr (reversed.unshift item))\n reversed)\n\n(var reverse ^reverse)\n\n(def ^lambda (args-or-options ...body)\n (when sibilant.debug\n (console.log args-or-options))\n (var args (or (get args-or-options 'args) args-or-options)\n body (or (get args-or-options 'body) body)\n args (if (node? args 'expression) args.contents\n (and (node? args) (empty? body)) (do (assign body [ args ]) [])\n args)\n name (when args-or-options.name\n (chain (output-formatter (transpile args-or-options.name))\n (replace (regex \"\\\\W+\" 'g) \"$\")\n (concat \"$\")))\n rest (detect args\n (#(arg) (node? arg 'dots))))\n\n (var this-node this\n node (detect\n [ args-or-options.node this-node args-or-options.name args (first body) ]\n (#(n) (and (node? n) (get n 'file)))))\n [\"(function\" (if name (\" \" name) \"\") \"(\"\n (interleave \", \" (map args transpile)) \") {\"\n (if (or args-or-options.name node)\n (indent [\"/*\"\n (if args-or-options.name (\" \" (sibilant.pretty-print args-or-options.name false)) \"\")\n (if node (\" \" node.file \":\" node.line \":\" node.col) \"\")\n \" */\"]) \"\")\n (when (exists? rest)\n (indent (as-statement [\"var \" (transpile rest)\n \" = Array.prototype.slice.call(arguments, \"\n (- args.length 1) \")\"])))\n\n (indent (apply ^do body))\n \"})\"])\n\n(set macros \"#\" ^lambda)\n\n(def ^quoted-hash (...pairs)\n (var cached-quote-value ^hash.quote-keys)\n (set ^hash 'quote-keys true)\n (var value (^hash ...pairs))\n (set ^hash 'quote-keys cached-quote-value)\n value)\n\n(def ^hash (...pairs)\n (when (odd? pairs.length)\n (error (\"odd number of key-value pairs in hash: \"\n (call inspect pairs))))\n\n (var quote-keys ^hash.quote-keys\n pair-strings (bulk-map pairs (#(key value)\n [ (if (and quote-keys (not (node? key 'string)))\n [\"\\\"\" (transpile key) \"\\\"\"]\n (transpile key))\n \": \"\n (transpile value)])))\n (if (>= 1 pair-strings.length)\n [\"{ \" (interleave \", \" pair-strings) \" }\"]\n [\"{\" (indent (interleave \",\\n\" pair-strings)) \"}\"]))\n\n\n(def qescape (content)\n (if (not (exists? content)) \"\"\n (string? content) (chain content\n (replace (regex \"\\\"\" 'g) \"\\\\\\\"\")\n (replace (regex \"\\\\n\" 'g) \"\\\\n\\\" +\\n\\\"\"))\n content))\n\n(def log-pretty (label arg)\n (console.log (concat label \": \" (prettify arg)))\n arg)\n\n(var pretty-log log-pretty)\n\n(def ^quote (content)\n (if (string? content) (\"\\\"\" (qescape content) \"\\\"\")\n (number? content) (^quote (content.to-string))\n (node? content 'literal) [\"\\\"\" (transpile content) \"\\\"\"]\n (node? content 'expression)\n (if (length (keys (find-unquotes content)))\n (^call 'macros.expand-quote.call 'this (^quote content.node-id)\n (apply ^quoted-hash (alternating-keys-and-values (find-unquotes content))))\n [\"\\\"\" (map-node (transpile content) qescape) \"\\\"\"])\n\n (node? content 'bracket)\n (if (length (keys (find-unquotes content)))\n (^call 'macros.expand-quote.call 'this (^quote content.node-id)\n (apply ^quoted-hash (alternating-keys-and-values (find-unquotes content))))\n (^list ...(map content.contents ^quote)))\n\n (node? content 'brace)\n (if (length (keys (find-unquotes content)))\n (^call 'macros.expand-quote.call 'this (^quote content.node-id)\n (apply ^quoted-hash (alternating-keys-and-values (find-unquotes content))))\n (^hash ...(map content.contents ^quote)))\n\n (do\n (console.log (\"unknown content\" (prettify content)))\n content)))\n\n(def ^debug (val)\n (set sibilant 'debug (eval (output-formatter (transpile val)))) null)\n\n(def map-node (node fn)\n (if (node? node)\n (do\n (var mapped-node (fn node))\n (when (node? mapped-node)\n (set mapped-node 'contents (map-node mapped-node.contents fn)))\n\n mapped-node)\n\n (list? node) (map node (#(c) (map-node c fn)))\n (fn node)))\n\n(def each-node (node fn)\n (if (node? node) (when (fn node) (each-node node.contents fn))\n (list? node) (each (c) node (each-node c fn))\n (fn node)))\n\n\n(def map-node-for-quote-expansion (node expansions)\n (if (node? node)\n (do\n (var mapped-node (if (expansions.has-own-property node.node-id) (get expansions node.node-id) (clone node)))\n (when (node? mapped-node)\n (set mapped-node 'contents (map-node-for-quote-expansion mapped-node.contents expansions)))\n\n (assign mapped-node (splice-dots mapped-node))\n mapped-node)\n\n (list? node)\n (map node (#(c) (map-node-for-quote-expansion c expansions)))\n\n node))\n\n\n(def ^expand-quote (node-id expansions)\n (var expanded-nodes\n (map-node-for-quote-expansion (get sibilant.node-cache node-id) expansions))\n\n (transpile expanded-nodes))\n\n(def unquote? (node) (node? node 'at))\n\n(def find-unquotes (node)\n (var unquotes {})\n (each-node node (#(n)\n (when (unquote? n)\n (set unquotes n.node-id (transpile n)))\n (not (node? n 'tick))))\n unquotes)\n\n(def splice-dots (node)\n (when (and node (list? node.contents))\n (var contents [])\n (each (content) node.contents\n (if (and (node? content 'dots)\n (list? content.contents)\n (= content.contents.length 1)\n (list? (first content.contents)))\n (contents.push.apply contents (first content.contents))\n (contents.push content)))\n\n (set node 'contents contents))\n node)\n\n\n(def alternating-keys-and-values (hash)\n (flatten (map (keys hash)\n (#(key) [key, (get hash key)]))))\n\n\n(def ^list (...args)\n (var arg-segments [])\n (if (empty? args) \"[]\"\n (do\n (def simple-list (args)\n [\"[ \" (interleave \", \" (map args (#(arg) arg.transpiled))) \" ]\"])\n\n (args.for-each (#(arg)\n (if (node? arg 'dots) (arg-segments.push {transpiled (transpile arg)})\n (list? (last arg-segments)) (send (last arg-segments) push {transpiled (transpile arg)})\n (arg-segments.push [{transpiled (transpile arg)}]))))\n\n (assign arg-segments (map arg-segments\n (#(segment)\n (if (list? segment)\n (simple-list segment)\n segment.transpiled))))\n\n (if (= 1 (length arg-segments))\n (first arg-segments)\n [(first arg-segments) \".concat(\" (interleave \", \" (rest arg-segments))\")\"]))))\n\n\n(def ^call (fn-name ...args)\n (if (any? args (#(arg) (node? arg 'dots)))\n (macros.apply fn-name (macros.list ...args))\n [ (transpile fn-name)\n \"(\" (interleave \", \" (map args transpile)) \")\" ]))\n\n(def ^dots (...contents)\n (transpile contents))\n\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file diff --git a/lib/node.map b/lib/node.map index 56dd15c..79b4942 100644 --- a/lib/node.map +++ b/lib/node.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/node.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(var sibilant exports\n util (require 'util)\n path (require 'path)\n fs (require 'fs)\n error (#(str) (throw str))\n inspect util.inspect)\n\n(set sibilant 'dir (process.cwd))\n\n\n(def sibilant.transpile-file (file-name)\n (with-dir-and-file (path.dirname file-name) file-name\n (#>\n (var source (sibilant.strip-shebang\n (fs.read-file-sync file-name \"utf8\")))\n\n (set sibilant.source-cache file-name source)\n (sibilant.initialize)\n (transpile (restructure (parse source))))))\n\n\n(def sibilant.sourcemap-file (file-name)\n (with-dir-and-file (path.dirname file-name) file-name\n (#> (sourcemap\n (sibilant.strip-shebang\n (fs.read-file-sync file-name \"utf8\"))))))\n\n\n(set require.extensions \".sibilant\"\n (#(module filename)\n (var content (sibilant.sibilize-file filename))\n (module.*compile content filename)))\n\n(set require.extensions \".son\"\n (#(module filename)\n (var content (sibilant.sibilize-json filename))\n (set module 'exports (JSON.parse content))))\n\n\n(def sibilant.package-info ()\n (var fs (require 'fs))\n (JSON.parse (fs.read-file-sync\n (concat **dirname \"/../package.json\"))))\n\n(def sibilant.version-string ()\n (var package (sibilant.package-info)\n path (require 'path))\n (concat package.name \" version \" package.version\n \"\\n(at \" (path.join **dirname \"..\") \")\"))\n\n\n(def sibilant.initialize ()\n (unless (or sibilant.loaded? sibilant.loading?)\n (set sibilant 'loading? true)\n (sibilant.load-macros)\n (delete sibilant.loading?)\n (set sibilant 'loaded? true)))\n \n(def sibilant.load-macros ()\n (sibilant.include (path.normalize (concat **dirname \"/../include/macros\"))))\n\n\n(def sibilant.include (file)\n (when (not (file.match (regex \"\\\\.(sibilant|son)$\")))\n (assign file (concat file \".sibilant\")))\n\n (when (file.match (regex \"^\\\\.\\\\.?/\"))\n (assign file (concat sibilant.dir \"/\" file)))\n\n (var resolved-file\n (try (require.resolve file)\n (error (\"Failed to resolve file for inclusion: \" file))))\n\n (sibilant.transpile-file resolved-file))\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/node.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(var sibilant exports\n util (require 'util)\n path (require 'path)\n fs (require 'fs)\n error (#(str) (throw str))\n inspect util.inspect)\n\n(set sibilant 'dir (process.cwd))\n\n\n(def sibilant.transpile-file (file-name)\n (with-dir-and-file (path.dirname file-name) file-name\n (#>\n (var source (sibilant.strip-shebang\n (fs.read-file-sync file-name \"utf8\")))\n\n (set sibilant.source-cache file-name source)\n (sibilant.initialize)\n (transpile (restructure (parse source))))))\n\n\n(def sibilant.sourcemap-file (file-name)\n (with-dir-and-file (path.dirname file-name) file-name\n (#> (sourcemap\n (sibilant.strip-shebang\n (fs.read-file-sync file-name \"utf8\"))))))\n\n\n(set require.extensions \".sibilant\"\n (#(module filename)\n (var content (sibilant.sibilize-file filename))\n (module.*compile content filename)))\n\n(set require.extensions \".son\"\n (#(module filename)\n (var content (sibilant.sibilize-json filename))\n (set module 'exports (JSON.parse content))))\n\n\n(def sibilant.package-info ()\n (var fs (require 'fs))\n (JSON.parse (fs.read-file-sync\n (concat **dirname \"/../package.json\"))))\n\n(def sibilant.version-string ()\n (var package (sibilant.package-info)\n path (require 'path))\n (concat package.name \" version \" package.version\n \"\\n(at \" (path.join **dirname \"..\") \")\"))\n\n\n(def sibilant.initialize ()\n (unless (or sibilant.loaded? sibilant.loading?)\n (set sibilant 'loading? true)\n (sibilant.load-macros)\n (delete sibilant.loading?)\n (set sibilant 'loaded? true)))\n \n(def sibilant.load-macros ()\n (sibilant.include (path.normalize (concat **dirname \"/../include/macros\"))))\n\n\n(def sibilant.include (file)\n (when (not (file.match (regex \"\\\\.(sibilant|son)$\")))\n (assign file (concat file \".sibilant\")))\n\n (when (file.match (regex \"^\\\\.\\\\.?/\"))\n (assign file (concat sibilant.dir \"/\" file)))\n\n (var resolved-file\n (try (require.resolve file)\n (error (\"Failed to resolve file for inclusion: \" file))))\n\n (sibilant.transpile-file resolved-file))\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file diff --git a/lib/options.map b/lib/options.map index 0525a24..57a9358 100644 --- a/lib/options.map +++ b/lib/options.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/include/functional.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant","/Users/jbr/code/sibilant/src/options.sibilant"],"names":[],"mappings":"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","sourcesContent":["(def bulk-map (arr fn)\n (var index 0\n group-size fn.length\n ret-arr [])\n\n (while (< index arr.length)\n (send ret-arr push\n (apply fn (send arr slice\n index (+ index group-size))))\n (incr-by index group-size))\n ret-arr)\n\n(def inject (start items fn)\n (var value start)\n (when (list? items)\n (each (item index) items\n (assign value (fn value item index))))\n value)\n\n(def map (items fn)\n (inject [] items\n (#(collector item index)\n (send collector push (fn item index))\n collector)))\n\n(def select (items fn)\n (inject [] items\n (#(collector item index)\n (when (fn item index)\n (send collector push item))\n collector)))\n\n(def detect (items fn)\n (var return-item undefined\n index 0\n items (or items []))\n\n (until (or (= items.length index) return-item)\n (when (fn (get items index) index)\n (assign return-item (get items index)))\n (incr index))\n\n return-item)\n\n(def all? (items fn)\n (undefined? (detect items (#(item index) (not (fn item index))))))\n\n(def none? (items fn)\n (undefined? (detect items fn)))\n\n(def any? (items fn)\n (defined? (detect items fn)))\n\n(def reject (items fn)\n (var args [ items fn ])\n (select items (thunk (not (apply fn arguments)))))\n\n(def compact (arr)\n (select arr (#(item)\n (and\n (!= null item)\n (!= false item)\n (defined? item)))))\n\n(def interleave (glue arr)\n (if (list? glue) (inject [] arr\n (#(collector item index)\n (collector.concat [item (get glue index)])))\n\n \n (inject [(first arr)] (rest arr)\n (#(collector item index) (collector.concat [glue item])))))\n\n\n(def flatten (...items)\n (inject [] items\n (#(collector item)\n (collector.concat\n (if (list? item)\n (apply flatten item)\n item)))))\n\n\n(def recurse-map (item fn)\n (if (list? item) (map item (#(subitem) (recurse-map subitem fn)))\n (fn item)))\n\n(def pluck (items attribute)\n (map items (#(item) (get item attribute))))\n\n(def merge-into (into from)\n (each (key) (keys from) (set into key (get from key)))\n into)\n\n(def clone (object)\n (inject {} (keys object)\n (#(collector key)\n (set collector key (get object key))\n collector)))\n\n(def map-values (object fn)\n (inject {} (keys object)\n (#(collector key index)\n (set collector key (fn (get object key) key))\n collector)))\n\n(def merge-with (into from)\n (merge-into (clone into) from))\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)","(include \"../include/functional\")\n\n(def extract-options (config args)\n (var args (or args (process.argv.slice 2))\n default-label 'unlabeled\n current-label default-label\n after-break false\n config (or config {})\n unlabeled [])\n\n (def label? (item) (and (string? item) (send /^-/ test item)))\n\n (def synonym-lookup (item)\n (var config-entry (get config item))\n (if (string? config-entry)\n (synonym-lookup config-entry)\n item))\n\n (def takes-args? (item)\n (!= false (get config (label-for item))))\n\n (assign default-label (synonym-lookup default-label)\n current-label default-label)\n\n (def label-for (item)\n (synonym-lookup (item.replace /^-+/ \"\")))\n\n (def add-value (hash key value)\n (var current-value (get hash key))\n (when (undefined? current-value)\n (assign current-value [])\n (set hash key current-value))\n (when (!= true value)\n (current-value.push value)))\n\n (def reset-label ()\n (assign current-label default-label))\n\n (inject {} args\n (lambda (return-hash item index)\n (if (= \"--\" item) (assign after-break true)\n (if after-break\n (add-value return-hash 'after-break item)\n (if (label? item)\n (do\n (assign current-label (label-for item))\n (add-value return-hash current-label true)\n (when (not (takes-args? item)) (reset-label)))\n (do\n (add-value return-hash current-label item)\n (reset-label)))))\n return-hash)))\n\n(def process-options (config)\n (var options (extract-options config))\n (when config\n (def handle-pair (key value)\n (var handle (get config key))\n (when (string? handle) (handle-pair handle value))\n (when (function? handle) (handle value options)))\n (each (key) (keys options) (handle-pair key (get options key))))\n\n options)\n\n(set module 'exports process-options)\n"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/include/functional.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant","/Users/jbr/code/sibilant/src/options.sibilant"],"names":[],"mappings":"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","sourcesContent":["(def bulk-map (arr fn)\n (var index 0\n group-size fn.length\n ret-arr [])\n\n (while (< index arr.length)\n (send ret-arr push\n (apply fn (send arr slice\n index (+ index group-size))))\n (incr-by index group-size))\n ret-arr)\n\n(def inject (start items fn)\n (var value start)\n (when (list? items)\n (each (item index) items\n (assign value (fn value item index))))\n value)\n\n(def map (items fn)\n (inject [] items\n (#(collector item index)\n (send collector push (fn item index))\n collector)))\n\n(def select (items fn)\n (inject [] items\n (#(collector item index)\n (when (fn item index)\n (send collector push item))\n collector)))\n\n(def detect (items fn)\n (var return-item undefined\n index 0\n items (or items []))\n\n (until (or (= items.length index) return-item)\n (when (fn (get items index) index)\n (assign return-item (get items index)))\n (incr index))\n\n return-item)\n\n(def all? (items fn)\n (undefined? (detect items (#(item index) (not (fn item index))))))\n\n(def none? (items fn)\n (undefined? (detect items fn)))\n\n(def any? (items fn)\n (defined? (detect items fn)))\n\n(def reject (items fn)\n (var args [ items fn ])\n (select items (thunk (not (apply fn arguments)))))\n\n(def compact (arr)\n (select arr (#(item)\n (and\n (!= null item)\n (!= false item)\n (defined? item)))))\n\n(def interleave (glue arr)\n (if (list? glue) (inject [] arr\n (#(collector item index)\n (collector.concat [item (get glue index)])))\n\n \n (inject [(first arr)] (rest arr)\n (#(collector item index) (collector.concat [glue item])))))\n\n\n(def flatten (...items)\n (inject [] items\n (#(collector item)\n (collector.concat\n (if (list? item)\n (apply flatten item)\n item)))))\n\n\n(def recurse-map (item fn)\n (if (list? item) (map item (#(subitem) (recurse-map subitem fn)))\n (fn item)))\n\n(def pluck (items attribute)\n (map items (#(item) (get item attribute))))\n\n(def merge-into (into from)\n (each (key) (keys from) (set into key (get from key)))\n into)\n\n(def clone (object)\n (inject {} (keys object)\n (#(collector key)\n (set collector key (get object key))\n collector)))\n\n(def map-values (object fn)\n (inject {} (keys object)\n (#(collector key index)\n (set collector key (fn (get object key) key))\n collector)))\n\n(def merge-with (into from)\n (merge-into (clone into) from))\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)","(include \"../include/functional\")\n\n(def extract-options (config args)\n (var args (or args (process.argv.slice 2))\n default-label 'unlabeled\n current-label default-label\n after-break false\n config (or config {})\n unlabeled [])\n\n (def label? (item) (and (string? item) (send /^-/ test item)))\n\n (def synonym-lookup (item)\n (var config-entry (get config item))\n (if (string? config-entry)\n (synonym-lookup config-entry)\n item))\n\n (def takes-args? (item)\n (!= false (get config (label-for item))))\n\n (assign default-label (synonym-lookup default-label)\n current-label default-label)\n\n (def label-for (item)\n (synonym-lookup (item.replace /^-+/ \"\")))\n\n (def add-value (hash key value)\n (var current-value (get hash key))\n (when (undefined? current-value)\n (assign current-value [])\n (set hash key current-value))\n (when (!= true value)\n (current-value.push value)))\n\n (def reset-label ()\n (assign current-label default-label))\n\n (inject {} args\n (lambda (return-hash item index)\n (if (= \"--\" item) (assign after-break true)\n (if after-break\n (add-value return-hash 'after-break item)\n (if (label? item)\n (do\n (assign current-label (label-for item))\n (add-value return-hash current-label true)\n (when (not (takes-args? item)) (reset-label)))\n (do\n (add-value return-hash current-label item)\n (reset-label)))))\n return-hash)))\n\n(def process-options (config)\n (var options (extract-options config))\n (when config\n (def handle-pair (key value)\n (var handle (get config key))\n (when (string? handle) (handle-pair handle value))\n (when (function? handle) (handle value options)))\n (each (key) (keys options) (handle-pair key (get options key))))\n\n options)\n\n(set module 'exports process-options)\n"]} \ No newline at end of file diff --git a/lib/output-formatter.map b/lib/output-formatter.map index 9296a84..87c2a88 100644 --- a/lib/output-formatter.map +++ b/lib/output-formatter.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/output-formatter.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"AAAA,IAAK,eAAL,8BAAuB,IAAvB;AAAA;AAAA;AAAA,SACK;AAAA,QAAI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAAJ;AAAA,MC+UuC,OD/UtB,CAAU,GAAD,CAAK,IAAL,EAAU,eAAV,CAAT,OAAM,EAAN,CC+UsB,CD/UvC;AAAA,eACI,CAAM,WAAD,CAAO,IAAP,CAAL,IAAkB,CAAG,SAAH,KAAa,CAAC,MAAD,CAAb,CAAlB,CADJ;AAAA,MC+UuC,OD7UhC,eAAD,CAAkB,aAAlB,CC6UiC,CD/UvC;AAAA,eAGI,CAAI,OAAS,IAAT,cAAJ,IAAmB,CCkJe,ODlJN,IAAT,KCkJ+B,CAAC,MAAD,CDlJ/B,CAAnB,CAHJ;AAAA,MC+UuC,OD5UA,IC4UA,CD/UvC;AAAA,eAII,EAAK,CC0XD,CA3O+B,OD/IrB,IC0XV,KA3O+C,CAAC,SAAD,CA2O/C,CD1XC,IC0XiB,CD1XR,IC0XQ,KAAW,IAAX,CD1XjB,CAAL,CAJJ;AAAA,MC+UuC,OD3Ud,EC2Uc,CD/UvC;AAAA,eAKK,WAAD,CAAO,IAAP,CALJ;AAAA,MAMmB,WAAD,CAAa,uBAAb,CCyUqB;AAAA,aDxUpB,eAAD,CAAmB,SAAD,CAAW,IAAX,CAAlB,CCwUqB,CD/UvC;AAAA;AAAA,MADL;AAAA,G;AAUA,CAAK,QAAL,EAAc,CAAC,eAAD,CAAd,IAAgC,eAAhC","sourcesContent":["(def output-formatter (node)\n (if (list? node) (join \"\" (map node output-formatter))\n (and (node? node) (= node.type 'output))\n (output-formatter node.contents)\n (or (string? node) (number? node)) node\n (not (exists? node)) \"\"\n (node? node) (do\n (console.log \"WE SHOULD NOT BE HERE\")\n (output-formatter (transpile node)))))\n\n(set sibilant 'output-formatter output-formatter)","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/output-formatter.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"AAAA,IAAK,eAAL,8BAAuB,IAAvB;AAAA;AAAA;AAAA,SACK;AAAA,QAAI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAAJ;AAAA,MC+VuC,OD/VtB,CAAU,GAAD,CAAK,IAAL,EAAU,eAAV,CAAT,OAAM,EAAN,CC+VsB,CD/VvC;AAAA,eACI,CAAM,WAAD,CAAO,IAAP,CAAL,IAAkB,CAAG,SAAH,KAAa,CAAC,MAAD,CAAb,CAAlB,CADJ;AAAA,MC+VuC,OD7VhC,eAAD,CAAkB,aAAlB,CC6ViC,CD/VvC;AAAA,eAGI,CAAI,OAAS,IAAT,cAAJ,IAAmB,CC+Ie,OD/IN,IAAT,KC+I+B,CAAC,MAAD,CD/I/B,CAAnB,CAHJ;AAAA,MC+VuC,OD5VA,IC4VA,CD/VvC;AAAA,eAII,EAAK,CC2YD,CA/P+B,OD5IrB,IC2YV,KA/P+C,CAAC,SAAD,CA+P/C,CD3YC,IC2YiB,CD3YR,IC2YQ,KAAW,IAAX,CD3YjB,CAAL,CAJJ;AAAA,MC+VuC,OD3Vd,EC2Vc,CD/VvC;AAAA,eAKK,WAAD,CAAO,IAAP,CALJ;AAAA,MAMmB,WAAD,CAAa,uBAAb,CCyVqB;AAAA,aDxVpB,eAAD,CAAmB,SAAD,CAAW,IAAX,CAAlB,CCwVqB,CD/VvC;AAAA;AAAA,MADL;AAAA,G;AAUA,CAAK,QAAL,EAAc,CAAC,eAAD,CAAd,IAAgC,eAAhC","sourcesContent":["(def output-formatter (node)\n (if (list? node) (join \"\" (map node output-formatter))\n (and (node? node) (= node.type 'output))\n (output-formatter node.contents)\n (or (string? node) (number? node)) node\n (not (exists? node)) \"\"\n (node? node) (do\n (console.log \"WE SHOULD NOT BE HERE\")\n (output-formatter (transpile node)))))\n\n(set sibilant 'output-formatter output-formatter)","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file diff --git a/lib/parser.js b/lib/parser.js index 1a06cef..f4c45ec 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -11,6 +11,7 @@ var parser = { }; "tick": "[`']", "hat": "(\\^)", "dots": "(\\.+)", + "argPlaceholder": "(#[0-9]+)", "otherChar": "([#><=!\\+\\/\\*-]+)", "openExpression": "(\\(|\\{|\\[)", "closeExpression": "(\\)|\\}|\\])", @@ -18,9 +19,9 @@ var parser = { }; "whitespace": "\\s", "ignored": "." }; -(parser)["tokenPrecedence"] = [ "regex", "comment", "string", "number", "dots", "tick", "hat", "at", "special", "literal", "otherChar", "openExpression", "closeExpression", "newline", "whitespace", "ignored" ]; +(parser)["tokenPrecedence"] = [ "regex", "comment", "string", "number", "dots", "tick", "hat", "at", "special", "literal", "argPlaceholder", "otherChar", "openExpression", "closeExpression", "newline", "whitespace", "ignored" ]; (parser)["orderedRegexes"] = parser.tokenPrecedence.map((function(x) { - /* /Users/jbr/code/sibilant/src/parser.sibilant:39:23 */ + /* /Users/jbr/code/sibilant/src/parser.sibilant:41:23 */ var r = (new RegExp(("^" + (parser.tokens)[x]), undefined)); (r)["name"] = x; @@ -29,12 +30,12 @@ var parser = { }; var orderedRegexes = parser.orderedRegexes; (sibilant)["nodeCache"] = (sibilant.nodeCache || { }); var nodeId = (function nodeId$(node) { - /* node-id /Users/jbr/code/sibilant/src/parser.sibilant:48:0 */ + /* node-id /Users/jbr/code/sibilant/src/parser.sibilant:49:0 */ return ((nodeId.lastId)++); }); var cacheNode = (function cacheNode$(node) { - /* cache-node /Users/jbr/code/sibilant/src/parser.sibilant:50:0 */ + /* cache-node /Users/jbr/code/sibilant/src/parser.sibilant:51:0 */ var id = nodeId(node); (sibilant.nodeCache)[id] = node; @@ -42,22 +43,16 @@ var cacheNode = (function cacheNode$(node) { }); (nodeId)["lastId"] = 0; parser.parse = (function parser$parse$(string, context) { - /* parser.parse /Users/jbr/code/sibilant/src/parser.sibilant:57:1 */ + /* parser.parse /Users/jbr/code/sibilant/src/parser.sibilant:58:0 */ - var context = (function() { - if (context) { - return context; - } else { - return { - position: 0, - stack: [], - line: 1, - lastNewline: 0, - col: 0 - }; - } - })(); - var match = true, + var context = (context || { + position: 0, + stack: [], + line: 1, + lastNewline: 0, + col: 0 + }), + match = true, regexName = null, remainingInput = string; (function() { @@ -65,7 +60,7 @@ parser.parse = (function parser$parse$(string, context) { while (match) { $_symbol25_$ = (function() { detect(orderedRegexes, (function(r) { - /* /Users/jbr/code/sibilant/src/parser.sibilant:69:20 */ + /* /Users/jbr/code/sibilant/src/parser.sibilant:70:20 */ match = r.exec(remainingInput); regexName = r.name; diff --git a/lib/parser.map b/lib/parser.map index 977a114..15b099b 100644 --- a/lib/parser.map +++ b/lib/parser.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/parser.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(var parser {})\n(set sibilant 'parser parser)\n(set parser 'tokens\n { 'regex \"(\\\\/(\\\\\\\\\\\\\\/|[^\\\\/\\\\n])+\\\\/[glim]*)\"\n 'comment \"(;.*)\"\n 'string \"(\\\"(([^\\\"]|(\\\\\\\\\\\"))*[^\\\\\\\\])?\\\")\"\n 'number \"(-?[0-9][0-9.,]*)\"\n 'literal \"(-?[*.$a-zA-Z_][*.a-zA-Z0-9-_]*(\\\\?|!)?)\"\n 'special \"([&'])\"\n 'at \"@\"\n 'tick \"[`']\"\n 'hat \"(\\\\^)\"\n 'dots \"(\\\\.+)\"\n 'other-char \"([#><=!\\\\+\\\\/\\\\*-]+)\"\n 'open-expression \"(\\\\(|\\\\{|\\\\[)\"\n 'close-expression \"(\\\\)|\\\\}|\\\\])\"\n 'newline \"\\\\n\"\n 'whitespace \"\\\\s\"\n 'ignored \".\" })\n\n(set parser 'token-precedence [ 'regex\n 'comment\n 'string\n 'number\n 'dots\n 'tick\n 'hat\n 'at\n 'special\n 'literal\n 'other-char\n 'open-expression\n 'close-expression\n 'newline\n 'whitespace\n 'ignored\n ]\n 'ordered-regexes (parser.token-precedence.map\n (#(x)\n (var r (regex (\"^\" (get parser.tokens x))))\n (set r 'name x)\n r)))\n\n\n(var ordered-regexes parser.ordered-regexes)\n\n(set sibilant 'node-cache (or sibilant.node-cache {}))\n(def node-id (node)\n (incr node-id.last-id))\n(def cache-node (node)\n (var id (node-id node))\n (set sibilant.node-cache id node)\n (merge-into node {node-id id}))\n\n(set node-id 'last-id 0)\n\n (def parser.parse (string context)\n (var context (if context context { position 0\n stack []\n line 1\n last-newline 0 col 0}))\n\n (var match true\n regex-name null\n remaining-input string)\n\n (while match\n (detect ordered-regexes\n (#(r)\n (assign match (r.exec remaining-input)\n regex-name r.name)\n match))\n\n (when (exists? match)\n (var match-string (first match)\n length (length match-string))\n \n (context.stack.push\n (cache-node { contents []\n dir sibilant.dir\n file sibilant.file\n token match-string\n type regex-name\n start context.position\n line context.line\n col context.col\n length length }))\n\n (if\n (= 'newline regex-name)\n (do\n (incr context.line)\n (set context\n 'col 0\n 'last-newline context.position))\n\n\n (and (= 'string regex-name) (!= -1 (match-string.index-of \"\\n\")))\n (do\n (var string-newline-count (- (length (match-string.split \"\\n\")) 1))\n (incr-by context.line string-newline-count)\n (set context 'col (- length (match-string.last-index-of \"\\n\"))))\n\n (incr-by context.col length))\n\n (incr-by context.position length)\n (assign remaining-input (if remaining-input.length\n (remaining-input.slice length)\n \"\"))))\n context.stack)\n\n(var parse parser.parse)\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/parser.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(var parser {})\n(set sibilant 'parser parser)\n(set parser 'tokens\n { 'regex \"(\\\\/(\\\\\\\\\\\\\\/|[^\\\\/\\\\n])+\\\\/[glim]*)\"\n 'comment \"(;.*)\"\n 'string \"(\\\"(([^\\\"]|(\\\\\\\\\\\"))*[^\\\\\\\\])?\\\")\"\n 'number \"(-?[0-9][0-9.,]*)\"\n 'literal \"(-?[*.$a-zA-Z_][*.a-zA-Z0-9-_]*(\\\\?|!)?)\"\n 'special \"([&'])\"\n 'at \"@\"\n 'tick \"[`']\"\n 'hat \"(\\\\^)\"\n 'dots \"(\\\\.+)\"\n 'arg-placeholder \"(#[0-9]+)\"\n 'other-char \"([#><=!\\\\+\\\\/\\\\*-]+)\"\n 'open-expression \"(\\\\(|\\\\{|\\\\[)\"\n 'close-expression \"(\\\\)|\\\\}|\\\\])\"\n 'newline \"\\\\n\"\n 'whitespace \"\\\\s\"\n 'ignored \".\" })\n\n(set parser 'token-precedence [ 'regex\n 'comment\n 'string\n 'number\n 'dots\n 'tick\n 'hat\n 'at\n 'special\n 'literal\n 'arg-placeholder\n 'other-char\n 'open-expression\n 'close-expression\n 'newline\n 'whitespace\n 'ignored\n ]\n 'ordered-regexes (parser.token-precedence.map\n (#(x)\n (var r (regex (\"^\" (get parser.tokens x))))\n (set r 'name x)\n r)))\n\n(var ordered-regexes parser.ordered-regexes)\n\n(set sibilant 'node-cache (or sibilant.node-cache {}))\n(def node-id (node)\n (incr node-id.last-id))\n(def cache-node (node)\n (var id (node-id node))\n (set sibilant.node-cache id node)\n (merge-into node {node-id id}))\n\n(set node-id 'last-id 0)\n\n(def parser.parse (string context)\n (var context (or context\n { position 0\n stack []\n line 1\n last-newline 0 col 0})\n match true\n regex-name null\n remaining-input string)\n\n (while match\n (detect ordered-regexes\n (#(r)\n (assign match (r.exec remaining-input)\n regex-name r.name)\n match))\n\n (when (exists? match)\n (var match-string (first match)\n length (length match-string))\n \n (context.stack.push\n (cache-node { contents []\n dir sibilant.dir\n file sibilant.file\n token match-string\n type regex-name\n start context.position\n line context.line\n col context.col\n length length }))\n\n (if\n (= 'newline regex-name)\n (do\n (incr context.line)\n (set context\n 'col 0\n 'last-newline context.position))\n\n (and (= 'string regex-name)\n (includes? match-string \"\\n\"))\n (do\n (var string-newline-count (- (length (match-string.split \"\\n\")) 1))\n (incr-by context.line string-newline-count)\n (set context 'col (- length (match-string.last-index-of \"\\n\"))))\n\n (incr-by context.col length))\n\n (incr-by context.position length)\n (assign remaining-input (if remaining-input.length\n (remaining-input.slice length)\n \"\"))))\n context.stack)\n\n(var parse parser.parse)\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file diff --git a/lib/pretty-printer.map b/lib/pretty-printer.map index f92fd3d..01a92f0 100644 --- a/lib/pretty-printer.map +++ b/lib/pretty-printer.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/colors.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant","/Users/jbr/code/sibilant/src/pretty-printer.sibilant"],"names":[],"mappings":"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","sourcesContent":["(def log! (...args)\n (send (inspect! ..args ) for-each (#(o) (console.log o))))\n\n(def inspect! (...args)\n (args.map (#(arg) (util.inspect arg { colors false depth 3}))))\n\n(def color (code items depth)\n (concat code (join \"\" items) \"\\033[0m\"))\n\n(def black (...args) (color \"\\033[0;30m\" args))\n(def red (...args) (color \"\\033[0;31m\" args))\n(def green (...args) (color \"\\033[0;32m\" args))\n(def brown (...args) (color \"\\033[0;33m\" args))\n(def blue (...args) (color \"\\033[0;34m\" args))\n(def purple (...args) (color \"\\033[0;35m\" args))\n(def cyan (...args) (color \"\\033[0;36m\" args))\n(def gray (...args) (color \"\\033[0;37m\" args))\n(def bold-gray (...args) (color \"\\033[1;30m\" args))\n(def bold-red (...args) (color \"\\033[1;31m\" args))\n(def bold-green (...args) (color \"\\033[1;32m\" args))\n(def yellow (...args) (color \"\\033[1;33m\" args))\n(def bold-blue (...args) (color \"\\033[1;34m\" args))\n(def bold-purple (...args) (color \"\\033[1;35m\" args))\n(def bold-cyan (...args) (color \"\\033[1;36m\" args))\n(def white (...args) (color \"\\033[1;37m\" args))\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)","(include \"./colors.sibilant\")\n\n(def sibilant.pretty-print (node color)\n (when (undefined? color) (assign color true))\n\n (real-newlines (if (node? node) (do\n (var pretty-printer (or (get sibilant.pretty-print node.type)\n sibilant.pretty-print.default))\n (pretty-printer node color))\n (list? node)\n (concat (if color (black \"[\") \"\")\n (join (if color (black \",\") \"\") (map node prettify))\n (if color (black \"]\") \"\"))\n\n color (red (util.inspect node))\n (real-newlines (util.inspect node)))))\n\n\n(def sibilant.pretty-print.default (node color)\n (real-newlines (sibilant.pretty-print.colorize node color\n (concat\n (if (and node.modifiers node.modifiers.length)\n (join \"\" (map node.modifiers (#(n) (sibilant.pretty-print n color)))) \"\")\n node.token\n (if (and node.contents node.contents.length)\n (join \" \" (map node.contents (#(n) (sibilant.pretty-print n color)))) \"\")\n (or (get acceptable-pairs node.token) \"\")))))\n\n(def sibilant.pretty-print.root (node color)\n (join \"\\n\" (map node.contents (#(n) (sibilant.pretty-print n color)))))\n\n(def sibilant.pretty-print.output (node color)\n (concat (if color (black \"{\") \"\")\n (if (list? node.contents)\n (join (if color (black \",\") \"\")\n (map node.contents (#(c) (sibilant.pretty-print.colorize node color (prettify c)))))\n (sibilant.pretty-print.colorize node color node.contents))\n (if color (black \"}\") \"\")))\n\n(def real-newlines (node)\n (chain node (split \"\\\\n\") (join \"\\n\")))\n\n\n(def sibilant.pretty-print.colorize (node color string)\n (if (not color) string\n (= node.hint 'macro) (yellow string)\n (= node.type 'output) (purple string)\n (green string)))\n\n(var prettify sibilant.pretty-print)"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/colors.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant","/Users/jbr/code/sibilant/src/pretty-printer.sibilant"],"names":[],"mappings":"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","sourcesContent":["(def log! (...args)\n (send (inspect! ..args ) for-each (#(o) (console.log o))))\n\n(def inspect! (...args)\n (args.map (#(arg) (util.inspect arg { colors false depth 3}))))\n\n(def color (code items depth)\n (concat code (join \"\" items) \"\\033[0m\"))\n\n(def black (...args) (color \"\\033[0;30m\" args))\n(def red (...args) (color \"\\033[0;31m\" args))\n(def green (...args) (color \"\\033[0;32m\" args))\n(def brown (...args) (color \"\\033[0;33m\" args))\n(def blue (...args) (color \"\\033[0;34m\" args))\n(def purple (...args) (color \"\\033[0;35m\" args))\n(def cyan (...args) (color \"\\033[0;36m\" args))\n(def gray (...args) (color \"\\033[0;37m\" args))\n(def bold-gray (...args) (color \"\\033[1;30m\" args))\n(def bold-red (...args) (color \"\\033[1;31m\" args))\n(def bold-green (...args) (color \"\\033[1;32m\" args))\n(def yellow (...args) (color \"\\033[1;33m\" args))\n(def bold-blue (...args) (color \"\\033[1;34m\" args))\n(def bold-purple (...args) (color \"\\033[1;35m\" args))\n(def bold-cyan (...args) (color \"\\033[1;36m\" args))\n(def white (...args) (color \"\\033[1;37m\" args))\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)","(include \"./colors.sibilant\")\n\n(def sibilant.pretty-print (node color)\n (when (undefined? color) (assign color true))\n\n (real-newlines (if (node? node) (do\n (var pretty-printer (or (get sibilant.pretty-print node.type)\n sibilant.pretty-print.default))\n (pretty-printer node color))\n (list? node)\n (concat (if color (black \"[\") \"\")\n (join (if color (black \",\") \"\") (map node prettify))\n (if color (black \"]\") \"\"))\n\n color (red (util.inspect node))\n (real-newlines (util.inspect node)))))\n\n\n(def sibilant.pretty-print.default (node color)\n (real-newlines (sibilant.pretty-print.colorize node color\n (concat\n (if (and node.modifiers node.modifiers.length)\n (join \"\" (map node.modifiers (#(n) (sibilant.pretty-print n color)))) \"\")\n node.token\n (if (and node.contents node.contents.length)\n (join \" \" (map node.contents (#(n) (sibilant.pretty-print n color)))) \"\")\n (or (get acceptable-pairs node.token) \"\")))))\n\n(def sibilant.pretty-print.root (node color)\n (join \"\\n\" (map node.contents (#(n) (sibilant.pretty-print n color)))))\n\n(def sibilant.pretty-print.output (node color)\n (concat (if color (black \"{\") \"\")\n (if (list? node.contents)\n (join (if color (black \",\") \"\")\n (map node.contents (#(c) (sibilant.pretty-print.colorize node color (prettify c)))))\n (sibilant.pretty-print.colorize node color node.contents))\n (if color (black \"}\") \"\")))\n\n(def real-newlines (node)\n (chain node (split \"\\\\n\") (join \"\\n\")))\n\n\n(def sibilant.pretty-print.colorize (node color string)\n (if (not color) string\n (= node.hint 'macro) (yellow string)\n (= node.type 'output) (purple string)\n (green string)))\n\n(var prettify sibilant.pretty-print)"]} \ No newline at end of file diff --git a/lib/repl.js b/lib/repl.js index 9aad1bb..512a366 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -1,3 +1,6 @@ +require("source-map-support").install(); +//# sourceMappingURL=./repl.map +; var input = process.openStdin(), output = process.stdout, vm = require("vm"), @@ -7,7 +10,7 @@ var input = process.openStdin(), cmdBuffer = "", util = require("util"); var createContext = (function createContext$() { - /* create-context /Users/jbr/code/sibilant/src/repl.sibilant:10:0 */ + /* create-context /Users/jbr/code/sibilant/src/repl.sibilant:13:0 */ var context = vm.createContext(); (module)["filename"] = (process.cwd() + "/exec"); @@ -23,7 +26,7 @@ var createContext = (function createContext$() { }); context = createContext(); var displayPrompt = (function displayPrompt$() { - /* display-prompt /Users/jbr/code/sibilant/src/repl.sibilant:21:0 */ + /* display-prompt /Users/jbr/code/sibilant/src/repl.sibilant:24:0 */ readline.setPrompt(((function() { if ((cmdBuffer.length > 10)) { @@ -41,7 +44,7 @@ var displayPrompt = (function displayPrompt$() { return readline.prompt(); }); var handleLine = (function handleLine$(cmd) { - /* handle-line /Users/jbr/code/sibilant/src/repl.sibilant:29:0 */ + /* handle-line /Users/jbr/code/sibilant/src/repl.sibilant:32:0 */ var jsLine = ""; (function() { diff --git a/lib/repl.map b/lib/repl.map index e810ff9..59b2aa8 100644 --- a/lib/repl.map +++ b/lib/repl.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/repl.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(var input (process.open-stdin)\n output process.stdout\n vm (require 'vm)\n readline (send (require 'readline) create-interface input output)\n sibilant (require \"./sibilant\")\n context undefined\n cmd-buffer \"\"\n util (require 'util))\n\n(def create-context ()\n (var context (vm.create-context))\n (set module 'filename (concat (process.cwd) \"/exec\"))\n (set context\n 'module module\n 'require require)\n (each-key key global (set context key (get global key)))\n context)\n\n(assign context (create-context))\n\n(def display-prompt ()\n (readline.set-prompt\n (concat (if (> cmd-buffer.length 10)\n (\"...\" (cmd-buffer.slice -10))\n (if (> cmd-buffer.length 0) cmd-buffer \"sibilant\"))\n \"> \"))\n (readline.prompt))\n\n(def handle-line (cmd)\n (var js-line \"\")\n\n (try\n (do\n (assign cmd-buffer (concat cmd-buffer cmd)\n js-line (sibilant.sibilize cmd-buffer))\n\n (var safe-js (if (= (first js-line) \"{\") (sibilant.macros.scoped js-line) js-line))\n (console.log safe-js)\n (var result (vm.run-in-context safe-js context \"sibilant-repl\"))\n (set readline.history 0 cmd-buffer)\n (when (defined? result)\n (output.write (\"result: \"\n (util.inspect result) \"\\n\")))\n (set context \"_\" result)\n (assign cmd-buffer \"\"))\n (do\n (if (e.message.match /unexpected EOF/)\n (do\n (assign cmd-buffer (concat cmd-buffer \" \"))\n (readline.history.shift))\n (do\n (set readline.history 0 cmd-buffer)\n (output.write (concat e.stack \"\\n\"))\n (assign cmd-buffer \"\")))))\n (display-prompt))\n\n(readline.on 'line handle-line)\n\n(readline.on 'close input.destroy)\n\n(display-prompt)\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/repl.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(send (require \"source-map-support\") install)\n(meta \"//# sourceMappingURL=./repl.map\\n\")\n\n(var input (process.open-stdin)\n output process.stdout\n vm (require 'vm)\n readline (send (require 'readline) create-interface input output)\n sibilant (require \"./sibilant\")\n context undefined\n cmd-buffer \"\"\n util (require 'util))\n\n(def create-context ()\n (var context (vm.create-context))\n (set module 'filename (concat (process.cwd) \"/exec\"))\n (set context\n 'module module\n 'require require)\n (each-key key global (set context key (get global key)))\n context)\n\n(assign context (create-context))\n\n(def display-prompt ()\n (readline.set-prompt\n (concat (if (> cmd-buffer.length 10)\n (\"...\" (cmd-buffer.slice -10))\n (if (> cmd-buffer.length 0) cmd-buffer \"sibilant\"))\n \"> \"))\n (readline.prompt))\n\n(def handle-line (cmd)\n (var js-line \"\")\n\n (try\n (do\n (assign cmd-buffer (concat cmd-buffer cmd)\n js-line (sibilant.sibilize cmd-buffer))\n\n (var safe-js (if (= (first js-line) \"{\") (sibilant.macros.scoped js-line) js-line))\n (console.log safe-js)\n (var result (vm.run-in-context safe-js context \"sibilant-repl\"))\n (set readline.history 0 cmd-buffer)\n (when (defined? result)\n (output.write (\"result: \"\n (util.inspect result) \"\\n\")))\n (set context \"_\" result)\n (assign cmd-buffer \"\"))\n (do\n (if (e.message.match /unexpected EOF/)\n (do\n (assign cmd-buffer (concat cmd-buffer \" \"))\n (readline.history.shift))\n (do\n (set readline.history 0 cmd-buffer)\n (output.write (concat e.stack \"\\n\"))\n (assign cmd-buffer \"\")))))\n (display-prompt))\n\n(readline.on 'line handle-line)\n\n(readline.on 'close input.destroy)\n\n(display-prompt)\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file diff --git a/lib/require-and-include.map b/lib/require-and-include.map index f9477d0..f51d499 100644 --- a/lib/require-and-include.map +++ b/lib/require-and-include.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/require-and-include.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"AAAA,IAAK,QAAL,uBAAe,KAAf;AAAA;AAAA;AAAA,EACM,mBAAD,EADL;AAAA,SAEM,eAAD,CAAmB,SAAD,CAAY,WAAD,CAAc,KAAD,CAAO,KAAP,CAAb,CAAX,CAAlB,CAFL;AAAA,G;AAIA,IAAK,SAAL,wBAAgB,KAAhB;AAAA;AAAA;AAAA,EACM,mBAAD,EADL;AAAA,SAEM,YAAD,CAAe,SAAD,CAAY,WAAD,CAAc,KAAD,CAAO,KAAP,CAAb,CAAX,CAAd,CAFL;AAAA,G;AAIA,CAAK,QAAL,EAAc,CAAC,QAAD,CAAd,IAAwB,QAAxB,C;AAEK,gBAAL;AAAA;AAAA;AAAA,SACK,CAAM,oBAAD,EAAL,EAA6B,CAAC,OAAD,CAA7B,CADL;AAAA,G;AAGK,qBAAL,oCAA6B,IAA7B;AAAA;AAAA;AAAA,SACM,YAAD,CAAc,KCkGN,MAHI,CD/FS,UC+FT,E,SAAA,CD/FE,CAAd,EAAiC,IAAjC,CADL;AAAA,G;AAGA,CAAK,QAAL,EAAc,CAAC,IAAD,CAAd,IAAoB,CAAC,aAAD,CAApB,C;AAEA,IAAK,cAAL,6BAAwB,GAAxB,EAA4B,IAA5B,EAAiC,EAAjC;AAAA;AAAA;AAAA,EACK,IAAK,MAAL,GAAY;AAAA,IAAE,GAAF,EAAM,YAAN;AAAA,IACE,IADF,EACO,aADP;AAAA,GAAZ,CADL;AAAA,EAGK,CAAK,QAAL,EACK,CAAC,GAAD,CADL,IACW,GADX;AAAA,GAAK,QAAL,EAEK,CAAC,IAAD,CAFL,IAEW,IAFX,CAHL;AAAA,EAOK,IAAK,MAAL,GAAa,EAAD,EAAZ,CAPL;AAAA,EASK,CAAK,QAAL,EACK,CAAC,GAAD,CADL,IACW,UADX;AAAA,GAAK,QAAL,EAEK,CAAC,IAAD,CAFL,IAEW,WAFX,CATL;AAAA,SAaK,MAbL;AAAA,G;AAeA,CAAK,QAAL,EAAc,CAAC,WAAD,CAAd,IAA4B,IAA5B,C;AAEK,qBAAL,oCAA6B,QAA7B;AAAA;AAAA;AAAA,SACM,eAAD,CAAmB,sBAAD,CAAyB,QAAzB,CAAlB,CADL;AAAA,G;AAGK,qBAAL,oCAA6B,QAA7B;AAAA;AAAA;AAAA,EACM,mBAAD,EADL;AAAA,EAEK,IAAK,MAAL,GAAY,8BAAZ,CAFL;AAAA,EAGK,CAAK,oBAAL,EAA0B,CAAC,SAAD,CAA1B,IAAsC,IAAtC,CAHL;AAAA,EAIK,IAAK,OAAL,GAAc,qBAAD,CAAwB,QAAxB,CAAb,CAJL;AAAA,EAKK,CAAK,oBAAL,EAA0B,CAAC,SAAD,CAA1B,IAAsC,MAAtC,CALL;AAAA,SAMK,OANL;AAAA,G;AAQK,uBAAL,sCAA8B,IAA9B;AAAA;AAAA;AAAA,SACM,gBAAD,CAAmB,IAAD,CAAO,eAAD,CAAmB,SAAD,CAAW,IAAX,CAAlB,CAAN,CAAlB,CADL;AAAA","sourcesContent":["(def sibilize (input)\n (sibilant.initialize)\n (output-formatter (transpile (restructure (parse input)))))\n\n(def sourcemap (input)\n (sibilant.initialize)\n (sourcemapper (transpile (restructure (parse input)))))\n\n(set sibilant 'sibilize sibilize)\n\n(def sibilant.version ()\n (get (sibilant.package-info) 'version))\n\n(def sibilant.strip-shebang (data)\n (data.replace (regex \"^#!.*\\\\n\") \"\\n\"))\n\n(set sibilant 'file 'eval.sibilant)\n\n(def with-dir-and-file (dir file fn)\n (var before { dir sibilant.dir\n file sibilant.file })\n (set sibilant\n 'dir dir\n 'file file)\n\n (var retval (fn))\n\n (set sibilant\n 'dir before.dir\n 'file before.file)\n\n retval)\n\n(set sibilant 'source-cache {})\n\n(def sibilant.sibilize-file (file-name)\n (output-formatter (sibilant.transpile-file file-name)))\n\n(def sibilant.sibilize-json (file-name)\n (sibilant.initialize)\n (var before sibilant.macros.hash.quote-keys)\n (set sibilant.macros.hash 'quote-keys true)\n (var content (sibilant.sibilize-file file-name))\n (set sibilant.macros.hash 'quote-keys before)\n content)\n\n(def sibilant.macros.include (file)\n (sibilant.include (eval (output-formatter (transpile file)))))\n\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/require-and-include.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"AAAA,IAAK,QAAL,uBAAe,KAAf;AAAA;AAAA;AAAA,EACM,mBAAD,EADL;AAAA,SAEM,eAAD,CAAmB,SAAD,CAAY,WAAD,CAAc,KAAD,CAAO,KAAP,CAAb,CAAX,CAAlB,CAFL;AAAA,G;AAIA,IAAK,SAAL,wBAAgB,KAAhB;AAAA;AAAA;AAAA,EACM,mBAAD,EADL;AAAA,SAEM,YAAD,CAAe,SAAD,CAAY,WAAD,CAAc,KAAD,CAAO,KAAP,CAAb,CAAX,CAAd,CAFL;AAAA,G;AAIA,CAAK,QAAL,EAAc,CAAC,QAAD,CAAd,IAAwB,QAAxB,C;AAEK,gBAAL;AAAA;AAAA;AAAA,SACK,CAAM,oBAAD,EAAL,EAA6B,CAAC,OAAD,CAA7B,CADL;AAAA,G;AAGK,qBAAL,oCAA6B,IAA7B;AAAA;AAAA;AAAA,SACM,YAAD,CAAc,KCkGN,MAHI,CD/FS,UC+FT,E,SAAA,CD/FE,CAAd,EAAiC,IAAjC,CADL;AAAA,G;AAGA,CAAK,QAAL,EAAc,CAAC,IAAD,CAAd,IAAoB,CAAC,aAAD,CAApB,C;AAEA,IAAK,cAAL,6BAAwB,GAAxB,EAA4B,IAA5B,EAAiC,EAAjC;AAAA;AAAA;AAAA,EACK,IAAK,MAAL,GAAY;AAAA,IAAE,GAAF,EAAM,YAAN;AAAA,IACE,IADF,EACO,aADP;AAAA,GAAZ,CADL;AAAA,EAGK,CAAK,QAAL,EACK,CAAC,GAAD,CADL,IACW,GADX;AAAA,GAAK,QAAL,EAEK,CAAC,IAAD,CAFL,IAEW,IAFX,CAHL;AAAA,EAOK,IAAK,MAAL,GAAa,EAAD,EAAZ,CAPL;AAAA,EASK,CAAK,QAAL,EACK,CAAC,GAAD,CADL,IACW,UADX;AAAA,GAAK,QAAL,EAEK,CAAC,IAAD,CAFL,IAEW,WAFX,CATL;AAAA,SAaK,MAbL;AAAA,G;AAeA,CAAK,QAAL,EAAc,CAAC,WAAD,CAAd,IAA4B,IAA5B,C;AAEK,qBAAL,oCAA6B,QAA7B;AAAA;AAAA;AAAA,SACM,eAAD,CAAmB,sBAAD,CAAyB,QAAzB,CAAlB,CADL;AAAA,G;AAGK,qBAAL,oCAA6B,QAA7B;AAAA;AAAA;AAAA,EACM,mBAAD,EADL;AAAA,EAEK,IAAK,MAAL,GAAY,8BAAZ,CAFL;AAAA,EAGK,CAAK,oBAAL,EAA0B,CAAC,SAAD,CAA1B,IAAsC,IAAtC,CAHL;AAAA,EAIK,IAAK,OAAL,GAAc,qBAAD,CAAwB,QAAxB,CAAb,CAJL;AAAA,EAKK,CAAK,oBAAL,EAA0B,CAAC,SAAD,CAA1B,IAAsC,MAAtC,CALL;AAAA,SAMK,OANL;AAAA,G;AAQK,uBAAL,sCAA8B,IAA9B;AAAA;AAAA;AAAA,SACM,gBAAD,CAAmB,IAAD,CAAO,eAAD,CAAmB,SAAD,CAAW,IAAX,CAAlB,CAAN,CAAlB,CADL;AAAA","sourcesContent":["(def sibilize (input)\n (sibilant.initialize)\n (output-formatter (transpile (restructure (parse input)))))\n\n(def sourcemap (input)\n (sibilant.initialize)\n (sourcemapper (transpile (restructure (parse input)))))\n\n(set sibilant 'sibilize sibilize)\n\n(def sibilant.version ()\n (get (sibilant.package-info) 'version))\n\n(def sibilant.strip-shebang (data)\n (data.replace (regex \"^#!.*\\\\n\") \"\\n\"))\n\n(set sibilant 'file 'eval.sibilant)\n\n(def with-dir-and-file (dir file fn)\n (var before { dir sibilant.dir\n file sibilant.file })\n (set sibilant\n 'dir dir\n 'file file)\n\n (var retval (fn))\n\n (set sibilant\n 'dir before.dir\n 'file before.file)\n\n retval)\n\n(set sibilant 'source-cache {})\n\n(def sibilant.sibilize-file (file-name)\n (output-formatter (sibilant.transpile-file file-name)))\n\n(def sibilant.sibilize-json (file-name)\n (sibilant.initialize)\n (var before sibilant.macros.hash.quote-keys)\n (set sibilant.macros.hash 'quote-keys true)\n (var content (sibilant.sibilize-file file-name))\n (set sibilant.macros.hash 'quote-keys before)\n content)\n\n(def sibilant.macros.include (file)\n (sibilant.include (eval (output-formatter (transpile file)))))\n\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file diff --git a/lib/restructurer.map b/lib/restructurer.map index 0dabefa..252a94b 100644 --- a/lib/restructurer.map +++ b/lib/restructurer.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/restructurer.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(var restructurers {}\n acceptable-pairs { \"(\" \")\" \"[\" \"]\" \"{\" \"}\" }\n bracket-types { \"(\" 'expression\n \"[\" 'bracket\n \"{\" 'brace })\n\n(def restructure (input)\n (var output { type 'root\n contents []\n file sibilant.file\n col 0\n line 1 }\n context { parse-stack [output]\n output output\n input input\n specials 0 })\n\n (inject context input\n (#(context token index)\n (var restructurer (or (get restructurers token.type) restructurers.default))\n (restructurer token context index)))\n output)\n\n(set sibilant 'restructure restructure)\n\n(def restructurers.open-expression (token context)\n (var first (first context.parse-stack))\n (set token\n 'contents []\n 'type (get bracket-types token.token)\n 'parent first)\n (accept-specials token context)\n (send first.contents push token)\n (context.parse-stack.unshift token)\n context)\n\n\n(def restructurers.close-expression (node context index)\n (var first (first context.parse-stack))\n\n (when (!= (get acceptable-pairs first.token) node.token)\n (throw (\"trying to close \" (yellow (sibilant.pretty-print first))\n \"\\n on \"first.file\":\"first.line\":\"first.col\n \"\\n with \"(sibilant.pretty-print node)\n \"\\n on \"node.file\":\"node.line\":\"node.col\n \"\\n\")))\n\n (set first 'end node.end)\n (context.parse-stack.shift)\n (close-specials first context)\n (when (zero? context.parse-stack.length)\n (throw (\"unbalanced parens:\\n\"\n (call inspect parse-stack))))\n context)\n\n(def open-special (node context)\n (incr context.specials)\n\n (var first (first context.parse-stack))\n (set node\n 'contents []\n 'parent first)\n\n (first.contents.push node)\n (context.parse-stack.unshift node)\n context)\n\n(def accept-specials (node context)\n (set node 'specials (get context 'specials))\n (set context 'specials 0)\n context)\n\n(def close-specials (node context)\n (when (> node.specials 0)\n (decr node.specials)\n (context.parse-stack.shift)\n (close-specials node context))\n context)\n\n(def restructurers.hat (node context index) (open-special node context))\n(def restructurers.dots (node context index) (open-special node context))\n(def restructurers.tick (node context index) (open-special node context))\n(def restructurers.at (node context index) (open-special node context))\n\n(def restructurers.whitespace (token context index) context)\n(def restructurers.newline (token context index) context)\n(def restructurers.ignored (token context index) context)\n\n(def restructurers.default (token context index)\n (accept-specials token context)\n (send (get (first context.parse-stack) 'contents) push token)\n (close-specials token context))\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/restructurer.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":["(var restructurers {}\n acceptable-pairs { \"(\" \")\" \"[\" \"]\" \"{\" \"}\" }\n bracket-types { \"(\" 'expression\n \"[\" 'bracket\n \"{\" 'brace })\n\n(def restructure (input)\n (var output { type 'root\n contents []\n file sibilant.file\n col 0\n line 1 }\n context { parse-stack [output]\n output output\n input input\n specials 0 })\n\n (inject context input\n (#(context token index)\n (var restructurer (or (get restructurers token.type) restructurers.default))\n (restructurer token context index)))\n output)\n\n(set sibilant 'restructure restructure)\n\n(def restructurers.open-expression (token context)\n (var first (first context.parse-stack))\n (set token\n 'contents []\n 'type (get bracket-types token.token)\n 'parent first)\n (accept-specials token context)\n (send first.contents push token)\n (context.parse-stack.unshift token)\n context)\n\n\n(def restructurers.close-expression (node context index)\n (var first (first context.parse-stack))\n\n (when (!= (get acceptable-pairs first.token) node.token)\n (throw (\"trying to close \" (yellow (sibilant.pretty-print first))\n \"\\n on \"first.file\":\"first.line\":\"first.col\n \"\\n with \"(sibilant.pretty-print node)\n \"\\n on \"node.file\":\"node.line\":\"node.col\n \"\\n\")))\n\n (set first 'end node.end)\n (context.parse-stack.shift)\n (close-specials first context)\n (when (zero? context.parse-stack.length)\n (throw (\"unbalanced parens:\\n\"\n (call inspect parse-stack))))\n context)\n\n(def open-special (node context)\n (incr context.specials)\n\n (var first (first context.parse-stack))\n (set node\n 'contents []\n 'parent first)\n\n (first.contents.push node)\n (context.parse-stack.unshift node)\n context)\n\n(def accept-specials (node context)\n (set node 'specials (get context 'specials))\n (set context 'specials 0)\n context)\n\n(def close-specials (node context)\n (when (> node.specials 0)\n (decr node.specials)\n (context.parse-stack.shift)\n (close-specials node context))\n context)\n\n(def restructurers.hat (node context index) (open-special node context))\n(def restructurers.dots (node context index) (open-special node context))\n(def restructurers.tick (node context index) (open-special node context))\n(def restructurers.at (node context index) (open-special node context))\n\n(def restructurers.whitespace (token context index) context)\n(def restructurers.newline (token context index) context)\n(def restructurers.ignored (token context index) context)\n\n(def restructurers.default (token context index)\n (accept-specials token context)\n (send (get (first context.parse-stack) 'contents) push token)\n (close-specials token context))\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file diff --git a/lib/sibilant.js b/lib/sibilant.js index 49a62b7..4f9f793 100644 --- a/lib/sibilant.js +++ b/lib/sibilant.js @@ -641,6 +641,7 @@ var parser = { }; "tick": "[`']", "hat": "(\\^)", "dots": "(\\.+)", + "argPlaceholder": "(#[0-9]+)", "otherChar": "([#><=!\\+\\/\\*-]+)", "openExpression": "(\\(|\\{|\\[)", "closeExpression": "(\\)|\\}|\\])", @@ -648,9 +649,9 @@ var parser = { }; "whitespace": "\\s", "ignored": "." }; -(parser)["tokenPrecedence"] = [ "regex", "comment", "string", "number", "dots", "tick", "hat", "at", "special", "literal", "otherChar", "openExpression", "closeExpression", "newline", "whitespace", "ignored" ]; +(parser)["tokenPrecedence"] = [ "regex", "comment", "string", "number", "dots", "tick", "hat", "at", "special", "literal", "argPlaceholder", "otherChar", "openExpression", "closeExpression", "newline", "whitespace", "ignored" ]; (parser)["orderedRegexes"] = parser.tokenPrecedence.map((function(x) { - /* /Users/jbr/code/sibilant/src/parser.sibilant:39:23 */ + /* /Users/jbr/code/sibilant/src/parser.sibilant:41:23 */ var r = (new RegExp(("^" + (parser.tokens)[x]), undefined)); (r)["name"] = x; @@ -659,12 +660,12 @@ var parser = { }; var orderedRegexes = parser.orderedRegexes; (sibilant)["nodeCache"] = (sibilant.nodeCache || { }); var nodeId = (function nodeId$(node) { - /* node-id /Users/jbr/code/sibilant/src/parser.sibilant:48:0 */ + /* node-id /Users/jbr/code/sibilant/src/parser.sibilant:49:0 */ return ((nodeId.lastId)++); }); var cacheNode = (function cacheNode$(node) { - /* cache-node /Users/jbr/code/sibilant/src/parser.sibilant:50:0 */ + /* cache-node /Users/jbr/code/sibilant/src/parser.sibilant:51:0 */ var id = nodeId(node); (sibilant.nodeCache)[id] = node; @@ -672,22 +673,16 @@ var cacheNode = (function cacheNode$(node) { }); (nodeId)["lastId"] = 0; parser.parse = (function parser$parse$(string, context) { - /* parser.parse /Users/jbr/code/sibilant/src/parser.sibilant:57:1 */ - - var context = (function() { - if (context) { - return context; - } else { - return { - position: 0, - stack: [], - line: 1, - lastNewline: 0, - col: 0 - }; - } - })(); - var match = true, + /* parser.parse /Users/jbr/code/sibilant/src/parser.sibilant:58:0 */ + + var context = (context || { + position: 0, + stack: [], + line: 1, + lastNewline: 0, + col: 0 + }), + match = true, regexName = null, remainingInput = string; (function() { @@ -695,7 +690,7 @@ parser.parse = (function parser$parse$(string, context) { while (match) { $_symbol29_$ = (function() { detect(orderedRegexes, (function(r) { - /* /Users/jbr/code/sibilant/src/parser.sibilant:69:20 */ + /* /Users/jbr/code/sibilant/src/parser.sibilant:70:20 */ match = r.exec(remainingInput); regexName = r.name; @@ -1092,19 +1087,32 @@ macros.macro = (function macros$macro$(name, args, body) { })(); return undefined; }); +macros.meta = (function macros$meta$(body) { + /* ^meta /Users/jbr/code/sibilant/src/macros.sibilant:105:0 */ + + var body = Array.prototype.slice.call(arguments, 0); + + var js = outputFormatter(macros.scoped.apply(this, body)); + (function() { + if (sibilant.debug) { + return console.log(js); + } + })(); + return outputFormatter(eval(js)); +}); macros.concat = (function macros$concat$(args) { - /* ^concat /Users/jbr/code/sibilant/src/macros.sibilant:105:0 */ + /* ^concat /Users/jbr/code/sibilant/src/macros.sibilant:111:0 */ var args = Array.prototype.slice.call(arguments, 0); return [ "(", interleave(" + ", map(args, transpile)), ")" ]; }); macros.reverse = (function macros$reverse$(arr) { - /* ^reverse /Users/jbr/code/sibilant/src/macros.sibilant:108:0 */ + /* ^reverse /Users/jbr/code/sibilant/src/macros.sibilant:114:0 */ var reversed = []; arr.forEach((function(item) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:110:5 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:116:5 */ return reversed.unshift(item); })); @@ -1112,7 +1120,7 @@ macros.reverse = (function macros$reverse$(arr) { }); var reverse = macros.reverse; macros.lambda = (function macros$lambda$(argsOrOptions, body) { - /* ^lambda /Users/jbr/code/sibilant/src/macros.sibilant:115:0 */ + /* ^lambda /Users/jbr/code/sibilant/src/macros.sibilant:121:0 */ var body = Array.prototype.slice.call(arguments, 1); @@ -1140,13 +1148,13 @@ macros.lambda = (function macros$lambda$(argsOrOptions, body) { } })(), rest = detect(args, (function(arg) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:128:23 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:134:23 */ return node__QUERY(arg, "dots"); })); var thisNode = this, node = detect([ argsOrOptions.node, thisNode, argsOrOptions.name, args, (body)[0] ], (function(n) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:133:16 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:139:16 */ return (node__QUERY(n) && (n)["file"]); })); @@ -1182,7 +1190,7 @@ macros.lambda = (function macros$lambda$(argsOrOptions, body) { }); (macros)["#"] = macros.lambda; macros.quotedHash = (function macros$quotedHash$(pairs) { - /* ^quoted-hash /Users/jbr/code/sibilant/src/macros.sibilant:151:0 */ + /* ^quoted-hash /Users/jbr/code/sibilant/src/macros.sibilant:157:0 */ var pairs = Array.prototype.slice.call(arguments, 0); @@ -1193,7 +1201,7 @@ macros.quotedHash = (function macros$quotedHash$(pairs) { return value; }); macros.hash = (function macros$hash$(pairs) { - /* ^hash /Users/jbr/code/sibilant/src/macros.sibilant:158:0 */ + /* ^hash /Users/jbr/code/sibilant/src/macros.sibilant:164:0 */ var pairs = Array.prototype.slice.call(arguments, 0); @@ -1204,7 +1212,7 @@ macros.hash = (function macros$hash$(pairs) { })(); var quoteKeys = macros.hash.quoteKeys, pairStrings = bulkMap(pairs, (function(key, value) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:164:39 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:170:39 */ return [ (function() { if ((quoteKeys && (!node__QUERY(key, "string")))) { @@ -1223,7 +1231,7 @@ macros.hash = (function macros$hash$(pairs) { })(); }); var qescape = (function qescape$(content) { - /* qescape /Users/jbr/code/sibilant/src/macros.sibilant:175:0 */ + /* qescape /Users/jbr/code/sibilant/src/macros.sibilant:181:0 */ return (function() { if ((!((typeof content !== "undefined") && (content !== null)))) { @@ -1237,14 +1245,14 @@ var qescape = (function qescape$(content) { })(); }); var logPretty = (function logPretty$(label, arg) { - /* log-pretty /Users/jbr/code/sibilant/src/macros.sibilant:182:0 */ + /* log-pretty /Users/jbr/code/sibilant/src/macros.sibilant:188:0 */ console.log((label + ": " + prettify(arg))); return arg; }); var prettyLog = logPretty; macros.quote = (function macros$quote$(content) { - /* ^quote /Users/jbr/code/sibilant/src/macros.sibilant:188:0 */ + /* ^quote /Users/jbr/code/sibilant/src/macros.sibilant:194:0 */ return (function() { if (typeof(content) === "string") { @@ -1261,6 +1269,22 @@ macros.quote = (function macros$quote$(content) { return [ "\"", mapNode(transpile(content), qescape), "\"" ]; } })(); + } else if (node__QUERY(content, "bracket")) { + return (function() { + if ((Object.keys(findUnquotes(content)))["length"]) { + return macros.call("macros.expandQuote.call", "this", macros.quote(content.nodeId), macros.quotedHash.apply(this, alternatingKeysAndValues(findUnquotes(content)))); + } else { + return macros.list.apply(this, map(content.contents, macros.quote)); + } + })(); + } else if (node__QUERY(content, "brace")) { + return (function() { + if ((Object.keys(findUnquotes(content)))["length"]) { + return macros.call("macros.expandQuote.call", "this", macros.quote(content.nodeId), macros.quotedHash.apply(this, alternatingKeysAndValues(findUnquotes(content)))); + } else { + return macros.hash.apply(this, map(content.contents, macros.quote)); + } + })(); } else { console.log(("unknown content" + prettify(content))); return content; @@ -1268,13 +1292,13 @@ macros.quote = (function macros$quote$(content) { })(); }); macros.debug = (function macros$debug$(val) { - /* ^debug /Users/jbr/code/sibilant/src/macros.sibilant:201:0 */ + /* ^debug /Users/jbr/code/sibilant/src/macros.sibilant:220:0 */ (sibilant)["debug"] = eval(outputFormatter(transpile(val))); return null; }); var mapNode = (function mapNode$(node, fn) { - /* map-node /Users/jbr/code/sibilant/src/macros.sibilant:204:0 */ + /* map-node /Users/jbr/code/sibilant/src/macros.sibilant:223:0 */ return (function() { if (node__QUERY(node)) { @@ -1287,7 +1311,7 @@ var mapNode = (function mapNode$(node, fn) { return mappedNode; } else if (((node) && typeof (node) === "object" && (node).constructor.name === "Array")) { return map(node, (function(c) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:213:32 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:232:32 */ return mapNode(c, fn); })); @@ -1297,7 +1321,7 @@ var mapNode = (function mapNode$(node, fn) { })(); }); var eachNode = (function eachNode$(node, fn) { - /* each-node /Users/jbr/code/sibilant/src/macros.sibilant:216:0 */ + /* each-node /Users/jbr/code/sibilant/src/macros.sibilant:235:0 */ return (function() { if (node__QUERY(node)) { @@ -1308,7 +1332,7 @@ var eachNode = (function eachNode$(node, fn) { })(); } else if (((node) && typeof (node) === "object" && (node).constructor.name === "Array")) { return node.forEach((function(c) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:218:22 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:237:22 */ return eachNode(c, fn); })); @@ -1318,7 +1342,7 @@ var eachNode = (function eachNode$(node, fn) { })(); }); var mapNodeForQuoteExpansion = (function mapNodeForQuoteExpansion$(node, expansions) { - /* map-node-for-quote-expansion /Users/jbr/code/sibilant/src/macros.sibilant:222:0 */ + /* map-node-for-quote-expansion /Users/jbr/code/sibilant/src/macros.sibilant:241:0 */ return (function() { if (node__QUERY(node)) { @@ -1338,7 +1362,7 @@ var mapNodeForQuoteExpansion = (function mapNodeForQuoteExpansion$(node, expansi return mappedNode; } else if (((node) && typeof (node) === "object" && (node).constructor.name === "Array")) { return map(node, (function(c) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:233:21 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:252:21 */ return mapNodeForQuoteExpansion(c, expansions); })); @@ -1348,22 +1372,22 @@ var mapNodeForQuoteExpansion = (function mapNodeForQuoteExpansion$(node, expansi })(); }); macros.expandQuote = (function macros$expandQuote$(nodeId, expansions) { - /* ^expand-quote /Users/jbr/code/sibilant/src/macros.sibilant:238:0 */ + /* ^expand-quote /Users/jbr/code/sibilant/src/macros.sibilant:257:0 */ var expandedNodes = mapNodeForQuoteExpansion((sibilant.nodeCache)[nodeId], expansions); return transpile(expandedNodes); }); var unquote__QUERY = (function unquote__QUERY$(node) { - /* unquote? /Users/jbr/code/sibilant/src/macros.sibilant:244:0 */ + /* unquote? /Users/jbr/code/sibilant/src/macros.sibilant:263:0 */ return node__QUERY(node, "at"); }); var findUnquotes = (function findUnquotes$(node) { - /* find-unquotes /Users/jbr/code/sibilant/src/macros.sibilant:246:0 */ + /* find-unquotes /Users/jbr/code/sibilant/src/macros.sibilant:265:0 */ var unquotes = { }; eachNode(node, (function(n) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:248:21 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:267:21 */ (function() { if (unquote__QUERY(n)) { @@ -1375,13 +1399,13 @@ var findUnquotes = (function findUnquotes$(node) { return unquotes; }); var spliceDots = (function spliceDots$(node) { - /* splice-dots /Users/jbr/code/sibilant/src/macros.sibilant:254:0 */ + /* splice-dots /Users/jbr/code/sibilant/src/macros.sibilant:273:0 */ (function() { - if (((node.contents) && typeof (node.contents) === "object" && (node.contents).constructor.name === "Array")) { + if ((node && ((node.contents) && typeof (node.contents) === "object" && (node.contents).constructor.name === "Array"))) { var contents = []; node.contents.forEach((function(content) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:257:11 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:276:11 */ return (function() { if ((node__QUERY(content, "dots") && ((content.contents) && typeof (content.contents) === "object" && (content.contents).constructor.name === "Array") && (content.contents.length === 1) && (((content.contents)[0]) && typeof ((content.contents)[0]) === "object" && ((content.contents)[0]).constructor.name === "Array"))) { @@ -1397,16 +1421,16 @@ var spliceDots = (function spliceDots$(node) { return node; }); var alternatingKeysAndValues = (function alternatingKeysAndValues$(hash) { - /* alternating-keys-and-values /Users/jbr/code/sibilant/src/macros.sibilant:269:0 */ + /* alternating-keys-and-values /Users/jbr/code/sibilant/src/macros.sibilant:288:0 */ return flatten(map(Object.keys(hash), (function(key) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:271:19 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:290:19 */ return [ key, (hash)[key] ]; }))); }); macros.list = (function macros$list$(args) { - /* ^list /Users/jbr/code/sibilant/src/macros.sibilant:274:0 */ + /* ^list /Users/jbr/code/sibilant/src/macros.sibilant:293:0 */ var args = Array.prototype.slice.call(arguments, 0); @@ -1416,16 +1440,16 @@ macros.list = (function macros$list$(args) { return "[]"; } else { var simpleList = (function simpleList$(args) { - /* simple-list /Users/jbr/code/sibilant/src/macros.sibilant:278:12 */ + /* simple-list /Users/jbr/code/sibilant/src/macros.sibilant:297:12 */ return [ "[ ", interleave(", ", map(args, (function(arg) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:279:50 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:298:50 */ return arg.transpiled; }))), " ]" ]; }); args.forEach((function(arg) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:281:27 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:300:27 */ return (function() { if (node__QUERY(arg, "dots")) { @@ -1438,7 +1462,7 @@ macros.list = (function macros$list$(args) { })(); })); argSegments = map(argSegments, (function(segment) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:287:38 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:306:38 */ return (function() { if (((segment) && typeof (segment) === "object" && (segment).constructor.name === "Array")) { @@ -1459,13 +1483,13 @@ macros.list = (function macros$list$(args) { })(); }); macros.call = (function macros$call$(fnName, args) { - /* ^call /Users/jbr/code/sibilant/src/macros.sibilant:297:0 */ + /* ^call /Users/jbr/code/sibilant/src/macros.sibilant:316:0 */ var args = Array.prototype.slice.call(arguments, 1); return (function() { if (any__QUERY(args, (function(arg) { - /* /Users/jbr/code/sibilant/src/macros.sibilant:298:20 */ + /* /Users/jbr/code/sibilant/src/macros.sibilant:317:20 */ return node__QUERY(arg, "dots"); }))) { @@ -1476,7 +1500,7 @@ macros.call = (function macros$call$(fnName, args) { })(); }); macros.dots = (function macros$dots$(contents) { - /* ^dots /Users/jbr/code/sibilant/src/macros.sibilant:303:0 */ + /* ^dots /Users/jbr/code/sibilant/src/macros.sibilant:322:0 */ var contents = Array.prototype.slice.call(arguments, 0); diff --git a/lib/sibilant.map b/lib/sibilant.map index 938d5d2..6de056a 100644 --- a/lib/sibilant.map +++ b/lib/sibilant.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/sibilant.sibilant","/Users/jbr/code/sibilant/src/node.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant","/Users/jbr/code/sibilant/src/colors.sibilant","/Users/jbr/code/sibilant/src/pretty-printer.sibilant","/Users/jbr/code/sibilant/src/output-formatter.sibilant","/Users/jbr/code/sibilant/src/sourcemap.sibilant","/Users/jbr/code/sibilant/include/functional.sibilant","/Users/jbr/code/sibilant/src/parser.sibilant","/Users/jbr/code/sibilant/src/restructurer.sibilant","/Users/jbr/code/sibilant/src/macros.sibilant","/Users/jbr/code/sibilant/src/transpiler.sibilant","/Users/jbr/code/sibilant/src/require-and-include.sibilant"],"names":[],"mappings":"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","sourcesContent":["(send (require \"source-map-support\") install)\n(meta \"//# sourceMappingURL=./sibilant.map\\n\")\n\n(include \"./node\")\n(include \"./pretty-printer\")\n(include \"./output-formatter\")\n(include \"./sourcemap\")\n(include \"../include/functional\")\n(include \"./parser\")\n(include \"./restructurer\")\n(include \"./macros\")\n(include \"./transpiler\")\n(include \"./require-and-include\")\n\n","(var sibilant exports\n util (require 'util)\n path (require 'path)\n fs (require 'fs)\n error (#(str) (throw str))\n inspect util.inspect)\n\n(set sibilant 'dir (process.cwd))\n\n\n(def sibilant.transpile-file (file-name)\n (with-dir-and-file (path.dirname file-name) file-name\n (#>\n (var source (sibilant.strip-shebang\n (fs.read-file-sync file-name \"utf8\")))\n\n (set sibilant.source-cache file-name source)\n (sibilant.initialize)\n (transpile (restructure (parse source))))))\n\n\n(def sibilant.sourcemap-file (file-name)\n (with-dir-and-file (path.dirname file-name) file-name\n (#> (sourcemap\n (sibilant.strip-shebang\n (fs.read-file-sync file-name \"utf8\"))))))\n\n\n(set require.extensions \".sibilant\"\n (#(module filename)\n (var content (sibilant.sibilize-file filename))\n (module.*compile content filename)))\n\n(set require.extensions \".son\"\n (#(module filename)\n (var content (sibilant.sibilize-json filename))\n (set module 'exports (JSON.parse content))))\n\n\n(def sibilant.package-info ()\n (var fs (require 'fs))\n (JSON.parse (fs.read-file-sync\n (concat **dirname \"/../package.json\"))))\n\n(def sibilant.version-string ()\n (var package (sibilant.package-info)\n path (require 'path))\n (concat package.name \" version \" package.version\n \"\\n(at \" (path.join **dirname \"..\") \")\"))\n\n\n(def sibilant.initialize ()\n (unless (or sibilant.loaded? sibilant.loading?)\n (set sibilant 'loading? true)\n (sibilant.load-macros)\n (delete sibilant.loading?)\n (set sibilant 'loaded? true)))\n \n(def sibilant.load-macros ()\n (sibilant.include (path.normalize (concat **dirname \"/../include/macros\"))))\n\n\n(def sibilant.include (file)\n (when (not (file.match (regex \"\\\\.(sibilant|son)$\")))\n (assign file (concat file \".sibilant\")))\n\n (when (file.match (regex \"^\\\\.\\\\.?/\"))\n (assign file (concat sibilant.dir \"/\" file)))\n\n (var resolved-file\n (try (require.resolve file)\n (error (\"Failed to resolve file for inclusion: \" file))))\n\n (sibilant.transpile-file resolved-file))\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)","(def log! (...args)\n (send (inspect! ..args ) for-each (#(o) (console.log o))))\n\n(def inspect! (...args)\n (args.map (#(arg) (util.inspect arg { colors false depth 3}))))\n\n(def color (code items depth)\n (concat code (join \"\" items) \"\\033[0m\"))\n\n(def black (...args) (color \"\\033[0;30m\" args))\n(def red (...args) (color \"\\033[0;31m\" args))\n(def green (...args) (color \"\\033[0;32m\" args))\n(def brown (...args) (color \"\\033[0;33m\" args))\n(def blue (...args) (color \"\\033[0;34m\" args))\n(def purple (...args) (color \"\\033[0;35m\" args))\n(def cyan (...args) (color \"\\033[0;36m\" args))\n(def gray (...args) (color \"\\033[0;37m\" args))\n(def bold-gray (...args) (color \"\\033[1;30m\" args))\n(def bold-red (...args) (color \"\\033[1;31m\" args))\n(def bold-green (...args) (color \"\\033[1;32m\" args))\n(def yellow (...args) (color \"\\033[1;33m\" args))\n(def bold-blue (...args) (color \"\\033[1;34m\" args))\n(def bold-purple (...args) (color \"\\033[1;35m\" args))\n(def bold-cyan (...args) (color \"\\033[1;36m\" args))\n(def white (...args) (color \"\\033[1;37m\" args))\n","(include \"./colors.sibilant\")\n\n(def sibilant.pretty-print (node color)\n (when (undefined? color) (assign color true))\n\n (real-newlines (if (node? node) (do\n (var pretty-printer (or (get sibilant.pretty-print node.type)\n sibilant.pretty-print.default))\n (pretty-printer node color))\n (list? node)\n (concat (if color (black \"[\") \"\")\n (join (if color (black \",\") \"\") (map node prettify))\n (if color (black \"]\") \"\"))\n\n color (red (util.inspect node))\n (real-newlines (util.inspect node)))))\n\n\n(def sibilant.pretty-print.default (node color)\n (real-newlines (sibilant.pretty-print.colorize node color\n (concat\n (if (and node.modifiers node.modifiers.length)\n (join \"\" (map node.modifiers (#(n) (sibilant.pretty-print n color)))) \"\")\n node.token\n (if (and node.contents node.contents.length)\n (join \" \" (map node.contents (#(n) (sibilant.pretty-print n color)))) \"\")\n (or (get acceptable-pairs node.token) \"\")))))\n\n(def sibilant.pretty-print.root (node color)\n (join \"\\n\" (map node.contents (#(n) (sibilant.pretty-print n color)))))\n\n(def sibilant.pretty-print.output (node color)\n (concat (if color (black \"{\") \"\")\n (if (list? node.contents)\n (join (if color (black \",\") \"\")\n (map node.contents (#(c) (sibilant.pretty-print.colorize node color (prettify c)))))\n (sibilant.pretty-print.colorize node color node.contents))\n (if color (black \"}\") \"\")))\n\n(def real-newlines (node)\n (chain node (split \"\\\\n\") (join \"\\n\")))\n\n\n(def sibilant.pretty-print.colorize (node color string)\n (if (not color) string\n (= node.hint 'macro) (yellow string)\n (= node.type 'output) (purple string)\n (green string)))\n\n(var prettify sibilant.pretty-print)","(def output-formatter (node)\n (if (list? node) (join \"\" (map node output-formatter))\n (and (node? node) (= node.type 'output))\n (output-formatter node.contents)\n (or (string? node) (number? node)) node\n (not (exists? node)) \"\"\n (node? node) (do\n (console.log \"WE SHOULD NOT BE HERE\")\n (output-formatter (transpile node)))))\n\n(set sibilant 'output-formatter output-formatter)","(var source-node (get (require \"source-map\") 'Source-node))\n\n(def source-map (node)\n (if\n (and (node? node) (= node.type 'output))\n (new source-node\n node.source.line\n node.source.col\n node.source.file\n (if (list? node.contents)\n (map node.contents source-map)\n (source-map node.contents)))\n\n (or (string? node) (number? node)) (node.to-string)))\n\n\n(def sourcemapper (node)\n (var source-nodes (source-map (transpile node))\n map (get (source-nodes.to-string-with-source-map) 'map))\n\n (each (key) (keys sibilant.source-cache)\n (map.set-source-content key (get sibilant.source-cache key)))\n\n (map.to-string))","(def bulk-map (arr fn)\n (var index 0\n group-size fn.length\n ret-arr [])\n\n (while (< index arr.length)\n (send ret-arr push\n (apply fn (send arr slice\n index (+ index group-size))))\n (incr-by index group-size))\n ret-arr)\n\n(def inject (start items fn)\n (var value start)\n (when (list? items)\n (each (item index) items\n (assign value (fn value item index))))\n value)\n\n(def map (items fn)\n (inject [] items\n (#(collector item index)\n (send collector push (fn item index))\n collector)))\n\n(def select (items fn)\n (inject [] items\n (#(collector item index)\n (when (fn item index)\n (send collector push item))\n collector)))\n\n(def detect (items fn)\n (var return-item undefined\n index 0\n items (or items []))\n\n (until (or (= items.length index) return-item)\n (when (fn (get items index) index)\n (assign return-item (get items index)))\n (incr index))\n\n return-item)\n\n(def all? (items fn)\n (undefined? (detect items (#(item index) (not (fn item index))))))\n\n(def none? (items fn)\n (undefined? (detect items fn)))\n\n(def any? (items fn)\n (defined? (detect items fn)))\n\n(def reject (items fn)\n (var args [ items fn ])\n (select items (thunk (not (apply fn arguments)))))\n\n(def compact (arr)\n (select arr (#(item)\n (and\n (!= null item)\n (!= false item)\n (defined? item)))))\n\n(def interleave (glue arr)\n (if (list? glue) (inject [] arr\n (#(collector item index)\n (collector.concat [item (get glue index)])))\n\n \n (inject [(first arr)] (rest arr)\n (#(collector item index) (collector.concat [glue item])))))\n\n\n(def flatten (...items)\n (inject [] items\n (#(collector item)\n (collector.concat\n (if (list? item)\n (apply flatten item)\n item)))))\n\n\n(def recurse-map (item fn)\n (if (list? item) (map item (#(subitem) (recurse-map subitem fn)))\n (fn item)))\n\n(def pluck (items attribute)\n (map items (#(item) (get item attribute))))\n\n(def merge-into (into from)\n (each (key) (keys from) (set into key (get from key)))\n into)\n\n(def clone (object)\n (inject {} (keys object)\n (#(collector key)\n (set collector key (get object key))\n collector)))\n\n(def map-values (object fn)\n (inject {} (keys object)\n (#(collector key index)\n (set collector key (fn (get object key) key))\n collector)))\n\n(def merge-with (into from)\n (merge-into (clone into) from))\n","(var parser {})\n(set sibilant 'parser parser)\n(set parser 'tokens\n { 'regex \"(\\\\/(\\\\\\\\\\\\\\/|[^\\\\/\\\\n])+\\\\/[glim]*)\"\n 'comment \"(;.*)\"\n 'string \"(\\\"(([^\\\"]|(\\\\\\\\\\\"))*[^\\\\\\\\])?\\\")\"\n 'number \"(-?[0-9][0-9.,]*)\"\n 'literal \"(-?[*.$a-zA-Z_][*.a-zA-Z0-9-_]*(\\\\?|!)?)\"\n 'special \"([&'])\"\n 'at \"@\"\n 'tick \"[`']\"\n 'hat \"(\\\\^)\"\n 'dots \"(\\\\.+)\"\n 'other-char \"([#><=!\\\\+\\\\/\\\\*-]+)\"\n 'open-expression \"(\\\\(|\\\\{|\\\\[)\"\n 'close-expression \"(\\\\)|\\\\}|\\\\])\"\n 'newline \"\\\\n\"\n 'whitespace \"\\\\s\"\n 'ignored \".\" })\n\n(set parser 'token-precedence [ 'regex\n 'comment\n 'string\n 'number\n 'dots\n 'tick\n 'hat\n 'at\n 'special\n 'literal\n 'other-char\n 'open-expression\n 'close-expression\n 'newline\n 'whitespace\n 'ignored\n ]\n 'ordered-regexes (parser.token-precedence.map\n (#(x)\n (var r (regex (\"^\" (get parser.tokens x))))\n (set r 'name x)\n r)))\n\n\n(var ordered-regexes parser.ordered-regexes)\n\n(set sibilant 'node-cache (or sibilant.node-cache {}))\n(def node-id (node)\n (incr node-id.last-id))\n(def cache-node (node)\n (var id (node-id node))\n (set sibilant.node-cache id node)\n (merge-into node {node-id id}))\n\n(set node-id 'last-id 0)\n\n (def parser.parse (string context)\n (var context (if context context { position 0\n stack []\n line 1\n last-newline 0 col 0}))\n\n (var match true\n regex-name null\n remaining-input string)\n\n (while match\n (detect ordered-regexes\n (#(r)\n (assign match (r.exec remaining-input)\n regex-name r.name)\n match))\n\n (when (exists? match)\n (var match-string (first match)\n length (length match-string))\n \n (context.stack.push\n (cache-node { contents []\n dir sibilant.dir\n file sibilant.file\n token match-string\n type regex-name\n start context.position\n line context.line\n col context.col\n length length }))\n\n (if\n (= 'newline regex-name)\n (do\n (incr context.line)\n (set context\n 'col 0\n 'last-newline context.position))\n\n\n (and (= 'string regex-name) (!= -1 (match-string.index-of \"\\n\")))\n (do\n (var string-newline-count (- (length (match-string.split \"\\n\")) 1))\n (incr-by context.line string-newline-count)\n (set context 'col (- length (match-string.last-index-of \"\\n\"))))\n\n (incr-by context.col length))\n\n (incr-by context.position length)\n (assign remaining-input (if remaining-input.length\n (remaining-input.slice length)\n \"\"))))\n context.stack)\n\n(var parse parser.parse)\n","(var restructurers {}\n acceptable-pairs { \"(\" \")\" \"[\" \"]\" \"{\" \"}\" }\n bracket-types { \"(\" 'expression\n \"[\" 'bracket\n \"{\" 'brace })\n\n(def restructure (input)\n (var output { type 'root\n contents []\n file sibilant.file\n col 0\n line 1 }\n context { parse-stack [output]\n output output\n input input\n specials 0 })\n\n (inject context input\n (#(context token index)\n (var restructurer (or (get restructurers token.type) restructurers.default))\n (restructurer token context index)))\n output)\n\n(set sibilant 'restructure restructure)\n\n(def restructurers.open-expression (token context)\n (var first (first context.parse-stack))\n (set token\n 'contents []\n 'type (get bracket-types token.token)\n 'parent first)\n (accept-specials token context)\n (send first.contents push token)\n (context.parse-stack.unshift token)\n context)\n\n\n(def restructurers.close-expression (node context index)\n (var first (first context.parse-stack))\n\n (when (!= (get acceptable-pairs first.token) node.token)\n (throw (\"trying to close \" (yellow (sibilant.pretty-print first))\n \"\\n on \"first.file\":\"first.line\":\"first.col\n \"\\n with \"(sibilant.pretty-print node)\n \"\\n on \"node.file\":\"node.line\":\"node.col\n \"\\n\")))\n\n (set first 'end node.end)\n (context.parse-stack.shift)\n (close-specials first context)\n (when (zero? context.parse-stack.length)\n (throw (\"unbalanced parens:\\n\"\n (call inspect parse-stack))))\n context)\n\n(def open-special (node context)\n (incr context.specials)\n\n (var first (first context.parse-stack))\n (set node\n 'contents []\n 'parent first)\n\n (first.contents.push node)\n (context.parse-stack.unshift node)\n context)\n\n(def accept-specials (node context)\n (set node 'specials (get context 'specials))\n (set context 'specials 0)\n context)\n\n(def close-specials (node context)\n (when (> node.specials 0)\n (decr node.specials)\n (context.parse-stack.shift)\n (close-specials node context))\n context)\n\n(def restructurers.hat (node context index) (open-special node context))\n(def restructurers.dots (node context index) (open-special node context))\n(def restructurers.tick (node context index) (open-special node context))\n(def restructurers.at (node context index) (open-special node context))\n\n(def restructurers.whitespace (token context index) context)\n(def restructurers.newline (token context index) context)\n(def restructurers.ignored (token context index) context)\n\n(def restructurers.default (token context index)\n (accept-specials token context)\n (send (get (first context.parse-stack) 'contents) push token)\n (close-specials token context))\n","(var macros {})\n(set sibilant 'macros macros 'debug false)\n\n\n(def recurse-indent (...args)\n (map args\n (#(arg)\n (if (node? arg) (do (set arg 'contents (apply recurse-indent (compact (flatten arg.contents)))) arg)\n (list? arg) (apply recurse-indent arg)\n (number? arg) (arg.to-string)\n (string? arg)\n (chain arg\n (replace (regex \"\\\\n\" 'g) \"\\n \")\n (replace (regex \"\\\\n\\\\s+\\\\n\" 'g) \"\\n\\n\"))\n\n arg))))\n\n(def indent (...args)\n [\"\\n \" (recurse-indent args) \"\\n\"])\n\n\n(def escape-regex (string)\n (string.replace (regex \"[\\\\-\\\\[\\\\]\\\\/\\\\{\\\\}\\\\(\\\\)\\\\*\\\\+\\\\?\\\\.\\\\\\\\\\^\\\\$\\\\|]\" 'g) \"\\\\$&\"))\n\n(def ^return (token)\n (when sibilant.debug (console.log \"returning \" (prettify token)))\n (var default-return (as-statement [\"return \" (transpile token)]))\n (if (and token token.contents token.contents.length)\n (switch (get (first token.contents) 'token)\n (('return 'throw 'do) (transpile token))\n ('delete\n (var delete-macro (get macros 'delete))\n (if (< token.contents.length 3) default-return\n [ (as-statement (apply delete-macro (token.contents.slice 1 -1)))\n \"\\nreturn \"\n (as-statement (call delete-macro (last token.contents)))]))\n ('assign\n (if (< token.contents.length 4) default-return\n [ (apply ^assign\n (token.contents.slice 1 (- token.contents.length 2)))\n \"\\nreturn \"\n (apply ^assign (token.contents.slice -2))]))\n ('var\n [ (transpile token) \"\\nreturn \" (transpile (if (even? token.contents.length)\n (last token.contents)\n (first (token.contents.slice -2))))])\n ('set\n (if (< token.contents.length 5) default-return\n (do\n (var obj (second token.contents)\n non-return-part (token.contents.slice 2 (- token.contents.length 2))\n return-part (token.contents.slice -2))\n (non-return-part.unshift obj)\n (return-part.unshift obj)\n [ (^set ...non-return-part)\n \"\\nreturn \"\n (^set ...return-part)])))\n (default default-return))\n default-return))\n\n\n(def statement? (transpiled)\n (if (node? transpiled) (statement? transpiled.contents)\n (list? transpiled) (statement? (last transpiled))\n (string? transpiled) (= \";\" (last transpiled))\n false))\n\n(def as-statement (node)\n (var transpiled (transpile node))\n\n (if (empty-node? transpiled) undefined\n (statement? transpiled) transpiled\n [ transpiled \";\" ]))\n\n(def ^do (...body)\n (if (= 1 body.length) (^return (first body))\n body.length [ (interleave \"\\n\" (map (body.slice 0 -1) (#(node) (as-statement node))))\n \"\\n\"\n (^return (last body)) ]\n \"\"))\n\n(def ^empty-list () 'null)\n\n(def ^def (fn-name args ...body)\n (var fn-name-tr (transpile fn-name) this-node this)\n\n (as-statement [ (if (match? (regex \"\\\\.\") (output-formatter fn-name-tr)) \"\" \"var \")\n fn-name-tr \" = \"\n (^lambda { name fn-name args args node this-node } ...body )\n ] ))\n\n(def ^macro (name args ...body)\n (var name-tr (output-formatter (transpile name))\n options { name name args args node this}\n js (output-formatter (^lambda options ...body)))\n\n (when sibilant.debug (console.log js))\n \n (try (set macros name-tr (eval js))\n (error (\"error in parsing macro \"\n (sibilant.pretty-print name) \":\\n\" js)))\n\n undefined)\n\n(def ^concat (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n\n(def ^reverse (arr)\n (var reversed [])\n (each (item) arr (reversed.unshift item))\n reversed)\n\n(var reverse ^reverse)\n\n(def ^lambda (args-or-options ...body)\n (when sibilant.debug\n (console.log args-or-options))\n (var args (or (get args-or-options 'args) args-or-options)\n body (or (get args-or-options 'body) body)\n args (if (node? args 'expression) args.contents\n (and (node? args) (empty? body)) (do (assign body [ args ]) [])\n args)\n name (when args-or-options.name\n (chain (output-formatter (transpile args-or-options.name))\n (replace (regex \"\\\\W+\" 'g) \"$\")\n (concat \"$\")))\n rest (detect args\n (#(arg) (node? arg 'dots))))\n\n (var this-node this\n node (detect\n [ args-or-options.node this-node args-or-options.name args (first body) ]\n (#(n) (and (node? n) (get n 'file)))))\n [\"(function\" (if name (\" \" name) \"\") \"(\"\n (interleave \", \" (map args transpile)) \") {\"\n (if (or args-or-options.name node)\n (indent [\"/*\"\n (if args-or-options.name (\" \" (sibilant.pretty-print args-or-options.name false)) \"\")\n (if node (\" \" node.file \":\" node.line \":\" node.col) \"\")\n \" */\"]) \"\")\n (when (exists? rest)\n (indent (as-statement [\"var \" (transpile rest)\n \" = Array.prototype.slice.call(arguments, \"\n (- args.length 1) \")\"])))\n\n (indent (apply ^do body))\n \"})\"])\n\n(set macros \"#\" ^lambda)\n\n(def ^quoted-hash (...pairs)\n (var cached-quote-value ^hash.quote-keys)\n (set ^hash 'quote-keys true)\n (var value (^hash ...pairs))\n (set ^hash 'quote-keys cached-quote-value)\n value)\n\n(def ^hash (...pairs)\n (when (odd? pairs.length)\n (error (\"odd number of key-value pairs in hash: \"\n (call inspect pairs))))\n\n (var quote-keys ^hash.quote-keys\n pair-strings (bulk-map pairs (#(key value)\n [ (if (and quote-keys (not (node? key 'string)))\n [\"\\\"\" (transpile key) \"\\\"\"]\n (transpile key))\n \": \"\n (transpile value)])))\n (if (>= 1 pair-strings.length)\n [\"{ \" (interleave \", \" pair-strings) \" }\"]\n [\"{\" (indent (interleave \",\\n\" pair-strings)) \"}\"]))\n\n\n(def qescape (content)\n (if (not (exists? content)) \"\"\n (string? content) (chain content\n (replace (regex \"\\\"\" 'g) \"\\\\\\\"\")\n (replace (regex \"\\\\n\" 'g) \"\\\\n\\\" +\\n\\\"\"))\n content))\n\n(def log-pretty (label arg)\n (console.log (concat label \": \" (prettify arg)))\n arg)\n\n(var pretty-log log-pretty)\n\n(def ^quote (content)\n (if (string? content) (\"\\\"\" (qescape content) \"\\\"\")\n (number? content) (^quote (content.to-string))\n (node? content 'literal) [\"\\\"\" (transpile content) \"\\\"\"]\n (node? content 'expression)\n (if (length (keys (find-unquotes content)))\n (^call 'macros.expand-quote.call 'this (^quote content.node-id)\n (apply ^quoted-hash (alternating-keys-and-values (find-unquotes content))))\n [\"\\\"\" (map-node (transpile content) qescape) \"\\\"\"])\n (do\n (console.log (\"unknown content\" (prettify content)))\n content)))\n\n(def ^debug (val)\n (set sibilant 'debug (eval (output-formatter (transpile val)))) null)\n\n(def map-node (node fn)\n (if (node? node)\n (do\n (var mapped-node (fn node))\n (when (node? mapped-node)\n (set mapped-node 'contents (map-node mapped-node.contents fn)))\n\n mapped-node)\n\n (list? node) (map node (#(c) (map-node c fn)))\n (fn node)))\n\n(def each-node (node fn)\n (if (node? node) (when (fn node) (each-node node.contents fn))\n (list? node) (each (c) node (each-node c fn))\n (fn node)))\n\n\n(def map-node-for-quote-expansion (node expansions)\n (if (node? node)\n (do\n (var mapped-node (if (expansions.has-own-property node.node-id) (get expansions node.node-id) (clone node)))\n (when (node? mapped-node)\n (set mapped-node 'contents (map-node-for-quote-expansion mapped-node.contents expansions)))\n\n (assign mapped-node (splice-dots mapped-node))\n mapped-node)\n\n (list? node)\n (map node (#(c) (map-node-for-quote-expansion c expansions)))\n\n node))\n\n\n(def ^expand-quote (node-id expansions)\n (var expanded-nodes\n (map-node-for-quote-expansion (get sibilant.node-cache node-id) expansions))\n\n (transpile expanded-nodes))\n\n(def unquote? (node) (node? node 'at))\n\n(def find-unquotes (node)\n (var unquotes {})\n (each-node node (#(n)\n (when (unquote? n)\n (set unquotes n.node-id (transpile n)))\n (not (node? n 'tick))))\n unquotes)\n\n(def splice-dots (node)\n (when (list? node.contents)\n (var contents [])\n (each (content) node.contents\n (if (and (node? content 'dots)\n (list? content.contents)\n (= content.contents.length 1)\n (list? (first content.contents)))\n (contents.push.apply contents (first content.contents))\n (contents.push content)))\n\n (set node 'contents contents))\n node)\n\n\n(def alternating-keys-and-values (hash)\n (flatten (map (keys hash)\n (#(key) [key, (get hash key)]))))\n\n\n(def ^list (...args)\n (var arg-segments [])\n (if (empty? args) \"[]\"\n (do\n (def simple-list (args)\n [\"[ \" (interleave \", \" (map args (#(arg) arg.transpiled))) \" ]\"])\n\n (args.for-each (#(arg)\n (if (node? arg 'dots) (arg-segments.push {transpiled (transpile arg)})\n (list? (last arg-segments)) (send (last arg-segments) push {transpiled (transpile arg)})\n (arg-segments.push [{transpiled (transpile arg)}]))))\n\n (assign arg-segments (map arg-segments\n (#(segment)\n (if (list? segment)\n (simple-list segment)\n segment.transpiled))))\n\n (if (= 1 (length arg-segments))\n (first arg-segments)\n [(first arg-segments) \".concat(\" (interleave \", \" (rest arg-segments))\")\"]))))\n\n\n(def ^call (fn-name ...args)\n (if (any? args (#(arg) (node? arg 'dots)))\n (macros.apply fn-name (macros.list ...args))\n [ (transpile fn-name)\n \"(\" (interleave \", \" (map args transpile)) \")\" ]))\n\n(def ^dots (...contents)\n (transpile contents))\n\n",";; (def flatten-output (nodes)\n;; (inject [] nodes\n;; (#(collector item)\n;; (if (list? item) (apply flatten-output item)\n;; (if \n \n\n(def node? (thing type)\n (and\n (exists? thing)\n (= 'object (typeof thing))\n (string? thing.type)\n (or (undefined? type) (= thing.type type))\n (thing.has-own-property 'contents)))\n\n(def empty-node? (item)\n (if (node? item) (empty-node? item.contents)\n (list? item) (all? item empty-node?)\n (string? item) (item.match (regex \"^\\\\s*$\"))\n (or (= null item)\n (undefined? item)\n (= false item))))\n\n(def compact-node (item)\n (if (node? item) (do\n (set item 'contents (compact-node item.contents))\n (if (and item.contents item.contents.length) item null))\n (list? item) (do\n (var compacted (compact (map item compact-node)))\n (if (and compacted compacted.length) compacted null))\n (if (or (= item \"\") (= item false)) null item)))\n\n(def recurse-transpile (node)\n (if (list? node) (map node recurse-transpile)\n (and (node? node) (!= 'output node.type)) (transpile node)\n (and (node? node) (= 'output node.type)) (do\n (set node 'contents (recurse-transpile node.contents))\n node)\n node))\n\n(def transpile (node preprocessor)\n (if\n (string? node)\n (assign node { type 'js token node contents []})\n\n (number? node)\n (assign node { type 'number token (node.to-string) contents []}))\n \n (if (list? node) node\n (exists? node) (do\n (var transpiler (or (get transpile node.type) transpile.default))\n (var result (transpiler node))\n (var result-node (recurse-transpile (if (node? result) result\n { contents result type 'output })))\n (set result-node\n 'contents (compact (flatten result-node.contents))\n 'source node)\n\n (when sibilant.debug\n (console.log (prettify node)\n (red \"->\")\n (prettify result-node)))\n\n (set node 'transpiled result-node)\n\n \n (if (empty-node? result-node) undefined\n result-node))))\n\n\n(set sibilant 'transpile transpile)\n\n(var reader-macros {})\n\n(def transpile.hat (node)\n (var output (transpile (first node.contents)))\n (set output 'contents [(\"macros.\" (first output.contents))])\n output)\n\n(def transpile.tick (node)\n (^quote.apply node node.contents))\n\n(def transpile.at (node)\n (transpile (first node.contents)))\n\n(def transpile.dots (node)\n (^dots.apply node node.contents))\n\n\n(def transpile.default (node)\n node.token)\n\n(def transpile.output (node)\n node)\n\n(def transpile.number (node)\n (send (parse-float (node.token.replace (regex \",\" 'g) \"\")) to-string))\n\n(def transpile.root (node)\n (if (= 1 node.contents.length)\n (transpile (first node.contents))\n (interleave \"\\n\" (compact (map node.contents as-statement)))))\n\n(def transpile.expression (node preprocessor)\n (if node.contents.length\n (do\n (var head (first node.contents)\n args (rest node.contents)\n macro (get macros (output-formatter (transpile head))))\n\n (when (exists? macro) (set head 'hint 'macro))\n\n (when (and head (= 'string head.type))\n (assign macro macros.concat args node.contents))\n\n (when (undefined? macro)\n (assign macro macros.call args node.contents))\n\n (macro.apply node args))\n\n \"null\"))\n\n(def transpile.bracket (node)\n (apply macros.list node.contents))\n\n(def transpile.brace (node) (apply macros.hash node.contents))\n\n(def transpile.literal (node)\n (var string node.token)\n (inject (chain string\n (replace (regex \"\\\\*\" 'g) \"_\")\n (replace (regex \"\\\\?$\") \"__QUERY\")\n (replace (regex \"!$\") \"__BANG\"))\n (string.match (regex \"-(.)\" 'g))\n (#(return-string match)\n (return-string.replace match\n (send (second match) to-upper-case)))))\n\n(def transpile.string (node)\n (chain node.token (split \"\\n\")\n (join \"\\\\n\\\" +\\n\\\"\")))\n\n(def transpile.comment (node) null)\n\n","(def sibilize (input)\n (sibilant.initialize)\n (output-formatter (transpile (restructure (parse input)))))\n\n(def sourcemap (input)\n (sibilant.initialize)\n (sourcemapper (transpile (restructure (parse input)))))\n\n(set sibilant 'sibilize sibilize)\n\n(def sibilant.version ()\n (get (sibilant.package-info) 'version))\n\n(def sibilant.strip-shebang (data)\n (data.replace (regex \"^#!.*\\\\n\") \"\\n\"))\n\n(set sibilant 'file 'eval.sibilant)\n\n(def with-dir-and-file (dir file fn)\n (var before { dir sibilant.dir\n file sibilant.file })\n (set sibilant\n 'dir dir\n 'file file)\n\n (var retval (fn))\n\n (set sibilant\n 'dir before.dir\n 'file before.file)\n\n retval)\n\n(set sibilant 'source-cache {})\n\n(def sibilant.sibilize-file (file-name)\n (output-formatter (sibilant.transpile-file file-name)))\n\n(def sibilant.sibilize-json (file-name)\n (sibilant.initialize)\n (var before sibilant.macros.hash.quote-keys)\n (set sibilant.macros.hash 'quote-keys true)\n (var content (sibilant.sibilize-file file-name))\n (set sibilant.macros.hash 'quote-keys before)\n content)\n\n(def sibilant.macros.include (file)\n (sibilant.include (eval (output-formatter (transpile file)))))\n\n"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/sibilant.sibilant","/Users/jbr/code/sibilant/src/node.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant","/Users/jbr/code/sibilant/src/colors.sibilant","/Users/jbr/code/sibilant/src/pretty-printer.sibilant","/Users/jbr/code/sibilant/src/output-formatter.sibilant","/Users/jbr/code/sibilant/src/sourcemap.sibilant","/Users/jbr/code/sibilant/include/functional.sibilant","/Users/jbr/code/sibilant/src/parser.sibilant","/Users/jbr/code/sibilant/src/restructurer.sibilant","/Users/jbr/code/sibilant/src/macros.sibilant","/Users/jbr/code/sibilant/src/transpiler.sibilant","/Users/jbr/code/sibilant/src/require-and-include.sibilant"],"names":[],"mappings":"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","sourcesContent":["(send (require \"source-map-support\") install)\n(meta \"//# sourceMappingURL=./sibilant.map\\n\")\n\n(include \"./node\")\n(include \"./pretty-printer\")\n(include \"./output-formatter\")\n(include \"./sourcemap\")\n(include \"../include/functional\")\n(include \"./parser\")\n(include \"./restructurer\")\n(include \"./macros\")\n(include \"./transpiler\")\n(include \"./require-and-include\")\n\n","(var sibilant exports\n util (require 'util)\n path (require 'path)\n fs (require 'fs)\n error (#(str) (throw str))\n inspect util.inspect)\n\n(set sibilant 'dir (process.cwd))\n\n\n(def sibilant.transpile-file (file-name)\n (with-dir-and-file (path.dirname file-name) file-name\n (#>\n (var source (sibilant.strip-shebang\n (fs.read-file-sync file-name \"utf8\")))\n\n (set sibilant.source-cache file-name source)\n (sibilant.initialize)\n (transpile (restructure (parse source))))))\n\n\n(def sibilant.sourcemap-file (file-name)\n (with-dir-and-file (path.dirname file-name) file-name\n (#> (sourcemap\n (sibilant.strip-shebang\n (fs.read-file-sync file-name \"utf8\"))))))\n\n\n(set require.extensions \".sibilant\"\n (#(module filename)\n (var content (sibilant.sibilize-file filename))\n (module.*compile content filename)))\n\n(set require.extensions \".son\"\n (#(module filename)\n (var content (sibilant.sibilize-json filename))\n (set module 'exports (JSON.parse content))))\n\n\n(def sibilant.package-info ()\n (var fs (require 'fs))\n (JSON.parse (fs.read-file-sync\n (concat **dirname \"/../package.json\"))))\n\n(def sibilant.version-string ()\n (var package (sibilant.package-info)\n path (require 'path))\n (concat package.name \" version \" package.version\n \"\\n(at \" (path.join **dirname \"..\") \")\"))\n\n\n(def sibilant.initialize ()\n (unless (or sibilant.loaded? sibilant.loading?)\n (set sibilant 'loading? true)\n (sibilant.load-macros)\n (delete sibilant.loading?)\n (set sibilant 'loaded? true)))\n \n(def sibilant.load-macros ()\n (sibilant.include (path.normalize (concat **dirname \"/../include/macros\"))))\n\n\n(def sibilant.include (file)\n (when (not (file.match (regex \"\\\\.(sibilant|son)$\")))\n (assign file (concat file \".sibilant\")))\n\n (when (file.match (regex \"^\\\\.\\\\.?/\"))\n (assign file (concat sibilant.dir \"/\" file)))\n\n (var resolved-file\n (try (require.resolve file)\n (error (\"Failed to resolve file for inclusion: \" file))))\n\n (sibilant.transpile-file resolved-file))\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)","(def log! (...args)\n (send (inspect! ..args ) for-each (#(o) (console.log o))))\n\n(def inspect! (...args)\n (args.map (#(arg) (util.inspect arg { colors false depth 3}))))\n\n(def color (code items depth)\n (concat code (join \"\" items) \"\\033[0m\"))\n\n(def black (...args) (color \"\\033[0;30m\" args))\n(def red (...args) (color \"\\033[0;31m\" args))\n(def green (...args) (color \"\\033[0;32m\" args))\n(def brown (...args) (color \"\\033[0;33m\" args))\n(def blue (...args) (color \"\\033[0;34m\" args))\n(def purple (...args) (color \"\\033[0;35m\" args))\n(def cyan (...args) (color \"\\033[0;36m\" args))\n(def gray (...args) (color \"\\033[0;37m\" args))\n(def bold-gray (...args) (color \"\\033[1;30m\" args))\n(def bold-red (...args) (color \"\\033[1;31m\" args))\n(def bold-green (...args) (color \"\\033[1;32m\" args))\n(def yellow (...args) (color \"\\033[1;33m\" args))\n(def bold-blue (...args) (color \"\\033[1;34m\" args))\n(def bold-purple (...args) (color \"\\033[1;35m\" args))\n(def bold-cyan (...args) (color \"\\033[1;36m\" args))\n(def white (...args) (color \"\\033[1;37m\" args))\n","(include \"./colors.sibilant\")\n\n(def sibilant.pretty-print (node color)\n (when (undefined? color) (assign color true))\n\n (real-newlines (if (node? node) (do\n (var pretty-printer (or (get sibilant.pretty-print node.type)\n sibilant.pretty-print.default))\n (pretty-printer node color))\n (list? node)\n (concat (if color (black \"[\") \"\")\n (join (if color (black \",\") \"\") (map node prettify))\n (if color (black \"]\") \"\"))\n\n color (red (util.inspect node))\n (real-newlines (util.inspect node)))))\n\n\n(def sibilant.pretty-print.default (node color)\n (real-newlines (sibilant.pretty-print.colorize node color\n (concat\n (if (and node.modifiers node.modifiers.length)\n (join \"\" (map node.modifiers (#(n) (sibilant.pretty-print n color)))) \"\")\n node.token\n (if (and node.contents node.contents.length)\n (join \" \" (map node.contents (#(n) (sibilant.pretty-print n color)))) \"\")\n (or (get acceptable-pairs node.token) \"\")))))\n\n(def sibilant.pretty-print.root (node color)\n (join \"\\n\" (map node.contents (#(n) (sibilant.pretty-print n color)))))\n\n(def sibilant.pretty-print.output (node color)\n (concat (if color (black \"{\") \"\")\n (if (list? node.contents)\n (join (if color (black \",\") \"\")\n (map node.contents (#(c) (sibilant.pretty-print.colorize node color (prettify c)))))\n (sibilant.pretty-print.colorize node color node.contents))\n (if color (black \"}\") \"\")))\n\n(def real-newlines (node)\n (chain node (split \"\\\\n\") (join \"\\n\")))\n\n\n(def sibilant.pretty-print.colorize (node color string)\n (if (not color) string\n (= node.hint 'macro) (yellow string)\n (= node.type 'output) (purple string)\n (green string)))\n\n(var prettify sibilant.pretty-print)","(def output-formatter (node)\n (if (list? node) (join \"\" (map node output-formatter))\n (and (node? node) (= node.type 'output))\n (output-formatter node.contents)\n (or (string? node) (number? node)) node\n (not (exists? node)) \"\"\n (node? node) (do\n (console.log \"WE SHOULD NOT BE HERE\")\n (output-formatter (transpile node)))))\n\n(set sibilant 'output-formatter output-formatter)","(var source-node (get (require \"source-map\") 'Source-node))\n\n(def source-map (node)\n (if\n (and (node? node) (= node.type 'output))\n (new source-node\n node.source.line\n node.source.col\n node.source.file\n (if (list? node.contents)\n (map node.contents source-map)\n (source-map node.contents)))\n\n (or (string? node) (number? node)) (node.to-string)))\n\n\n(def sourcemapper (node)\n (var source-nodes (source-map (transpile node))\n map (get (source-nodes.to-string-with-source-map) 'map))\n\n (each (key) (keys sibilant.source-cache)\n (map.set-source-content key (get sibilant.source-cache key)))\n\n (map.to-string))","(def bulk-map (arr fn)\n (var index 0\n group-size fn.length\n ret-arr [])\n\n (while (< index arr.length)\n (send ret-arr push\n (apply fn (send arr slice\n index (+ index group-size))))\n (incr-by index group-size))\n ret-arr)\n\n(def inject (start items fn)\n (var value start)\n (when (list? items)\n (each (item index) items\n (assign value (fn value item index))))\n value)\n\n(def map (items fn)\n (inject [] items\n (#(collector item index)\n (send collector push (fn item index))\n collector)))\n\n(def select (items fn)\n (inject [] items\n (#(collector item index)\n (when (fn item index)\n (send collector push item))\n collector)))\n\n(def detect (items fn)\n (var return-item undefined\n index 0\n items (or items []))\n\n (until (or (= items.length index) return-item)\n (when (fn (get items index) index)\n (assign return-item (get items index)))\n (incr index))\n\n return-item)\n\n(def all? (items fn)\n (undefined? (detect items (#(item index) (not (fn item index))))))\n\n(def none? (items fn)\n (undefined? (detect items fn)))\n\n(def any? (items fn)\n (defined? (detect items fn)))\n\n(def reject (items fn)\n (var args [ items fn ])\n (select items (thunk (not (apply fn arguments)))))\n\n(def compact (arr)\n (select arr (#(item)\n (and\n (!= null item)\n (!= false item)\n (defined? item)))))\n\n(def interleave (glue arr)\n (if (list? glue) (inject [] arr\n (#(collector item index)\n (collector.concat [item (get glue index)])))\n\n \n (inject [(first arr)] (rest arr)\n (#(collector item index) (collector.concat [glue item])))))\n\n\n(def flatten (...items)\n (inject [] items\n (#(collector item)\n (collector.concat\n (if (list? item)\n (apply flatten item)\n item)))))\n\n\n(def recurse-map (item fn)\n (if (list? item) (map item (#(subitem) (recurse-map subitem fn)))\n (fn item)))\n\n(def pluck (items attribute)\n (map items (#(item) (get item attribute))))\n\n(def merge-into (into from)\n (each (key) (keys from) (set into key (get from key)))\n into)\n\n(def clone (object)\n (inject {} (keys object)\n (#(collector key)\n (set collector key (get object key))\n collector)))\n\n(def map-values (object fn)\n (inject {} (keys object)\n (#(collector key index)\n (set collector key (fn (get object key) key))\n collector)))\n\n(def merge-with (into from)\n (merge-into (clone into) from))\n","(var parser {})\n(set sibilant 'parser parser)\n(set parser 'tokens\n { 'regex \"(\\\\/(\\\\\\\\\\\\\\/|[^\\\\/\\\\n])+\\\\/[glim]*)\"\n 'comment \"(;.*)\"\n 'string \"(\\\"(([^\\\"]|(\\\\\\\\\\\"))*[^\\\\\\\\])?\\\")\"\n 'number \"(-?[0-9][0-9.,]*)\"\n 'literal \"(-?[*.$a-zA-Z_][*.a-zA-Z0-9-_]*(\\\\?|!)?)\"\n 'special \"([&'])\"\n 'at \"@\"\n 'tick \"[`']\"\n 'hat \"(\\\\^)\"\n 'dots \"(\\\\.+)\"\n 'arg-placeholder \"(#[0-9]+)\"\n 'other-char \"([#><=!\\\\+\\\\/\\\\*-]+)\"\n 'open-expression \"(\\\\(|\\\\{|\\\\[)\"\n 'close-expression \"(\\\\)|\\\\}|\\\\])\"\n 'newline \"\\\\n\"\n 'whitespace \"\\\\s\"\n 'ignored \".\" })\n\n(set parser 'token-precedence [ 'regex\n 'comment\n 'string\n 'number\n 'dots\n 'tick\n 'hat\n 'at\n 'special\n 'literal\n 'arg-placeholder\n 'other-char\n 'open-expression\n 'close-expression\n 'newline\n 'whitespace\n 'ignored\n ]\n 'ordered-regexes (parser.token-precedence.map\n (#(x)\n (var r (regex (\"^\" (get parser.tokens x))))\n (set r 'name x)\n r)))\n\n(var ordered-regexes parser.ordered-regexes)\n\n(set sibilant 'node-cache (or sibilant.node-cache {}))\n(def node-id (node)\n (incr node-id.last-id))\n(def cache-node (node)\n (var id (node-id node))\n (set sibilant.node-cache id node)\n (merge-into node {node-id id}))\n\n(set node-id 'last-id 0)\n\n(def parser.parse (string context)\n (var context (or context\n { position 0\n stack []\n line 1\n last-newline 0 col 0})\n match true\n regex-name null\n remaining-input string)\n\n (while match\n (detect ordered-regexes\n (#(r)\n (assign match (r.exec remaining-input)\n regex-name r.name)\n match))\n\n (when (exists? match)\n (var match-string (first match)\n length (length match-string))\n \n (context.stack.push\n (cache-node { contents []\n dir sibilant.dir\n file sibilant.file\n token match-string\n type regex-name\n start context.position\n line context.line\n col context.col\n length length }))\n\n (if\n (= 'newline regex-name)\n (do\n (incr context.line)\n (set context\n 'col 0\n 'last-newline context.position))\n\n (and (= 'string regex-name)\n (includes? match-string \"\\n\"))\n (do\n (var string-newline-count (- (length (match-string.split \"\\n\")) 1))\n (incr-by context.line string-newline-count)\n (set context 'col (- length (match-string.last-index-of \"\\n\"))))\n\n (incr-by context.col length))\n\n (incr-by context.position length)\n (assign remaining-input (if remaining-input.length\n (remaining-input.slice length)\n \"\"))))\n context.stack)\n\n(var parse parser.parse)\n","(var restructurers {}\n acceptable-pairs { \"(\" \")\" \"[\" \"]\" \"{\" \"}\" }\n bracket-types { \"(\" 'expression\n \"[\" 'bracket\n \"{\" 'brace })\n\n(def restructure (input)\n (var output { type 'root\n contents []\n file sibilant.file\n col 0\n line 1 }\n context { parse-stack [output]\n output output\n input input\n specials 0 })\n\n (inject context input\n (#(context token index)\n (var restructurer (or (get restructurers token.type) restructurers.default))\n (restructurer token context index)))\n output)\n\n(set sibilant 'restructure restructure)\n\n(def restructurers.open-expression (token context)\n (var first (first context.parse-stack))\n (set token\n 'contents []\n 'type (get bracket-types token.token)\n 'parent first)\n (accept-specials token context)\n (send first.contents push token)\n (context.parse-stack.unshift token)\n context)\n\n\n(def restructurers.close-expression (node context index)\n (var first (first context.parse-stack))\n\n (when (!= (get acceptable-pairs first.token) node.token)\n (throw (\"trying to close \" (yellow (sibilant.pretty-print first))\n \"\\n on \"first.file\":\"first.line\":\"first.col\n \"\\n with \"(sibilant.pretty-print node)\n \"\\n on \"node.file\":\"node.line\":\"node.col\n \"\\n\")))\n\n (set first 'end node.end)\n (context.parse-stack.shift)\n (close-specials first context)\n (when (zero? context.parse-stack.length)\n (throw (\"unbalanced parens:\\n\"\n (call inspect parse-stack))))\n context)\n\n(def open-special (node context)\n (incr context.specials)\n\n (var first (first context.parse-stack))\n (set node\n 'contents []\n 'parent first)\n\n (first.contents.push node)\n (context.parse-stack.unshift node)\n context)\n\n(def accept-specials (node context)\n (set node 'specials (get context 'specials))\n (set context 'specials 0)\n context)\n\n(def close-specials (node context)\n (when (> node.specials 0)\n (decr node.specials)\n (context.parse-stack.shift)\n (close-specials node context))\n context)\n\n(def restructurers.hat (node context index) (open-special node context))\n(def restructurers.dots (node context index) (open-special node context))\n(def restructurers.tick (node context index) (open-special node context))\n(def restructurers.at (node context index) (open-special node context))\n\n(def restructurers.whitespace (token context index) context)\n(def restructurers.newline (token context index) context)\n(def restructurers.ignored (token context index) context)\n\n(def restructurers.default (token context index)\n (accept-specials token context)\n (send (get (first context.parse-stack) 'contents) push token)\n (close-specials token context))\n","(var macros {})\n(set sibilant 'macros macros 'debug false)\n\n\n(def recurse-indent (...args)\n (map args\n (#(arg)\n (if (node? arg) (do (set arg 'contents (apply recurse-indent (compact (flatten arg.contents)))) arg)\n (list? arg) (apply recurse-indent arg)\n (number? arg) (arg.to-string)\n (string? arg)\n (chain arg\n (replace (regex \"\\\\n\" 'g) \"\\n \")\n (replace (regex \"\\\\n\\\\s+\\\\n\" 'g) \"\\n\\n\"))\n\n arg))))\n\n(def indent (...args)\n [\"\\n \" (recurse-indent args) \"\\n\"])\n\n\n(def escape-regex (string)\n (string.replace (regex \"[\\\\-\\\\[\\\\]\\\\/\\\\{\\\\}\\\\(\\\\)\\\\*\\\\+\\\\?\\\\.\\\\\\\\\\^\\\\$\\\\|]\" 'g) \"\\\\$&\"))\n\n(def ^return (token)\n (when sibilant.debug (console.log \"returning \" (prettify token)))\n (var default-return (as-statement [\"return \" (transpile token)]))\n (if (and token token.contents token.contents.length)\n (switch (get (first token.contents) 'token)\n (('return 'throw 'do) (transpile token))\n ('delete\n (var delete-macro (get macros 'delete))\n (if (< token.contents.length 3) default-return\n [ (as-statement (apply delete-macro (token.contents.slice 1 -1)))\n \"\\nreturn \"\n (as-statement (call delete-macro (last token.contents)))]))\n ('assign\n (if (< token.contents.length 4) default-return\n [ (apply ^assign\n (token.contents.slice 1 (- token.contents.length 2)))\n \"\\nreturn \"\n (apply ^assign (token.contents.slice -2))]))\n ('var\n [ (transpile token) \"\\nreturn \" (transpile (if (even? token.contents.length)\n (last token.contents)\n (first (token.contents.slice -2))))])\n ('set\n (if (< token.contents.length 5) default-return\n (do\n (var obj (second token.contents)\n non-return-part (token.contents.slice 2 (- token.contents.length 2))\n return-part (token.contents.slice -2))\n (non-return-part.unshift obj)\n (return-part.unshift obj)\n [ (^set ...non-return-part)\n \"\\nreturn \"\n (^set ...return-part)])))\n (default default-return))\n default-return))\n\n\n(def statement? (transpiled)\n (if (node? transpiled) (statement? transpiled.contents)\n (list? transpiled) (statement? (last transpiled))\n (string? transpiled) (= \";\" (last transpiled))\n false))\n\n(def as-statement (node)\n (var transpiled (transpile node))\n\n (if (empty-node? transpiled) undefined\n (statement? transpiled) transpiled\n [ transpiled \";\" ]))\n\n(def ^do (...body)\n (if (= 1 body.length) (^return (first body))\n body.length [ (interleave \"\\n\" (map (body.slice 0 -1) (#(node) (as-statement node))))\n \"\\n\"\n (^return (last body)) ]\n \"\"))\n\n(def ^empty-list () 'null)\n\n(def ^def (fn-name args ...body)\n (var fn-name-tr (transpile fn-name) this-node this)\n\n (as-statement [ (if (match? (regex \"\\\\.\") (output-formatter fn-name-tr)) \"\" \"var \")\n fn-name-tr \" = \"\n (^lambda { name fn-name args args node this-node } ...body )\n ] ))\n\n(def ^macro (name args ...body)\n (var name-tr (output-formatter (transpile name))\n options { name name args args node this}\n js (output-formatter (^lambda options ...body)))\n\n (when sibilant.debug (console.log js))\n \n (try (set macros name-tr (eval js))\n (error (\"error in parsing macro \"\n (sibilant.pretty-print name) \":\\n\" js)))\n\n undefined)\n\n(def ^meta (...body)\n (var js (output-formatter (^scoped ...body)))\n (when sibilant.debug (console.log js))\n (output-formatter (eval js)))\n\n\n(def ^concat (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n\n(def ^reverse (arr)\n (var reversed [])\n (each (item) arr (reversed.unshift item))\n reversed)\n\n(var reverse ^reverse)\n\n(def ^lambda (args-or-options ...body)\n (when sibilant.debug\n (console.log args-or-options))\n (var args (or (get args-or-options 'args) args-or-options)\n body (or (get args-or-options 'body) body)\n args (if (node? args 'expression) args.contents\n (and (node? args) (empty? body)) (do (assign body [ args ]) [])\n args)\n name (when args-or-options.name\n (chain (output-formatter (transpile args-or-options.name))\n (replace (regex \"\\\\W+\" 'g) \"$\")\n (concat \"$\")))\n rest (detect args\n (#(arg) (node? arg 'dots))))\n\n (var this-node this\n node (detect\n [ args-or-options.node this-node args-or-options.name args (first body) ]\n (#(n) (and (node? n) (get n 'file)))))\n [\"(function\" (if name (\" \" name) \"\") \"(\"\n (interleave \", \" (map args transpile)) \") {\"\n (if (or args-or-options.name node)\n (indent [\"/*\"\n (if args-or-options.name (\" \" (sibilant.pretty-print args-or-options.name false)) \"\")\n (if node (\" \" node.file \":\" node.line \":\" node.col) \"\")\n \" */\"]) \"\")\n (when (exists? rest)\n (indent (as-statement [\"var \" (transpile rest)\n \" = Array.prototype.slice.call(arguments, \"\n (- args.length 1) \")\"])))\n\n (indent (apply ^do body))\n \"})\"])\n\n(set macros \"#\" ^lambda)\n\n(def ^quoted-hash (...pairs)\n (var cached-quote-value ^hash.quote-keys)\n (set ^hash 'quote-keys true)\n (var value (^hash ...pairs))\n (set ^hash 'quote-keys cached-quote-value)\n value)\n\n(def ^hash (...pairs)\n (when (odd? pairs.length)\n (error (\"odd number of key-value pairs in hash: \"\n (call inspect pairs))))\n\n (var quote-keys ^hash.quote-keys\n pair-strings (bulk-map pairs (#(key value)\n [ (if (and quote-keys (not (node? key 'string)))\n [\"\\\"\" (transpile key) \"\\\"\"]\n (transpile key))\n \": \"\n (transpile value)])))\n (if (>= 1 pair-strings.length)\n [\"{ \" (interleave \", \" pair-strings) \" }\"]\n [\"{\" (indent (interleave \",\\n\" pair-strings)) \"}\"]))\n\n\n(def qescape (content)\n (if (not (exists? content)) \"\"\n (string? content) (chain content\n (replace (regex \"\\\"\" 'g) \"\\\\\\\"\")\n (replace (regex \"\\\\n\" 'g) \"\\\\n\\\" +\\n\\\"\"))\n content))\n\n(def log-pretty (label arg)\n (console.log (concat label \": \" (prettify arg)))\n arg)\n\n(var pretty-log log-pretty)\n\n(def ^quote (content)\n (if (string? content) (\"\\\"\" (qescape content) \"\\\"\")\n (number? content) (^quote (content.to-string))\n (node? content 'literal) [\"\\\"\" (transpile content) \"\\\"\"]\n (node? content 'expression)\n (if (length (keys (find-unquotes content)))\n (^call 'macros.expand-quote.call 'this (^quote content.node-id)\n (apply ^quoted-hash (alternating-keys-and-values (find-unquotes content))))\n [\"\\\"\" (map-node (transpile content) qescape) \"\\\"\"])\n\n (node? content 'bracket)\n (if (length (keys (find-unquotes content)))\n (^call 'macros.expand-quote.call 'this (^quote content.node-id)\n (apply ^quoted-hash (alternating-keys-and-values (find-unquotes content))))\n (^list ...(map content.contents ^quote)))\n\n (node? content 'brace)\n (if (length (keys (find-unquotes content)))\n (^call 'macros.expand-quote.call 'this (^quote content.node-id)\n (apply ^quoted-hash (alternating-keys-and-values (find-unquotes content))))\n (^hash ...(map content.contents ^quote)))\n\n (do\n (console.log (\"unknown content\" (prettify content)))\n content)))\n\n(def ^debug (val)\n (set sibilant 'debug (eval (output-formatter (transpile val)))) null)\n\n(def map-node (node fn)\n (if (node? node)\n (do\n (var mapped-node (fn node))\n (when (node? mapped-node)\n (set mapped-node 'contents (map-node mapped-node.contents fn)))\n\n mapped-node)\n\n (list? node) (map node (#(c) (map-node c fn)))\n (fn node)))\n\n(def each-node (node fn)\n (if (node? node) (when (fn node) (each-node node.contents fn))\n (list? node) (each (c) node (each-node c fn))\n (fn node)))\n\n\n(def map-node-for-quote-expansion (node expansions)\n (if (node? node)\n (do\n (var mapped-node (if (expansions.has-own-property node.node-id) (get expansions node.node-id) (clone node)))\n (when (node? mapped-node)\n (set mapped-node 'contents (map-node-for-quote-expansion mapped-node.contents expansions)))\n\n (assign mapped-node (splice-dots mapped-node))\n mapped-node)\n\n (list? node)\n (map node (#(c) (map-node-for-quote-expansion c expansions)))\n\n node))\n\n\n(def ^expand-quote (node-id expansions)\n (var expanded-nodes\n (map-node-for-quote-expansion (get sibilant.node-cache node-id) expansions))\n\n (transpile expanded-nodes))\n\n(def unquote? (node) (node? node 'at))\n\n(def find-unquotes (node)\n (var unquotes {})\n (each-node node (#(n)\n (when (unquote? n)\n (set unquotes n.node-id (transpile n)))\n (not (node? n 'tick))))\n unquotes)\n\n(def splice-dots (node)\n (when (and node (list? node.contents))\n (var contents [])\n (each (content) node.contents\n (if (and (node? content 'dots)\n (list? content.contents)\n (= content.contents.length 1)\n (list? (first content.contents)))\n (contents.push.apply contents (first content.contents))\n (contents.push content)))\n\n (set node 'contents contents))\n node)\n\n\n(def alternating-keys-and-values (hash)\n (flatten (map (keys hash)\n (#(key) [key, (get hash key)]))))\n\n\n(def ^list (...args)\n (var arg-segments [])\n (if (empty? args) \"[]\"\n (do\n (def simple-list (args)\n [\"[ \" (interleave \", \" (map args (#(arg) arg.transpiled))) \" ]\"])\n\n (args.for-each (#(arg)\n (if (node? arg 'dots) (arg-segments.push {transpiled (transpile arg)})\n (list? (last arg-segments)) (send (last arg-segments) push {transpiled (transpile arg)})\n (arg-segments.push [{transpiled (transpile arg)}]))))\n\n (assign arg-segments (map arg-segments\n (#(segment)\n (if (list? segment)\n (simple-list segment)\n segment.transpiled))))\n\n (if (= 1 (length arg-segments))\n (first arg-segments)\n [(first arg-segments) \".concat(\" (interleave \", \" (rest arg-segments))\")\"]))))\n\n\n(def ^call (fn-name ...args)\n (if (any? args (#(arg) (node? arg 'dots)))\n (macros.apply fn-name (macros.list ...args))\n [ (transpile fn-name)\n \"(\" (interleave \", \" (map args transpile)) \")\" ]))\n\n(def ^dots (...contents)\n (transpile contents))\n\n",";; (def flatten-output (nodes)\n;; (inject [] nodes\n;; (#(collector item)\n;; (if (list? item) (apply flatten-output item)\n;; (if \n \n\n(def node? (thing type)\n (and\n (exists? thing)\n (= 'object (typeof thing))\n (string? thing.type)\n (or (undefined? type) (= thing.type type))\n (thing.has-own-property 'contents)))\n\n(def empty-node? (item)\n (if (node? item) (empty-node? item.contents)\n (list? item) (all? item empty-node?)\n (string? item) (item.match (regex \"^\\\\s*$\"))\n (or (= null item)\n (undefined? item)\n (= false item))))\n\n(def compact-node (item)\n (if (node? item) (do\n (set item 'contents (compact-node item.contents))\n (if (and item.contents item.contents.length) item null))\n (list? item) (do\n (var compacted (compact (map item compact-node)))\n (if (and compacted compacted.length) compacted null))\n (if (or (= item \"\") (= item false)) null item)))\n\n(def recurse-transpile (node)\n (if (list? node) (map node recurse-transpile)\n (and (node? node) (!= 'output node.type)) (transpile node)\n (and (node? node) (= 'output node.type)) (do\n (set node 'contents (recurse-transpile node.contents))\n node)\n node))\n\n(def transpile (node preprocessor)\n (if\n (string? node)\n (assign node { type 'js token node contents []})\n\n (number? node)\n (assign node { type 'number token (node.to-string) contents []}))\n \n (if (list? node) node\n (exists? node) (do\n (var transpiler (or (get transpile node.type) transpile.default))\n (var result (transpiler node))\n (var result-node (recurse-transpile (if (node? result) result\n { contents result type 'output })))\n (set result-node\n 'contents (compact (flatten result-node.contents))\n 'source node)\n\n (when sibilant.debug\n (console.log (prettify node)\n (red \"->\")\n (prettify result-node)))\n\n (set node 'transpiled result-node)\n\n \n (if (empty-node? result-node) undefined\n result-node))))\n\n\n(set sibilant 'transpile transpile)\n\n(var reader-macros {})\n\n(def transpile.hat (node)\n (var output (transpile (first node.contents)))\n (set output 'contents [(\"macros.\" (first output.contents))])\n output)\n\n(def transpile.tick (node)\n (^quote.apply node node.contents))\n\n(def transpile.at (node)\n (transpile (first node.contents)))\n\n(def transpile.dots (node)\n (^dots.apply node node.contents))\n\n\n(def transpile.default (node)\n node.token)\n\n(def transpile.output (node)\n node)\n\n(def transpile.number (node)\n (send (parse-float (node.token.replace (regex \",\" 'g) \"\")) to-string))\n\n(def transpile.root (node)\n (if (= 1 node.contents.length)\n (transpile (first node.contents))\n (interleave \"\\n\" (compact (map node.contents as-statement)))))\n\n(def transpile.expression (node preprocessor)\n (if node.contents.length\n (do\n (var head (first node.contents)\n args (rest node.contents)\n macro (get macros (output-formatter (transpile head))))\n\n (when (exists? macro) (set head 'hint 'macro))\n\n (when (and head (= 'string head.type))\n (assign macro macros.concat args node.contents))\n\n (when (undefined? macro)\n (assign macro macros.call args node.contents))\n\n (macro.apply node args))\n\n \"null\"))\n\n(def transpile.bracket (node)\n (apply macros.list node.contents))\n\n(def transpile.brace (node) (apply macros.hash node.contents))\n\n(def transpile.literal (node)\n (var string node.token)\n (inject (chain string\n (replace (regex \"\\\\*\" 'g) \"_\")\n (replace (regex \"\\\\?$\") \"__QUERY\")\n (replace (regex \"!$\") \"__BANG\"))\n (string.match (regex \"-(.)\" 'g))\n (#(return-string match)\n (return-string.replace match\n (send (second match) to-upper-case)))))\n\n(def transpile.string (node)\n (chain node.token (split \"\\n\")\n (join \"\\\\n\\\" +\\n\\\"\")))\n\n(def transpile.comment (node) null)\n\n","(def sibilize (input)\n (sibilant.initialize)\n (output-formatter (transpile (restructure (parse input)))))\n\n(def sourcemap (input)\n (sibilant.initialize)\n (sourcemapper (transpile (restructure (parse input)))))\n\n(set sibilant 'sibilize sibilize)\n\n(def sibilant.version ()\n (get (sibilant.package-info) 'version))\n\n(def sibilant.strip-shebang (data)\n (data.replace (regex \"^#!.*\\\\n\") \"\\n\"))\n\n(set sibilant 'file 'eval.sibilant)\n\n(def with-dir-and-file (dir file fn)\n (var before { dir sibilant.dir\n file sibilant.file })\n (set sibilant\n 'dir dir\n 'file file)\n\n (var retval (fn))\n\n (set sibilant\n 'dir before.dir\n 'file before.file)\n\n retval)\n\n(set sibilant 'source-cache {})\n\n(def sibilant.sibilize-file (file-name)\n (output-formatter (sibilant.transpile-file file-name)))\n\n(def sibilant.sibilize-json (file-name)\n (sibilant.initialize)\n (var before sibilant.macros.hash.quote-keys)\n (set sibilant.macros.hash 'quote-keys true)\n (var content (sibilant.sibilize-file file-name))\n (set sibilant.macros.hash 'quote-keys before)\n content)\n\n(def sibilant.macros.include (file)\n (sibilant.include (eval (output-formatter (transpile file)))))\n\n"]} \ No newline at end of file diff --git a/lib/sourcemap.map b/lib/sourcemap.map index fcd7aae..cc857e5 100644 --- a/lib/sourcemap.map +++ b/lib/sourcemap.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/sourcemap.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"AAAA,IAAK,UAAL,GAAiB,CAAM,OAAD,CAAS,YAAT,CAAL,EAA4B,CAAC,UAAD,CAA5B,CAAjB,C;AAEA,IAAK,SAAL,wBAAiB,IAAjB;AAAA;AAAA;AAAA,SACK;AAAA,QACC,CAAM,WAAD,CAAO,IAAP,CAAL,IAAkB,CAAG,SAAH,KAAa,CAAC,MAAD,CAAb,CAAlB,CADD;AAAA,MC6UuC,OD3UrC,KAAK,UCwGK,CDvGL,gBCuGK,EDtGL,eCsGK,EDrGL,gBCqGK,EDpGL;AAAA,YAAI,EAAO,aAAP,aAAO,aAAP,mBAAO,aAAP,+BAAJ;AAAA,UCuUgC,ODtUlB,GAAD,CAAK,aAAL,EAAmB,SAAnB,CCsUmB,CDvUhC;AAAA;AAAA,UCyUmC,ODvUrB,SAAD,CAAY,aAAZ,CCuUsB,CDzUnC;AAAA;AAAA,UCoGK,CDxGV,CC2UqC,CD7UvC;AAAA,eAUE,CAAI,OAAS,IAAT,cAAJ,IAAmB,CCyIiB,ODzIR,IAAT,KCyIiC,CAAC,MAAD,CDzIjC,CAAnB,CAVF;AAAA,MC6UuC,ODnUD,aAAD,ECmUE,CD7UvC;AAAA;AAAA,MADL;AAAA,G;AAcA,IAAK,YAAL,2BAAmB,IAAnB;AAAA;AAAA;AAAA,EACK,IAAK,WAAL,GAAmB,SAAD,CAAa,SAAD,CAAW,IAAX,CAAZ,CAAlB;AAAA,MACK,GADL,GACS,CAAM,iCAAD,EAAL,EAA8C,CAAC,GAAD,CAA9C,CADT,CADL;AAAA,ECiQS,WD7PQ,CAAM,oBAAN,CAAZ,CC8LgB,OD9LhB,CC+LS,UD/LF,GC+LE;AAAA;AAAA;AAAA,WD9LF,oBAAD,CAAwB,GAAxB,EAA4B,CAAK,oBAAL,EAA2B,GAA3B,CAA5B,CC8LG;AAAA,ID/LT,CAJL;AAAA,SAOM,YAAD,EAPL;AAAA","sourcesContent":["(var source-node (get (require \"source-map\") 'Source-node))\n\n(def source-map (node)\n (if\n (and (node? node) (= node.type 'output))\n (new source-node\n node.source.line\n node.source.col\n node.source.file\n (if (list? node.contents)\n (map node.contents source-map)\n (source-map node.contents)))\n\n (or (string? node) (number? node)) (node.to-string)))\n\n\n(def sourcemapper (node)\n (var source-nodes (source-map (transpile node))\n map (get (source-nodes.to-string-with-source-map) 'map))\n\n (each (key) (keys sibilant.source-cache)\n (map.set-source-content key (get sibilant.source-cache key)))\n\n (map.to-string))","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/sourcemap.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"AAAA,IAAK,UAAL,GAAiB,CAAM,OAAD,CAAS,YAAT,CAAL,EAA4B,CAAC,UAAD,CAA5B,CAAjB,C;AAEA,IAAK,SAAL,wBAAiB,IAAjB;AAAA;AAAA;AAAA,SACK;AAAA,QACC,CAAM,WAAD,CAAO,IAAP,CAAL,IAAkB,CAAG,SAAH,KAAa,CAAC,MAAD,CAAb,CAAlB,CADD;AAAA,MC6VuC,OD3VrC,KAAK,UCwGK,CDvGL,gBCuGK,EDtGL,eCsGK,EDrGL,gBCqGK,EDpGL;AAAA,YAAI,EAAO,aAAP,aAAO,aAAP,mBAAO,aAAP,+BAAJ;AAAA,UCuVgC,ODtVlB,GAAD,CAAK,aAAL,EAAmB,SAAnB,CCsVmB,CDvVhC;AAAA;AAAA,UCyVmC,ODvVrB,SAAD,CAAY,aAAZ,CCuVsB,CDzVnC;AAAA;AAAA,UCoGK,CDxGV,CC2VqC,CD7VvC;AAAA,eAUE,CAAI,OAAS,IAAT,cAAJ,IAAmB,CCsIiB,ODtIR,IAAT,KCsIiC,CAAC,MAAD,CDtIjC,CAAnB,CAVF;AAAA,MC6VuC,ODnVD,aAAD,ECmVE,CD7VvC;AAAA;AAAA,MADL;AAAA,G;AAcA,IAAK,YAAL,2BAAmB,IAAnB;AAAA;AAAA;AAAA,EACK,IAAK,WAAL,GAAmB,SAAD,CAAa,SAAD,CAAW,IAAX,CAAZ,CAAlB;AAAA,MACK,GADL,GACS,CAAM,iCAAD,EAAL,EAA8C,CAAC,GAAD,CAA9C,CADT,CADL;AAAA,ECiRS,WD7QQ,CAAM,oBAAN,CAAZ,CC2LgB,OD3LhB,CC4LS,UD5LF,GC4LE;AAAA;AAAA;AAAA,WD3LF,oBAAD,CAAwB,GAAxB,EAA4B,CAAK,oBAAL,EAA2B,GAA3B,CAA5B,CC2LG;AAAA,ID5LT,CAJL;AAAA,SAOM,YAAD,EAPL;AAAA","sourcesContent":["(var source-node (get (require \"source-map\") 'Source-node))\n\n(def source-map (node)\n (if\n (and (node? node) (= node.type 'output))\n (new source-node\n node.source.line\n node.source.col\n node.source.file\n (if (list? node.contents)\n (map node.contents source-map)\n (source-map node.contents)))\n\n (or (string? node) (number? node)) (node.to-string)))\n\n\n(def sourcemapper (node)\n (var source-nodes (source-map (transpile node))\n map (get (source-nodes.to-string-with-source-map) 'map))\n\n (each (key) (keys sibilant.source-cache)\n (map.set-source-content key (get sibilant.source-cache key)))\n\n (map.to-string))","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file diff --git a/lib/testing.map b/lib/testing.map index 0eadd6e..3696213 100644 --- a/lib/testing.map +++ b/lib/testing.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/testing.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"AAAC,M,CAAO,W,EAAY,UAAG,GAAH,EAAO,IAAP;AAAA;AAAA;AAAA,SAClB;AAAA,QAAI,GAAJ;AAAA,MC+U0C,iBD9UjC,GC8UiC,CD/U1C;AAAA;AAAA,MCiV6C,OD/U1C,WAAD,CAAc,cAAD,CAAgB,IAAhB,CAAb,CC+U2C,CDjV7C;AAAA;AAAA,MADkB;AAAA,E","sourcesContent":["(d3.csv \"spots.csv\" (#(err data)\n (if err\n (throw err)\n (console.log (JSON.stringify data)))))\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/testing.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"AAAC,M,CAAO,W,EAAY,UAAG,GAAH,EAAO,IAAP;AAAA;AAAA;AAAA,SAClB;AAAA,QAAI,GAAJ;AAAA,MC+V0C,iBD9VjC,GC8ViC,CD/V1C;AAAA;AAAA,MCiW6C,OD/V1C,WAAD,CAAc,cAAD,CAAgB,IAAhB,CAAb,CC+V2C,CDjW7C;AAAA;AAAA,MADkB;AAAA,E","sourcesContent":["(d3.csv \"spots.csv\" (#(err data)\n (if err\n (throw err)\n (console.log (JSON.stringify data)))))\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file diff --git a/lib/transpiler.map b/lib/transpiler.map index fa6e9d5..c6f94a3 100644 --- a/lib/transpiler.map +++ b/lib/transpiler.map @@ -1 +1 @@ -{"version":3,"sources":["/Users/jbr/code/sibilant/src/transpiler.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"AAOA,IAAK,WAAL,0BAAY,KAAZ,EAAkB,IAAlB;AAAA;AAAA;AAAA,SACK,CACC,CCsXO,CA3O+B,OD3I7B,KCsXF,KA3O+C,CAAC,SAAD,CA2O/C,CDtXP,ICsXyB,CDtXhB,KCsXgB,KAAW,IAAX,CDtXzB,CADD,IAEC,CAAG,CAAC,MAAD,CAAH,KAAW,OAAQ,KAAnB,CAFD,IAGC,OAAS,UAAT,cAHD,IAIC,CAAI,CCsIiC,ODtIrB,IAAZ,KCsIiD,CAAC,SAAD,CDtIjD,CAAJ,IAAsB,CAAG,UAAH,KAAc,IAAd,CAAtB,CAJD,IAKE,oBAAD,CAAwB,CAAC,QAAD,CAAxB,CALD,CADL;AAAA,G;AAQA,IAAK,gBAAL,+BAAkB,IAAlB;AAAA;AAAA;AAAA,SACK;AAAA,QAAK,WAAD,CAAO,IAAP,CAAJ;AAAA,MCgUuC,ODhUrB,gBAAD,CAAa,aAAb,CCgUsB,CDhUvC;AAAA,eACI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BADJ;AAAA,MCgUuC,OD/TrB,UAAD,CAAM,IAAN,EAAW,gBAAX,CC+TsB,CDhUvC;AAAA,eAEI,OAAS,IAAT,cAFJ;AAAA,MCgUuC,OD9TnB,UAAD,CAAY,KC8FvB,MAHI,CD3F0B,QC2F1B,E,SAAA,CD3FmB,CAAZ,CC8ToB,CDhUvC;AAAA;AAAA,MCkU0C,OD/TtC,CAAI,CAAG,IAAH,KAAQ,IAAR,CAAJ,IACI,CC8H8B,OD9HlB,IAAZ,KC8H8C,CAAC,SAAD,CD9H9C,CADJ,IAEI,CAAG,KAAH,KAAS,IAAT,CAFJ,CC+TsC,CDlU1C;AAAA;AAAA,MADL;AAAA,G;AAQA,IAAK,WAAL,0BAAmB,IAAnB;AAAA;AAAA;AAAA,SACK;AAAA,QAAK,WAAD,CAAO,IAAP,CAAJ;AAAA,MACkB,CAAK,IAAL,EAAU,CAAC,QAAD,CAAV,IAAqB,WAAD,CAAc,aAAd,CAApB,CCuTqB;AAAA,aDtTrB;AAAA,YAAI,CAAK,aAAL,IAAmB,oBAAnB,CAAJ;AAAA,UCsTqB,ODtTwB,ICsTxB,CDtTrB;AAAA;AAAA,UCwTwB,ODxT0B,ICwT1B,CDxTxB;AAAA;AAAA,UCsTqB,CDxTvC;AAAA,eAGI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAHJ;AAAA,MAIkB,IAAK,SAAL,GAAgB,OAAD,CAAU,GAAD,CAAK,IAAL,EAAU,WAAV,CAAT,CAAf,CCoTqB;AAAA,aDnTrB;AAAA,YAAI,CAAK,SAAL,IAAe,gBAAf,CAAJ;AAAA,UCmTqB,ODnTgB,SCmThB,CDnTrB;AAAA;AAAA,UCqTwB,ODrTuB,ICqTvB,CDrTxB;AAAA;AAAA,UCmTqB,CDxTvC;AAAA;AAAA,MC0T0C,ODpTtC;AAAA,YAAI,CAAI,CAAG,IAAH,KAAQ,EAAR,CAAJ,IAAgB,CAAG,IAAH,KAAQ,KAAR,CAAhB,CAAJ;AAAA,UCkTmC,ODlTC,ICkTD,CDlTnC;AAAA;AAAA,UCoTsC,ODpTG,ICoTH,CDpTtC;AAAA;AAAA,UCoTsC,CD1T1C;AAAA;AAAA,MADL;AAAA,G;AASA,IAAK,gBAAL,+BAAwB,IAAxB;AAAA;AAAA;AAAA,SACK;AAAA,QAAI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAAJ;AAAA,MC+SuC,OD/SrB,GAAD,CAAK,IAAL,EAAU,gBAAV,CC+SsB,CD/SvC;AAAA,eACI,CAAM,WAAD,CAAO,IAAP,CAAL,IAAkB,CAAI,CAAC,MAAD,CAAJ,KAAY,SAAZ,CAAlB,CADJ;AAAA,MC+SuC,OD9SQ,SAAD,CAAW,IAAX,CC8SP,CD/SvC;AAAA,eAEI,CAAM,WAAD,CAAO,IAAP,CAAL,IAAkB,CAAG,CAAC,MAAD,CAAH,KAAW,SAAX,CAAlB,CAFJ;AAAA,MAG8C,CAAK,IAAL,EAAU,CAAC,QAAD,CAAV,IAAqB,gBAAD,CAAmB,aAAnB,CAApB,CC4SP;AAAA,aD3SO,IC2SP,CD/SvC;AAAA;AAAA,MCiT0C,OD5StC,IC4SsC,CDjT1C;AAAA;AAAA,MADL;AAAA,G;AAQA,IAAK,SAAL,wBAAgB,IAAhB,EAAqB,YAArB;AAAA;AAAA;AAAA,EACK;AAAA,QACC,OAAS,IAAT,cADD;AAAA,MCuSuC,ODrS9B,IAAR,GAAa;AAAA,QAAE,IAAF,EAAO,CAAC,EAAD,CAAP;AAAA,QAAW,KAAX,EAAiB,IAAjB;AAAA,QAAsB,QAAtB,EAA+B,EAA/B;AAAA,OAAb,CAFD;AAAA,eAIC,CCyGqC,ODzG5B,IAAT,KCyGqD,CAAC,MAAD,CDzGrD,CAJD;AAAA,MCuSuC,ODlS9B,IAAR,GAAa;AAAA,QAAE,IAAF,EAAO,CAAC,MAAD,CAAP;AAAA,QAAe,KAAf,EAAsB,aAAD,EAArB;AAAA,QAAsC,QAAtC,EAA+C,EAA/C;AAAA,OAAb,CALD;AAAA;AAAA,MADL;AAAA,SAQK;AAAA,QAAI,EAAO,IAAP,aAAO,IAAP,mBAAO,IAAP,+BAAJ;AAAA,MCgSuC,ODhStB,ICgSsB,CDhSvC;AAAA,eACI,CC8UI,CA3O+B,ODnG1B,IC8UL,KA3O+C,CAAC,SAAD,CA2O/C,CD9UJ,IC8UsB,CD9Ub,IC8Ua,KAAW,IAAX,CD9UtB,CADJ;AAAA,MAEoB,IAAK,UAAL,GAAgB,CAAI,CAAK,SAAL,EAAe,SAAf,CAAJ,IAA8B,iBAA9B,CAAhB,CC8RmB;AAAA,MD7RnB,IAAK,MAAL,GAAa,UAAD,CAAY,IAAZ,CAAZ,CC6RmB;AAAA,MD5RnB,IAAK,UAAL,GAAkB,gBAAD,CAAmB;AAAA,YAAK,WAAD,CAAO,MAAP,CAAJ;AAAA,UC4RjB,OD5RoC,MC4RpC,CD5RiB;AAAA;AAAA,UC8Rd,OD7RD;AAAA,YAAE,QAAF,EAAW,MAAX;AAAA,YAAkB,IAAlB,EAAuB,CAAC,MAAD,CAAvB;AAAA,WC6RC,CD9Rc;AAAA;AAAA,UAAnB,CAAjB,CC4RmB;AAAA,MD1RnB,CAAK,UAAL,EACK,CAAC,QAAD,CADL,IACgB,OAAD,CAAU,OAAD,CAAS,mBAAT,CAAT,CADf;AAAA,OAAK,UAAL,EAEK,CAAC,MAAD,CAFL,IAEa,IAFb,CC0RmB;AAAA,MDtRnB;AAAA,YAAM,cAAN;AAAA,UC8HQ,OD7HD,WAAD,CAAc,QAAD,CAAU,IAAV,CAAb,EACc,GAAD,CAAK,IAAL,CADb,EAEc,QAAD,CAAU,UAAV,CAFb,CC6HE,CD9HR;AAAA;AAAA,UCsRmB;AAAA,MDjRnB,CAAK,IAAL,EAAU,CAAC,UAAD,CAAV,IAAsB,UAAtB,CCiRmB;AAAA,aD9QnB;AAAA,YAAK,gBAAD,CAAa,UAAb,CAAJ;AAAA,UC8QmB,OD9QW,SC8QX,CD9QnB;AAAA;AAAA,UCgRsB,OD/QlB,UC+QkB,CDhRtB;AAAA;AAAA,UC8QmB,CDhSvC;AAAA;AAAA,MARL;AAAA,G;AA8BA,CAAK,QAAL,EAAc,CAAC,SAAD,CAAd,IAAyB,SAAzB,C;AAEA,IAAK,YAAL,GAAmB,IAAnB,C;AAEK,aAAL,4BAAoB,IAApB;AAAA;AAAA;AAAA,EACK,IAAK,MAAL,GAAa,SAAD,CAAW,CAAO,aAAP,EC3BE,CD2BF,CAAX,CAAZ,CADL;AAAA,EAEK,CAAK,MAAL,EAAY,CAAC,QAAD,CAAZ,IAAsB,EAAC,CAAC,SAAD,GAAW,CAAO,eAAP,EC5BT,CD4BS,CAAX,CAAD,EAAtB,CAFL;AAAA,SAGK,MAHL;AAAA,G;AAKK,cAAL,6BAAqB,IAArB;AAAA;AAAA;AAAA,SACM,kBAAD,CAAc,IAAd,EAAmB,aAAnB,CADL;AAAA,G;AAGK,YAAL,2BAAmB,IAAnB;AAAA;AAAA;AAAA,SACM,SAAD,CAAW,CAAO,aAAP,ECnCc,CDmCd,CAAX,CADL;AAAA,G;AAGK,cAAL,6BAAqB,IAArB;AAAA;AAAA;AAAA,SACM,iBAAD,CAAa,IAAb,EAAkB,aAAlB,CADL;AAAA,G;AAIK,iBAAL,gCAAwB,IAAxB;AAAA;AAAA;AAAA,SACK,UADL;AAAA,G;AAGK,gBAAL,+BAAuB,IAAvB;AAAA;AAAA;AAAA,SACK,IADL;AAAA,G;AAGK,gBAAL,+BAAuB,IAAvB;AAAA;AAAA;AAAA,SACY,UAAD,CAAc,kBAAD,CAAoB,KCgB/B,MAHI,CDbkC,GCalC,EDbsC,CAAC,CAAD,CCatC,CDb2B,CAApB,EAAmC,EAAnC,CAAb,CAAN,CAA2D,QAA3D,EADL;AAAA,G;AAGK,cAAL,6BAAqB,IAArB;AAAA;AAAA;AAAA,SACK;AAAA,QAAI,CAAG,CAAH,KAAK,oBAAL,CAAJ;AAAA,MC6OuC,OD5OlC,SAAD,CAAW,CAAO,aAAP,ECpDU,CDoDV,CAAX,CC4OmC,CD7OvC;AAAA;AAAA,MC+O0C,OD7OrC,UAAD,CAAY,IAAZ,EAAkB,OAAD,CAAU,GAAD,CAAK,aAAL,EAAmB,WAAnB,CAAT,CAAjB,CC6OsC,CD/O1C;AAAA;AAAA,MADL;AAAA,G;AAKK,oBAAL,mCAA2B,IAA3B,EAAgC,YAAhC;AAAA;AAAA;AAAA,SACK;AAAA,QAAI,oBAAJ;AAAA,MAEK,IAAK,IAAL,GAAU,CAAO,aAAP,EC1DU,CD0DV,CAAV;AAAA,UACK,IADL,GACgB,aAAN,CCjDD,KDiDC,CCjDK,CDiDL,CADV;AAAA,UAEK,KAFL,GAEW,CAAK,MAAL,EAAa,eAAD,CAAmB,SAAD,CAAW,IAAX,CAAlB,CAAZ,CAFX,CCsOkC;AAAA,MDlOlC;AAAA,YAAM,CCiRH,CA3O+B,ODtCnB,KCiRZ,KA3O+C,CAAC,SAAD,CA2O/C,CDjRG,ICiRe,CDjRN,KCiRM,KAAW,IAAX,CDjRf,CAAN;AAAA,UC0EuB,OD1ED,CAAK,IAAL,EAAU,CAAC,IAAD,CAAV,IAAgB,CAAC,KAAD,CAAhB,CAAtB;AAAA;AAAA,UCkOkC;AAAA,MDhOlC;AAAA,YAAM,CAAK,IAAL,IAAU,CAAG,CAAC,MAAD,CAAH,KAAW,SAAX,CAAV,CAAN;AAAA,UACc,KCuES,GDvEH,aCuEG;AAAA,iBDvEW,ICuEX,GDvEgB,aCuEhB,CDxEvB;AAAA;AAAA,UCgOkC;AAAA,MD7NlC;AAAA,YAAM,CC+B2B,OD/Bf,KAAZ,KC+B2C,CAAC,SAAD,CD/B3C,CAAN;AAAA,UACc,KCoES,GDpEH,WCoEG;AAAA,iBDpES,ICoET,GDpEc,aCoEd,CDrEvB;AAAA;AAAA,UC6NkC;AAAA,aD1NjC,WAAD,CAAa,IAAb,EAAkB,IAAlB,CC0NkC,CDxOvC;AAAA;AAAA,MC0O0C,OD1NtC,MC0NsC,CD1O1C;AAAA;AAAA,MADL;AAAA,G;AAmBK,iBAAL,gCAAwB,IAAxB;AAAA;AAAA;AAAA,SACY,WAAP,CC3Fa,KD2Fb,CC3FmB,ID2FnB,EAAmB,aAAnB,CADL;AAAA,G;AAGK,eAAL,8BAAsB,IAAtB;AAAA;AAAA;AAAA,SAAmC,WAAP,CC7FV,KD6FU,CC7FJ,ID6FI,EAAmB,aAAnB,CAA5B;AAAA,G;AAEK,iBAAL,gCAAwB,IAAxB;AAAA;AAAA;AAAA,EACK,IAAK,MAAL,GAAY,UAAZ,CADL;AAAA,SAEM,MAAD,CAAe,MAAP,CACQ,OADR,CACgB,KClBhB,MAHI,CDqBmB,KCrBnB,EDqByB,CAAC,CAAD,CCrBzB,CDqBY,CADhB,EACiC,GADjC;AAAA,KAEQ,OAFR,CAEgB,KCnBhB,MAHI,CDsBmB,MCtBnB,E,SAAA,CDsBY,CAFhB,EAE+B,SAF/B;AAAA,KAGQ,OAHR,CAGgB,KCpBhB,MAHI,CDuBmB,ICvBnB,E,SAAA,CDuBY,CAHhB,EAG6B,QAH7B,CAAR,EAIS,YAAD,CAAc,KCrBd,MAHI,CDwBiB,MCxBjB,EDwBwB,CAAC,CAAD,CCxBxB,CDwBU,CAAd,CAJR,EAKQ,UAAG,YAAH,EAAiB,KAAjB;AAAA;AAAA;AAAA,WACG,oBAAD,CAAuB,KAAvB,EAC6B,CAAQ,KAAR,ECvFb,CDuFa,CAAN,CAAqB,WAArB,EADvB,CADF;AAAA,IALR,CAFL;AAAA,G;AAWK,gBAAL,+BAAuB,IAAvB;AAAA;AAAA;AAAA,SACY,UAAP,CAAmB,KAAnB,CAAyB,IAAzB;AAAA,KACQ,IADR,CACa,aADb,CADL;AAAA,G;AAIK,iBAAL,gCAAwB,IAAxB;AAAA;AAAA;AAAA,SAA8B,IAA9B;AAAA","sourcesContent":[";; (def flatten-output (nodes)\n;; (inject [] nodes\n;; (#(collector item)\n;; (if (list? item) (apply flatten-output item)\n;; (if \n \n\n(def node? (thing type)\n (and\n (exists? thing)\n (= 'object (typeof thing))\n (string? thing.type)\n (or (undefined? type) (= thing.type type))\n (thing.has-own-property 'contents)))\n\n(def empty-node? (item)\n (if (node? item) (empty-node? item.contents)\n (list? item) (all? item empty-node?)\n (string? item) (item.match (regex \"^\\\\s*$\"))\n (or (= null item)\n (undefined? item)\n (= false item))))\n\n(def compact-node (item)\n (if (node? item) (do\n (set item 'contents (compact-node item.contents))\n (if (and item.contents item.contents.length) item null))\n (list? item) (do\n (var compacted (compact (map item compact-node)))\n (if (and compacted compacted.length) compacted null))\n (if (or (= item \"\") (= item false)) null item)))\n\n(def recurse-transpile (node)\n (if (list? node) (map node recurse-transpile)\n (and (node? node) (!= 'output node.type)) (transpile node)\n (and (node? node) (= 'output node.type)) (do\n (set node 'contents (recurse-transpile node.contents))\n node)\n node))\n\n(def transpile (node preprocessor)\n (if\n (string? node)\n (assign node { type 'js token node contents []})\n\n (number? node)\n (assign node { type 'number token (node.to-string) contents []}))\n \n (if (list? node) node\n (exists? node) (do\n (var transpiler (or (get transpile node.type) transpile.default))\n (var result (transpiler node))\n (var result-node (recurse-transpile (if (node? result) result\n { contents result type 'output })))\n (set result-node\n 'contents (compact (flatten result-node.contents))\n 'source node)\n\n (when sibilant.debug\n (console.log (prettify node)\n (red \"->\")\n (prettify result-node)))\n\n (set node 'transpiled result-node)\n\n \n (if (empty-node? result-node) undefined\n result-node))))\n\n\n(set sibilant 'transpile transpile)\n\n(var reader-macros {})\n\n(def transpile.hat (node)\n (var output (transpile (first node.contents)))\n (set output 'contents [(\"macros.\" (first output.contents))])\n output)\n\n(def transpile.tick (node)\n (^quote.apply node node.contents))\n\n(def transpile.at (node)\n (transpile (first node.contents)))\n\n(def transpile.dots (node)\n (^dots.apply node node.contents))\n\n\n(def transpile.default (node)\n node.token)\n\n(def transpile.output (node)\n node)\n\n(def transpile.number (node)\n (send (parse-float (node.token.replace (regex \",\" 'g) \"\")) to-string))\n\n(def transpile.root (node)\n (if (= 1 node.contents.length)\n (transpile (first node.contents))\n (interleave \"\\n\" (compact (map node.contents as-statement)))))\n\n(def transpile.expression (node preprocessor)\n (if node.contents.length\n (do\n (var head (first node.contents)\n args (rest node.contents)\n macro (get macros (output-formatter (transpile head))))\n\n (when (exists? macro) (set head 'hint 'macro))\n\n (when (and head (= 'string head.type))\n (assign macro macros.concat args node.contents))\n\n (when (undefined? macro)\n (assign macro macros.call args node.contents))\n\n (macro.apply node args))\n\n \"null\"))\n\n(def transpile.bracket (node)\n (apply macros.list node.contents))\n\n(def transpile.brace (node) (apply macros.hash node.contents))\n\n(def transpile.literal (node)\n (var string node.token)\n (inject (chain string\n (replace (regex \"\\\\*\" 'g) \"_\")\n (replace (regex \"\\\\?$\") \"__QUERY\")\n (replace (regex \"!$\") \"__BANG\"))\n (string.match (regex \"-(.)\" 'g))\n (#(return-string match)\n (return-string.replace match\n (send (second match) to-upper-case)))))\n\n(def transpile.string (node)\n (chain node.token (split \"\\n\")\n (join \"\\\\n\\\" +\\n\\\"\")))\n\n(def transpile.comment (node) null)\n\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro meta (body)\n (eval (output-formatter (transpile body))))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] } ...@body))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file +{"version":3,"sources":["/Users/jbr/code/sibilant/src/transpiler.sibilant","/Users/jbr/code/sibilant/include/macros.sibilant"],"names":[],"mappings":"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","sourcesContent":[";; (def flatten-output (nodes)\n;; (inject [] nodes\n;; (#(collector item)\n;; (if (list? item) (apply flatten-output item)\n;; (if \n \n\n(def node? (thing type)\n (and\n (exists? thing)\n (= 'object (typeof thing))\n (string? thing.type)\n (or (undefined? type) (= thing.type type))\n (thing.has-own-property 'contents)))\n\n(def empty-node? (item)\n (if (node? item) (empty-node? item.contents)\n (list? item) (all? item empty-node?)\n (string? item) (item.match (regex \"^\\\\s*$\"))\n (or (= null item)\n (undefined? item)\n (= false item))))\n\n(def compact-node (item)\n (if (node? item) (do\n (set item 'contents (compact-node item.contents))\n (if (and item.contents item.contents.length) item null))\n (list? item) (do\n (var compacted (compact (map item compact-node)))\n (if (and compacted compacted.length) compacted null))\n (if (or (= item \"\") (= item false)) null item)))\n\n(def recurse-transpile (node)\n (if (list? node) (map node recurse-transpile)\n (and (node? node) (!= 'output node.type)) (transpile node)\n (and (node? node) (= 'output node.type)) (do\n (set node 'contents (recurse-transpile node.contents))\n node)\n node))\n\n(def transpile (node preprocessor)\n (if\n (string? node)\n (assign node { type 'js token node contents []})\n\n (number? node)\n (assign node { type 'number token (node.to-string) contents []}))\n \n (if (list? node) node\n (exists? node) (do\n (var transpiler (or (get transpile node.type) transpile.default))\n (var result (transpiler node))\n (var result-node (recurse-transpile (if (node? result) result\n { contents result type 'output })))\n (set result-node\n 'contents (compact (flatten result-node.contents))\n 'source node)\n\n (when sibilant.debug\n (console.log (prettify node)\n (red \"->\")\n (prettify result-node)))\n\n (set node 'transpiled result-node)\n\n \n (if (empty-node? result-node) undefined\n result-node))))\n\n\n(set sibilant 'transpile transpile)\n\n(var reader-macros {})\n\n(def transpile.hat (node)\n (var output (transpile (first node.contents)))\n (set output 'contents [(\"macros.\" (first output.contents))])\n output)\n\n(def transpile.tick (node)\n (^quote.apply node node.contents))\n\n(def transpile.at (node)\n (transpile (first node.contents)))\n\n(def transpile.dots (node)\n (^dots.apply node node.contents))\n\n\n(def transpile.default (node)\n node.token)\n\n(def transpile.output (node)\n node)\n\n(def transpile.number (node)\n (send (parse-float (node.token.replace (regex \",\" 'g) \"\")) to-string))\n\n(def transpile.root (node)\n (if (= 1 node.contents.length)\n (transpile (first node.contents))\n (interleave \"\\n\" (compact (map node.contents as-statement)))))\n\n(def transpile.expression (node preprocessor)\n (if node.contents.length\n (do\n (var head (first node.contents)\n args (rest node.contents)\n macro (get macros (output-formatter (transpile head))))\n\n (when (exists? macro) (set head 'hint 'macro))\n\n (when (and head (= 'string head.type))\n (assign macro macros.concat args node.contents))\n\n (when (undefined? macro)\n (assign macro macros.call args node.contents))\n\n (macro.apply node args))\n\n \"null\"))\n\n(def transpile.bracket (node)\n (apply macros.list node.contents))\n\n(def transpile.brace (node) (apply macros.hash node.contents))\n\n(def transpile.literal (node)\n (var string node.token)\n (inject (chain string\n (replace (regex \"\\\\*\" 'g) \"_\")\n (replace (regex \"\\\\?$\") \"__QUERY\")\n (replace (regex \"!$\") \"__BANG\"))\n (string.match (regex \"-(.)\" 'g))\n (#(return-string match)\n (return-string.replace match\n (send (second match) to-upper-case)))))\n\n(def transpile.string (node)\n (chain node.token (split \"\\n\")\n (join \"\\\\n\\\" +\\n\\\"\")))\n\n(def transpile.comment (node) null)\n\n","(macro join (glue arr)\n [\"(\" (transpile arr) \").join(\" (transpile glue) \")\"])\n\n(macro set (arr ...kv-pairs)\n (interleave \"\\n\" (bulk-map kv-pairs\n (#(k v)\n (as-statement [\"(\" (transpile arr) \")\"\n \"[\" (transpile k) \"] = \" (transpile v) ])))))\n\n(macro get (obj ...keys)\n [\"(\" (transpile obj) \")\" (map keys (#(key) [\"[\" (transpile key) \"]\"]))])\n\n(macro var (...pairs)\n (as-statement\n [\"var \"\n (interleave \",\\n \"\n (bulk-map pairs\n (#(name value)\n [ (transpile name) \" = \" (transpile value) ])))\n ]))\n\n(macro alias-macro (current-macro-name desired-macro-name)\n (var current-macro-name (output-formatter (transpile current-macro-name))\n desired-macro-name (output-formatter (transpile desired-macro-name)))\n (set macros desired-macro-name (get macros current-macro-name))\n null)\n\n(macro send (object method ...args)\n [(transpile object) \".\" (transpile method)\n \"(\" (interleave \", \" (map args transpile)) \")\"])\n\n(macro apply (fn arglist)\n '(send @fn apply this @arglist))\n\n(macro cons (first rest)\n [\"[ \" (transpile first) \" ].concat(\" (transpile rest) \")\"])\n\n(macro append (list ...additional)\n '(send @list concat (list ...@additional)))\n\n(macro length (arr)\n '(get @arr 'length))\n\n(macro ternary (cond if-true if-false)\n [\"(\" (transpile cond) \") ? \"\n (transpile if-true) \" : \"\n (transpile if-false)])\n\n(macro first (arr) '(get @arr 0))\n(macro second (arr) '(get @arr 1))\n(macro third (arr) '(get @arr 2))\n(macro fourth (arr) '(get @arr 3))\n(macro fifth (arr) '(get @arr 4))\n(macro sixth (arr) '(get @arr 5))\n(macro seventh (arr) '(get @arr 6))\n(macro eighth (arr) '(get @arr 7))\n(macro ninth (arr) '(get @arr 8))\n(macro rest (arr)\n '(send @arr slice 1))\n\n(macro last (arr)\n '(first (send @arr slice -1)))\n\n\n(macro = (a b) [ (transpile a) \" === \" (transpile b) ])\n(macro + (...args)\n [\"(\" (interleave \" + \" (map args transpile)) \")\"])\n(macro - (...args)\n [\"(\" (interleave \" - \" (map args transpile)) \")\"])\n(macro * (...args)\n [\"(\" (interleave \" * \" (map args transpile)) \")\"])\n(macro / (...args)\n [\"(\" (interleave \" / \" (map args transpile)) \")\"])\n(macro or (...args)\n [\"(\" (interleave \" || \" (map args transpile)) \")\"])\n\n(macro and (...args)\n (ternary (= 1 (length args)) (transpile (first args))\n [\"(\" (interleave \" && \" (map args transpile)) \")\"]))\n\n(macro mod (...args)\n [\"(\" (interleave \" % \" (map args transpile)) \")\"])\n\n(macro infix-comparator (comparator args)\n [\"(\" (interleave \" && \"\n (map (args.slice 0 -1)\n (#(item index)\n [ item \" \" comparator \" \" (get args (+ 1 index))])))\n \")\"])\n\n(macro > (...args) (macros.infix-comparator \">\" (map args transpile)))\n(macro < (...args) (macros.infix-comparator \"<\" (map args transpile)))\n(macro <= (...args) (macros.infix-comparator \"<=\" (map args transpile)))\n(macro >= (...args) (macros.infix-comparator \">=\" (map args transpile)))\n(macro != (...args) (macros.infix-comparator \"!==\" (map args transpile)))\n\n(macro pow (base exponent)\n '(Math.pow @base @exponent))\n\n(macro incr-by (item increment)\n [ (transpile item) \" += \" (transpile increment)])\n\n(macro incr (item)\n [\"((\" (transpile item) \")++)\"])\n\n(macro decr (item)\n [\"((\" (transpile item) \")--)\"])\n\n(macro new (...args)\n [\"(new \" '(call ...@args) \")\"])\n\n(macro regex (string glim)\n '(new RegExp @string @(or glim 'undefined)))\n\n(macro timestamp ()\n [\"\\\"\" (send (new Date) to-string) \"\\\"\"])\n\n(macro comment (...contents)\n (map contents (#(content)\n [\"// \"(recurse-map (transpile content)\n (#(item)\n (ternary item\n (send (output-formatter (transpile item)) replace\n (regex \"\\n\" 'g) \"\\n// \")\n null)))])))\n\n(macro zero? (item) '(= @item 0))\n\n(macro empty? (arr)\n [\"((\" (transpile arr) \").length === 0)\"])\n\n(macro odd? (number)\n '(= 1 (mod @number 2)))\n\n(macro even? (number)\n '(= 0 (mod @number 2)))\n\n(macro typeof (thing) [\"typeof \" (transpile thing)])\n\n\n(macro function? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'function)))))\n(macro undefined? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'undefined)))))\n(macro defined? (...things)\n '(and ...@(map things (#(thing) '(!= (typeof @thing) 'undefined)))))\n(macro number? (...things)\n '(and ...@(map things (#(thing) '(= (typeof @thing) 'number)))))\n\n(macro if (arg truebody falsebody)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@truebody))\n \"} else {\"\n (indent '(do ...@falsebody))\n \"}\"])\n \"})()\"])\n\n(macro = (first-thing ...other-things)\n (var transpiled-first-thing (transpile first-thing))\n [\"(\" (interleave \" &&\\n \"\n (map other-things\n (#(thing)\n [ transpiled-first-thing\n \" === \"\n (transpile thing) ])))\n \")\"])\n\n\n(macro string? (thing)\n [\"typeof(\" (transpile thing) \") === \\\"string\\\"\"])\n\n(macro list? (thing)\n (var transpiled (transpile thing))\n [\"((\" transpiled \") && typeof (\" transpiled \") === \\\"object\\\" && (\"\n transpiled \").constructor.name === \\\"Array\\\")\"])\n\n\n(macro when (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" (transpile arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro not (exp)\n [\"(!\" (transpile exp) \")\"])\n\n(macro unless (arg ...body)\n [\"(function() {\"\n (indent [\"if (\" '(not @arg) \") {\"\n (indent '(do ...@body))\n \"}\"])\n \"})()\"])\n\n\n(macro slice (arr start end)\n '(send @arr slice @start @end))\n\n(macro inspect (...args)\n (interleave \" + \\\"\\\\n\\\" + \"\n (map args\n (#(arg)\n [\"\\\"\" arg \":\\\" + \" (transpile arg)]))))\n\n(macro each (item array ...body)\n '(send @array for-each\n (lambda @{ node this args item } ...@body)))\n\n(macro assign (...args)\n (interleave \"\\n\"\n (bulk-map args (#(name value)\n (as-statement [ (transpile name) \" = \"\n (transpile value)])))))\n\n\n\n(macro macro-expand (name)\n (var macro (get macros (output-formatter (transpile name))))\n (if macro\n (macro.to-string)\n \"undefined\"))\n\n(macro throw (...string)\n [\"throw new Error (\" (interleave \" \" (map string transpile)) \")\"])\n\n(macro as-boolean (expr)\n [\"(!!(\" (transpile expr) \"))\"])\n\n(macro try (tryblock catchblock)\n [\"(function() {\"\n (indent [\"try {\"\n (indent '(do @tryblock))\n \"} catch (e) {\"\n (indent '(do @catchblock))\n \"}\"])\n \"})()\"])\n\n(macro state (...pairs)\n (set macros.state 'data (or macros.state.data {}))\n\n (if (= 1 (length pairs))\n (get macros.state.data (output-formatter (transpile (first pairs))))\n (do (bulk-map pairs (#(k v) (set macros.state.data (output-formatter (transpile k)) (eval (output-formatter (transpile v))))))\n null)))\n\n(macro symbol ()\n (var symbol-count (or (macros.state 'symbol-count) 0)\n new-symbol-count (+ 1 symbol-count))\n (macros.state 'symbol-count new-symbol-count)\n [\"$_symbol\" new-symbol-count \"_$\"])\n\n(macro while (condition ...block)\n (var symbol (macros.symbol))\n '(scoped-without-source\n (var @symbol)\n @[\"while (\" (transpile condition) \") {\"\n (indent '(assign @symbol (scoped-without-source ...@block)))\n \"}\"]\n @symbol))\n\n(macro until (condition ...block)\n '(while (not @condition) ...@block))\n\n(macro match? (regexp string)\n '(send @string match @regexp))\n\n(macro match-regex? (string regexp-string glim)\n '(match? (regex @regexp-string @glim) @string))\n\n(macro replace (string regexp-string replacement)\n '(send @string replace\n (regex @regexp-string)\n @replacement))\n\n(macro replace-all (string regexp-string replacement)\n '(replace @string @regexp-string 'g))\n\n(macro thunk (...body)\n '(lambda @{ node this args [] }\n ...@(map-node body\n (#(node)\n (if (node? node 'arg-placeholder)\n '(argument @(replace node.token \"^#\" \"\"))\n node)))))\n(alias-macro thunk #>)\n\n(macro keys (obj)\n '(Object.keys @obj))\n\n(macro delete (...objects)\n (interleave \"\\n\" (map objects (#(obj)\n (as-statement [\"delete \" (transpile obj)])))))\n\n(macro delmacro (...macro-names)\n (each (macro-name) macro-names\n (delete (get macros (output-formatter (transpile macro-name)))))\n null)\n(alias-macro delmacro delete-macro)\n\n\n(macro rename-macro (current-macro-name desired-macro-name)\n (macros.alias-macro current-macro-name desired-macro-name)\n (macros.delmacro current-macro-name)\n null)\n\n(macro arguments ()\n [\"(Array.prototype.slice.apply(arguments))\"])\n\n(macro argument (n)\n '(get arguments @n))\n\n(macro scoped (...body)\n '(call (lambda @{node this args []} ...@body)))\n\n(macro scoped-without-source (...body)\n [\"(function() {\" (indent '(do ...@body)) \"})()\"])\n \n\n(macro each-key (as obj ...body)\n '(scoped-without-source\n @[\"for (var \" (transpile as) \" in \" (transpile obj) \") \"\n (as-statement '(scoped-without-source ...@body))\n ]\n @obj))\n\n(macro switch (obj ...cases)\n [\"(function() {\"\n (indent [\"switch(\" (transpile obj) \") {\"\n (map cases (#(case-def)\n (var case-name-node (first case-def.contents)\n case-labels (if (or (node? case-name-node 'expression)\n (node? case-name-node 'bracket))\n case-name-node.contents\n [case-name-node])\n case-string (interleave \"\\n\" (map case-labels (#(c)\n (if (= 'default c.token)\n \"default:\"\n [\"case \" (transpile c) \":\"])))))\n [\"\\n\" case-string (indent '(do ...@(rest case-def.contents)))]))\n \"}\"])\n \"})()\"])\n\n(macro if (...args)\n [\"(function() {\"\n (indent\n (interleave \" else \"\n (bulk-map args\n (#(cond val)\n (if (!= (typeof val) 'undefined)\n [\"if (\" (transpile cond) \") {\"\n (indent '(do @val))\n \"}\"]\n [\"{\" (indent '(do @cond)) \"}\"])))))\n \"})()\"])\n\n(macro chain (object ...calls)\n (if (= 0 calls.length) (transpile object)\n (= 1 calls.length) '(send @object ...@(get (first calls) 'contents))\n (do\n (var lines (map calls (#(call index)\n [\".\" (transpile (first call.contents))\n \"(\" (interleave \", \" (map (rest call.contents) transpile)) \")\"])))\n\n [ (transpile object)\n (first lines)\n \"\\n \"\n (recurse-indent\n (interleave \"\\n\" (rest lines)))])))\n\n(macro chainable (...names)\n (each (name) names\n '(macro @name (target ...calls)\n '(chain (call @name @target) ...@calls))))\n\n(macro let (args body)\n [\"let (\"\n (interleave \", \" (bulk-map args\n (#(k v)\n [ (transpile k) \" = \" (transpile v) ])))\n (if (undefined? body) \");\"\n [\") {\" (indent (transpile body)) \"}\"])])\n\n(macro instance-of? (item type)\n [\"(\" (transpile item) \" instanceof \" (transpile type) \")\"])\n\n(macro slice (list begin end)\n [\"Array.prototype.slice.call(\" (transpile list)\n \", \" (or (transpile begin) 0)\n (if (defined? end) (\", \" (transpile end) \")\") \")\")])\n\n(macro includes? (list item)\n '(!= -1 (send @list index-of @item)))\n\n\n(macro excludes? (list item)\n '(= -1 (send @list index-of @item)))\n\n(macro exists? (thing)\n '(and (defined? @thing) (!= @thing null)))\n\n(macro with-state (k v ...body)\n (var before (macros.state k))\n (macros.state k v)\n (var return-value\n (interleave \"\\n\" (map body transpile)))\n (macros.state k before)\n return-value)\n\n(macro join (glue arr)\n (if (and (defined? glue) (undefined? arr))\n (assign arr glue glue undefined))\n [\"(\" (transpile arr) \").join(\" (if glue (transpile glue) \"\\\"\\\"\") \")\"])\n\n(macro var (...pairs)\n (var destructured [])\n (bulk-map pairs (#(lhs rhs)\n (switch lhs.type\n ('bracket\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (destructured.push [(transpile item) '(get @symbol @index)]))\n (destructured.push [symbol 'undefined]))\n ('brace\n (var symbol (macros.symbol))\n (destructured.push [symbol (transpile rhs)])\n (each (item index) lhs.contents\n (var tr-item (transpile item))\n (destructured.push [tr-item '(get @symbol @[\"\\\"\" tr-item \"\\\"\"])]))\n (destructured.push [symbol 'undefined]))\n\n (default\n (destructured.push [(transpile lhs)\n (if rhs (transpile rhs) 'undefined)])))))\n\n (as-statement\n [\"var \" (interleave \",\\n \"\n (map destructured\n (#(pair)\n [(first pair) \" = \" (second pair)]\n )))]))\n\n\n(debug false)"]} \ No newline at end of file diff --git a/src/cli.sibilant b/src/cli.sibilant index 9eee6e0..2fd9f40 100644 --- a/src/cli.sibilant +++ b/src/cli.sibilant @@ -1,3 +1,6 @@ +(send (require "source-map-support") install) +(meta "//# sourceMappingURL=./cli.map\n") + (var sibilant (require "../lib/sibilant.js") path (require 'path) options (require "../lib/options.js") diff --git a/src/macros.sibilant b/src/macros.sibilant index 292479d..edd1492 100644 --- a/src/macros.sibilant +++ b/src/macros.sibilant @@ -102,6 +102,12 @@ undefined) +(def ^meta (...body) + (var js (output-formatter (^scoped ...body))) + (when sibilant.debug (console.log js)) + (output-formatter (eval js))) + + (def ^concat (...args) ["(" (interleave " + " (map args transpile)) ")"]) @@ -194,6 +200,19 @@ (^call 'macros.expand-quote.call 'this (^quote content.node-id) (apply ^quoted-hash (alternating-keys-and-values (find-unquotes content)))) ["\"" (map-node (transpile content) qescape) "\""]) + + (node? content 'bracket) + (if (length (keys (find-unquotes content))) + (^call 'macros.expand-quote.call 'this (^quote content.node-id) + (apply ^quoted-hash (alternating-keys-and-values (find-unquotes content)))) + (^list ...(map content.contents ^quote))) + + (node? content 'brace) + (if (length (keys (find-unquotes content))) + (^call 'macros.expand-quote.call 'this (^quote content.node-id) + (apply ^quoted-hash (alternating-keys-and-values (find-unquotes content)))) + (^hash ...(map content.contents ^quote))) + (do (console.log ("unknown content" (prettify content))) content))) @@ -252,7 +271,7 @@ unquotes) (def splice-dots (node) - (when (list? node.contents) + (when (and node (list? node.contents)) (var contents []) (each (content) node.contents (if (and (node? content 'dots) diff --git a/src/parser.sibilant b/src/parser.sibilant index 90ff810..7d1a1e9 100644 --- a/src/parser.sibilant +++ b/src/parser.sibilant @@ -11,6 +11,7 @@ 'tick "[`']" 'hat "(\\^)" 'dots "(\\.+)" + 'arg-placeholder "(#[0-9]+)" 'other-char "([#><=!\\+\\/\\*-]+)" 'open-expression "(\\(|\\{|\\[)" 'close-expression "(\\)|\\}|\\])" @@ -28,6 +29,7 @@ 'at 'special 'literal + 'arg-placeholder 'other-char 'open-expression 'close-expression @@ -41,7 +43,6 @@ (set r 'name x) r))) - (var ordered-regexes parser.ordered-regexes) (set sibilant 'node-cache (or sibilant.node-cache {})) @@ -54,13 +55,13 @@ (set node-id 'last-id 0) - (def parser.parse (string context) - (var context (if context context { position 0 +(def parser.parse (string context) + (var context (or context + { position 0 stack [] line 1 - last-newline 0 col 0})) - - (var match true + last-newline 0 col 0}) + match true regex-name null remaining-input string) @@ -94,8 +95,8 @@ 'col 0 'last-newline context.position)) - - (and (= 'string regex-name) (!= -1 (match-string.index-of "\n"))) + (and (= 'string regex-name) + (includes? match-string "\n")) (do (var string-newline-count (- (length (match-string.split "\n")) 1)) (incr-by context.line string-newline-count) diff --git a/src/repl.sibilant b/src/repl.sibilant index 2ccc29b..83c8ec7 100644 --- a/src/repl.sibilant +++ b/src/repl.sibilant @@ -1,3 +1,6 @@ +(send (require "source-map-support") install) +(meta "//# sourceMappingURL=./repl.map\n") + (var input (process.open-stdin) output process.stdout vm (require 'vm) diff --git a/test/test.sibilant b/test/test.sibilant index ff6eda1..296dd52 100755 --- a/test/test.sibilant +++ b/test/test.sibilant @@ -658,4 +658,12 @@ b();")) (assert-translation "(even? n)" "(0 === (n % 2))") -(assert-translation "(zero? n)" "(n === 0)") \ No newline at end of file +(assert-translation "(zero? n)" "(n === 0)") + +(assert-translation "(#> (#0 #1))" +("(function() { + "line-comment" + + return (arguments)[0]((arguments)[1]); +})")) +