UNPKG

walt-compiler

Version:

Alternative syntax for WebAssembly text format

324 lines (323 loc) 9.12 kB
<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/parser/fragment.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../index.html">All files</a> / <a href="index.html">src/parser</a> fragment.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>22/22</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>10/10</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>4/4</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>22/22</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">27x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">27x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">85x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">724x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">85x</span> <span class="cline-any cline-yes">724x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">724x</span> <span class="cline-any cline-yes">1525x</span> <span class="cline-any cline-yes">1525x</span> <span class="cline-any cline-yes">257x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1268x</span> <span class="cline-any cline-yes">544x</span> <span class="cline-any cline-yes">544x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">724x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">724x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">724x</span> <span class="cline-any cline-yes">367x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">921x</span> <span class="cline-any cline-yes">921x</span> <span class="cline-any cline-yes">544x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">377x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">357x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/** * Tag template literal for parsing stand alone statements * * For expressions, wrap the source string with parens. For example * an binary expression is not a valid statement (1 + 1), but wrapping * it with parens IS. * * 1 + 1 -&gt; ERROR! * (1 + 1); -&gt; OK! * */ // @flow import { mapNode } from 'walt-parser-tools/map-node'; import type { NodeType } from '../flow/types'; &nbsp; type Parser = string =&gt; NodeType; &nbsp; /** * Fragment tag template literal factory. All input strings must be valid * statements. * * @return {Function} tag template literal */ export const makeFragment = (parser: Parser) =&gt; { // For fragments we must wrap the source in a function // otherwise the parser will fail as it's not a valid // place for an expression const parse = src =&gt; { if (process.env.NODE_ENV === 'development') { try { // 1st node is a function. // 3rd node of a function is a block, containing a single expression return parser(`function fragment() { ${src} }`).params[0].params[2].params[0]; } catch (e) { throw new Error( `PANIC - Invalid fragment input: &nbsp; ${src} &nbsp; Parse Error: ${e.stack}` ); } } else { return parser(`function fragment() { ${src} }`).params[0].params[2].params[0]; } }; &nbsp; return (template: string[], ...replacements: Array&lt;string | NodeType&gt;) =&gt; { let expandNodes = false; // Build out a placeholder source string which will be compiled const source = template.reduce((a, v, i) =&gt; { const rep = replacements[i]; if (rep != null &amp;&amp; typeof rep !== 'object') { return (a += v + String(rep)); } &nbsp; if (rep != null) { expandNodes = true; return (a += v + `$$rep_${i}`); } &nbsp; return (a += v); }, ''); &nbsp; const node = parse(source); &nbsp; // Expand any Node objects if necessary if (expandNodes) { return mapNode({ Identifier(id) { const { value: name } = id; if (!name.indexOf('$$rep_')) { return replacements[Number(name.replace('$$rep_', ''))]; } return id; }, })(node); } &nbsp; return node; }; }; &nbsp;</pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Sun Dec 23 2018 17:46:36 GMT+0000 (UTC) </div> </div> <script src="../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../sorter.js"></script> </body> </html>