mirror of
https://github.com/jashkenas/coffeescript.git
synced 2026-05-03 03:00:14 -04:00
CoffeeScript 1.6.2
This commit is contained in:
@@ -92,115 +92,114 @@
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="sections">
|
||||
<li id="title">
|
||||
<div class="annotation">
|
||||
<h1>sourcemap.coffee</h1>
|
||||
</div>
|
||||
</li>
|
||||
<ul class="sections">
|
||||
|
||||
<li id="title">
|
||||
<div class="annotation">
|
||||
<h1>sourcemap.coffee</h1>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li id="section-1">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
|
||||
<div class="pilwrap for-h3">
|
||||
<a class="pilcrow" href="#section-1">¶</a>
|
||||
</div>
|
||||
</div>
|
||||
<h3>LineMapping</h3>
|
||||
<p>Hold data about mappings for one line of generated source code.
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre><span class="k">class</span> <span class="nx">LineMapping</span>
|
||||
<span class="nv">constructor: </span><span class="nf">(@generatedLine) -></span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre><span class="class"><span class="keyword">class</span> <span class="title">LineMapping</span></span>
|
||||
constructor: (<span class="property">@generatedLine</span>) -></pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-2">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-2">¶</a>
|
||||
</div>
|
||||
|
||||
<p>columnMap keeps track of which columns we've already mapped.
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-2">¶</a>
|
||||
</div>
|
||||
<p>columnMap keeps track of which columns we've already mapped.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="vi">@columnMap = </span><span class="p">{}</span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre> <span class="property">@columnMap</span> = {}</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-3">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-3">¶</a>
|
||||
</div>
|
||||
|
||||
<p>columnMappings is an array of all column mappings, sorted by generated-column.
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-3">¶</a>
|
||||
</div>
|
||||
<p>columnMappings is an array of all column mappings, sorted by generated-column.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="vi">@columnMappings = </span><span class="p">[]</span>
|
||||
<div class="content"><div class='highlight'><pre> <span class="property">@columnMappings</span> = []
|
||||
|
||||
<span class="nv">addMapping: </span><span class="nf">(generatedColumn, [sourceLine, sourceColumn], options={}) -></span>
|
||||
<span class="k">if</span> <span class="nx">@columnMap</span><span class="p">[</span><span class="nx">generatedColumn</span><span class="p">]</span> <span class="o">and</span> <span class="nx">options</span><span class="p">.</span><span class="nx">noReplace</span></pre></div></div>
|
||||
addMapping: (generatedColumn, [sourceLine, sourceColumn], options={}) ->
|
||||
<span class="keyword">if</span> <span class="property">@columnMap</span>[generatedColumn] <span class="keyword">and</span> options.noReplace</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-4">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-4">¶</a>
|
||||
</div>
|
||||
|
||||
<p>We already have a mapping for this column.
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-4">¶</a>
|
||||
</div>
|
||||
<p>We already have a mapping for this column.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="k">return</span>
|
||||
<div class="content"><div class='highlight'><pre> <span class="keyword">return</span>
|
||||
|
||||
<span class="nx">@columnMap</span><span class="p">[</span><span class="nx">generatedColumn</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="nv">generatedLine: </span><span class="nx">@generatedLine</span>
|
||||
<span class="nx">generatedColumn</span>
|
||||
<span class="nx">sourceLine</span>
|
||||
<span class="nx">sourceColumn</span>
|
||||
<span class="p">}</span>
|
||||
<span class="property">@columnMap</span>[generatedColumn] = {
|
||||
generatedLine: <span class="property">@generatedLine</span>
|
||||
generatedColumn
|
||||
sourceLine
|
||||
sourceColumn
|
||||
}
|
||||
|
||||
<span class="nx">@columnMappings</span><span class="p">.</span><span class="nx">push</span> <span class="nx">@columnMap</span><span class="p">[</span><span class="nx">generatedColumn</span><span class="p">]</span>
|
||||
<span class="nx">@columnMappings</span><span class="p">.</span><span class="nx">sort</span> <span class="nf">(a,b) -></span> <span class="nx">a</span><span class="p">.</span><span class="nx">generatedColumn</span> <span class="o">-</span> <span class="nx">b</span><span class="p">.</span><span class="nx">generatedColumn</span>
|
||||
<span class="property">@columnMappings</span>.push <span class="property">@columnMap</span>[generatedColumn]
|
||||
<span class="property">@columnMappings</span>.sort (a,b) -> a.generatedColumn - b.generatedColumn
|
||||
|
||||
<span class="nv">getSourcePosition: </span><span class="nf">(generatedColumn) -></span>
|
||||
<span class="nv">answer = </span><span class="kc">null</span>
|
||||
<span class="nv">lastColumnMapping = </span><span class="kc">null</span>
|
||||
<span class="k">for</span> <span class="nx">columnMapping</span> <span class="k">in</span> <span class="nx">@columnMappings</span>
|
||||
<span class="k">if</span> <span class="nx">columnMapping</span><span class="p">.</span><span class="nx">generatedColumn</span> <span class="o">></span> <span class="nx">generatedColumn</span>
|
||||
<span class="k">break</span>
|
||||
<span class="k">else</span>
|
||||
<span class="nv">lastColumnMapping = </span><span class="nx">columnMapping</span>
|
||||
<span class="k">if</span> <span class="nx">lastColumnMapping</span>
|
||||
<span class="nv">answer = </span><span class="p">[</span><span class="nx">lastColumnMapping</span><span class="p">.</span><span class="nx">sourceLine</span><span class="p">,</span> <span class="nx">lastColumnMapping</span><span class="p">.</span><span class="nx">sourceColumn</span><span class="p">]</span></pre></div></div>
|
||||
getSourcePosition: (generatedColumn) ->
|
||||
answer = <span class="literal">null</span>
|
||||
lastColumnMapping = <span class="literal">null</span>
|
||||
<span class="keyword">for</span> columnMapping <span class="keyword">in</span> <span class="property">@columnMappings</span>
|
||||
<span class="keyword">if</span> columnMapping.generatedColumn > generatedColumn
|
||||
<span class="keyword">break</span>
|
||||
<span class="keyword">else</span>
|
||||
lastColumnMapping = columnMapping
|
||||
<span class="keyword">if</span> lastColumnMapping
|
||||
answer = [lastColumnMapping.sourceLine, lastColumnMapping.sourceColumn]</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-5">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-5">¶</a>
|
||||
</div>
|
||||
|
||||
<h3>SourceMap</h3>
|
||||
<div class="pilwrap for-h3">
|
||||
<a class="pilcrow" href="#section-5">¶</a>
|
||||
</div>
|
||||
<h3>SourceMap</h3>
|
||||
<p>Maps locations in a generated source file back to locations in the original source file.
|
||||
|
||||
</p>
|
||||
@@ -208,41 +207,39 @@
|
||||
SourceMap can be converted to a "v3" style sourcemap with <code>#generateV3SourceMap()</code>, for example
|
||||
but the SourceMap class itself knows nothing about v3 source maps.
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre><span class="k">class</span> <span class="nx">exports</span><span class="p">.</span><span class="nx">SourceMap</span>
|
||||
<span class="nv">constructor: </span><span class="p">()</span> <span class="nf">-></span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre><span class="class"><span class="keyword">class</span> <span class="title">exports</span>.<span class="title">SourceMap</span></span>
|
||||
constructor: () -></pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-6">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-6">¶</a>
|
||||
</div>
|
||||
|
||||
<p><code>generatedLines</code> is an array of LineMappings, one per generated line.
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-6">¶</a>
|
||||
</div>
|
||||
<p><code>generatedLines</code> is an array of LineMappings, one per generated line.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="vi">@generatedLines = </span><span class="p">[]</span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre> <span class="property">@generatedLines</span> = []</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-7">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-7">¶</a>
|
||||
</div>
|
||||
|
||||
<p>Adds a mapping to this SourceMap.
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-7">¶</a>
|
||||
</div>
|
||||
<p>Adds a mapping to this SourceMap.
|
||||
|
||||
</p>
|
||||
<p><code>sourceLocation</code> and <code>generatedLocation</code> are both [line, column] arrays.
|
||||
@@ -250,94 +247,90 @@ but the SourceMap class itself knows nothing about v3 source maps.
|
||||
</p>
|
||||
<p>If <code>options.noReplace</code> is true, then if there is already a mapping for
|
||||
the specified <code>generatedLine</code> and <code>generatedColumn</code>, this will have no effect.
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="nv">addMapping: </span><span class="nf">(sourceLocation, generatedLocation, options={}) -></span>
|
||||
<span class="p">[</span><span class="nx">generatedLine</span><span class="p">,</span> <span class="nx">generatedColumn</span><span class="p">]</span> <span class="o">=</span> <span class="nx">generatedLocation</span>
|
||||
<div class="content"><div class='highlight'><pre> addMapping: (sourceLocation, generatedLocation, options={}) ->
|
||||
[generatedLine, generatedColumn] = generatedLocation
|
||||
|
||||
<span class="nv">lineMapping = </span><span class="nx">@generatedLines</span><span class="p">[</span><span class="nx">generatedLine</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="o">not</span> <span class="nx">lineMapping</span>
|
||||
<span class="nv">lineMapping = </span><span class="nx">@generatedLines</span><span class="p">[</span><span class="nx">generatedLine</span><span class="p">]</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">LineMapping</span><span class="p">(</span><span class="nx">generatedLine</span><span class="p">)</span>
|
||||
lineMapping = <span class="property">@generatedLines</span>[generatedLine]
|
||||
<span class="keyword">if</span> <span class="keyword">not</span> lineMapping
|
||||
lineMapping = <span class="property">@generatedLines</span>[generatedLine] = <span class="keyword">new</span> LineMapping(generatedLine)
|
||||
|
||||
<span class="nx">lineMapping</span><span class="p">.</span><span class="nx">addMapping</span> <span class="nx">generatedColumn</span><span class="p">,</span> <span class="nx">sourceLocation</span><span class="p">,</span> <span class="nx">options</span></pre></div></div>
|
||||
lineMapping.addMapping generatedColumn, sourceLocation, options</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-8">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-8">¶</a>
|
||||
</div>
|
||||
|
||||
<p>Returns [sourceLine, sourceColumn], or null if no mapping could be found.
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-8">¶</a>
|
||||
</div>
|
||||
<p>Returns [sourceLine, sourceColumn], or null if no mapping could be found.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="nv">getSourcePosition: </span><span class="nf">([generatedLine, generatedColumn]) -></span>
|
||||
<span class="nv">answer = </span><span class="kc">null</span>
|
||||
<span class="nv">lineMapping = </span><span class="nx">@generatedLines</span><span class="p">[</span><span class="nx">generatedLine</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="o">not</span> <span class="nx">lineMapping</span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre> getSourcePosition: ([generatedLine, generatedColumn]) ->
|
||||
answer = <span class="literal">null</span>
|
||||
lineMapping = <span class="property">@generatedLines</span>[generatedLine]
|
||||
<span class="keyword">if</span> <span class="keyword">not</span> lineMapping</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-9">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-9">¶</a>
|
||||
</div>
|
||||
|
||||
<p>TODO: Search backwards for the line?
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-9">¶</a>
|
||||
</div>
|
||||
<p>TODO: Search backwards for the line?
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="k">else</span>
|
||||
<span class="nv">answer = </span><span class="nx">lineMapping</span><span class="p">.</span><span class="nx">getSourcePosition</span> <span class="nx">generatedColumn</span>
|
||||
<div class="content"><div class='highlight'><pre> <span class="keyword">else</span>
|
||||
answer = lineMapping.getSourcePosition generatedColumn
|
||||
|
||||
<span class="nx">answer</span></pre></div></div>
|
||||
answer</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-10">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-10">¶</a>
|
||||
</div>
|
||||
|
||||
<p><code>fn</code> will be called once for every recorded mapping, in the order in
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-10">¶</a>
|
||||
</div>
|
||||
<p><code>fn</code> will be called once for every recorded mapping, in the order in
|
||||
which they occur in the generated source. <code>fn</code> will be passed an object
|
||||
with four properties: sourceLine, sourceColumn, generatedLine, and
|
||||
generatedColumn.
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="nv">forEachMapping: </span><span class="nf">(fn) -></span>
|
||||
<span class="k">for</span> <span class="nx">lineMapping</span><span class="p">,</span> <span class="nx">generatedLineNumber</span> <span class="k">in</span> <span class="nx">@generatedLines</span>
|
||||
<span class="k">if</span> <span class="nx">lineMapping</span>
|
||||
<span class="k">for</span> <span class="nx">columnMapping</span> <span class="k">in</span> <span class="nx">lineMapping</span><span class="p">.</span><span class="nx">columnMappings</span>
|
||||
<span class="nx">fn</span><span class="p">(</span><span class="nx">columnMapping</span><span class="p">)</span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre> forEachMapping: (fn) ->
|
||||
<span class="keyword">for</span> lineMapping, generatedLineNumber <span class="keyword">in</span> <span class="property">@generatedLines</span>
|
||||
<span class="keyword">if</span> lineMapping
|
||||
<span class="keyword">for</span> columnMapping <span class="keyword">in</span> lineMapping.columnMappings
|
||||
fn(columnMapping)</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-11">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-11">¶</a>
|
||||
</div>
|
||||
|
||||
<h3>generateV3SourceMap</h3>
|
||||
<div class="pilwrap for-h3">
|
||||
<a class="pilcrow" href="#section-11">¶</a>
|
||||
</div>
|
||||
<h3>generateV3SourceMap</h3>
|
||||
<p>Builds a V3 source map from a SourceMap object.
|
||||
Returns the generated JSON as a string.
|
||||
|
||||
@@ -346,60 +339,58 @@ Returns the generated JSON as a string.
|
||||
<code>options.sourceFiles</code> and <code>options.generatedFile</code> may be passed to set "sources" and "file",
|
||||
respectively. Note that <code>sourceFiles</code> must be an array.
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre><span class="nv">exports.generateV3SourceMap = </span><span class="nf">(sourceMap, options={}) -></span>
|
||||
<span class="nv">sourceRoot = </span><span class="nx">options</span><span class="p">.</span><span class="nx">sourceRoot</span> <span class="o">or</span> <span class="s">""</span>
|
||||
<span class="nv">sourceFiles = </span><span class="nx">options</span><span class="p">.</span><span class="nx">sourceFiles</span> <span class="o">or</span> <span class="p">[</span><span class="s">""</span><span class="p">]</span>
|
||||
<span class="nv">generatedFile = </span><span class="nx">options</span><span class="p">.</span><span class="nx">generatedFile</span> <span class="o">or</span> <span class="s">""</span>
|
||||
<div class="content"><div class='highlight'><pre>exports.<span class="function"><span class="title">generateV3SourceMap</span></span> = (sourceMap, options={}, code) ->
|
||||
sourceRoot = options.sourceRoot <span class="keyword">or</span> <span class="string">""</span>
|
||||
sourceFiles = options.sourceFiles <span class="keyword">or</span> [<span class="string">""</span>]
|
||||
generatedFile = options.generatedFile <span class="keyword">or</span> <span class="string">""</span>
|
||||
|
||||
<span class="nv">writingGeneratedLine = </span><span class="mi">0</span>
|
||||
<span class="nv">lastGeneratedColumnWritten = </span><span class="mi">0</span>
|
||||
<span class="nv">lastSourceLineWritten = </span><span class="mi">0</span>
|
||||
<span class="nv">lastSourceColumnWritten = </span><span class="mi">0</span>
|
||||
<span class="nv">needComma = </span><span class="kc">no</span>
|
||||
writingGeneratedLine = <span class="number">0</span>
|
||||
lastGeneratedColumnWritten = <span class="number">0</span>
|
||||
lastSourceLineWritten = <span class="number">0</span>
|
||||
lastSourceColumnWritten = <span class="number">0</span>
|
||||
needComma = <span class="literal">no</span>
|
||||
|
||||
<span class="nv">mappings = </span><span class="s">""</span>
|
||||
mappings = <span class="string">""</span>
|
||||
|
||||
<span class="nx">sourceMap</span><span class="p">.</span><span class="nx">forEachMapping</span> <span class="nf">(mapping) -></span>
|
||||
<span class="k">while</span> <span class="nx">writingGeneratedLine</span> <span class="o"><</span> <span class="nx">mapping</span><span class="p">.</span><span class="nx">generatedLine</span>
|
||||
<span class="nv">lastGeneratedColumnWritten = </span><span class="mi">0</span>
|
||||
<span class="nv">needComma = </span><span class="kc">no</span>
|
||||
<span class="nx">mappings</span> <span class="o">+=</span> <span class="s">";"</span>
|
||||
<span class="nx">writingGeneratedLine</span><span class="o">++</span></pre></div></div>
|
||||
sourceMap.forEachMapping (mapping) ->
|
||||
<span class="keyword">while</span> writingGeneratedLine < mapping.generatedLine
|
||||
lastGeneratedColumnWritten = <span class="number">0</span>
|
||||
needComma = <span class="literal">no</span>
|
||||
mappings += <span class="string">";"</span>
|
||||
writingGeneratedLine++</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-12">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-12">¶</a>
|
||||
</div>
|
||||
|
||||
<p>Write a comma if we've already written a segment on this line.
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-12">¶</a>
|
||||
</div>
|
||||
<p>Write a comma if we've already written a segment on this line.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="k">if</span> <span class="nx">needComma</span>
|
||||
<span class="nx">mappings</span> <span class="o">+=</span> <span class="s">","</span>
|
||||
<span class="nv">needComma = </span><span class="kc">no</span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre> <span class="keyword">if</span> needComma
|
||||
mappings += <span class="string">","</span>
|
||||
needComma = <span class="literal">no</span></pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-13">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-13">¶</a>
|
||||
</div>
|
||||
|
||||
<p>Write the next segment.
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-13">¶</a>
|
||||
</div>
|
||||
<p>Write the next segment.
|
||||
Segments can be 1, 4, or 5 values. If just one, then it is a generated column which
|
||||
doesn't match anything in the source code.
|
||||
|
||||
@@ -413,345 +404,330 @@ doesn't match anything in the source code.
|
||||
|
||||
</p>
|
||||
<p>Add the generated start-column
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="nx">mappings</span> <span class="o">+=</span> <span class="nx">exports</span><span class="p">.</span><span class="nx">vlqEncodeValue</span><span class="p">(</span><span class="nx">mapping</span><span class="p">.</span><span class="nx">generatedColumn</span> <span class="o">-</span> <span class="nx">lastGeneratedColumnWritten</span><span class="p">)</span>
|
||||
<span class="nv">lastGeneratedColumnWritten = </span><span class="nx">mapping</span><span class="p">.</span><span class="nx">generatedColumn</span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre> mappings += exports.vlqEncodeValue(mapping.generatedColumn - lastGeneratedColumnWritten)
|
||||
lastGeneratedColumnWritten = mapping.generatedColumn</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-14">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-14">¶</a>
|
||||
</div>
|
||||
|
||||
<p>Add the index into the sources list
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-14">¶</a>
|
||||
</div>
|
||||
<p>Add the index into the sources list
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="nx">mappings</span> <span class="o">+=</span> <span class="nx">exports</span><span class="p">.</span><span class="nx">vlqEncodeValue</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre> mappings += exports.vlqEncodeValue(<span class="number">0</span>)</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-15">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-15">¶</a>
|
||||
</div>
|
||||
|
||||
<p>Add the source start-line
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-15">¶</a>
|
||||
</div>
|
||||
<p>Add the source start-line
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="nx">mappings</span> <span class="o">+=</span> <span class="nx">exports</span><span class="p">.</span><span class="nx">vlqEncodeValue</span><span class="p">(</span><span class="nx">mapping</span><span class="p">.</span><span class="nx">sourceLine</span> <span class="o">-</span> <span class="nx">lastSourceLineWritten</span><span class="p">)</span>
|
||||
<span class="nv">lastSourceLineWritten = </span><span class="nx">mapping</span><span class="p">.</span><span class="nx">sourceLine</span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre> mappings += exports.vlqEncodeValue(mapping.sourceLine - lastSourceLineWritten)
|
||||
lastSourceLineWritten = mapping.sourceLine</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-16">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-16">¶</a>
|
||||
</div>
|
||||
|
||||
<p>Add the source start-column
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-16">¶</a>
|
||||
</div>
|
||||
<p>Add the source start-column
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="nx">mappings</span> <span class="o">+=</span> <span class="nx">exports</span><span class="p">.</span><span class="nx">vlqEncodeValue</span><span class="p">(</span><span class="nx">mapping</span><span class="p">.</span><span class="nx">sourceColumn</span> <span class="o">-</span> <span class="nx">lastSourceColumnWritten</span><span class="p">)</span>
|
||||
<span class="nv">lastSourceColumnWritten = </span><span class="nx">mapping</span><span class="p">.</span><span class="nx">sourceColumn</span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre> mappings += exports.vlqEncodeValue(mapping.sourceColumn - lastSourceColumnWritten)
|
||||
lastSourceColumnWritten = mapping.sourceColumn</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-17">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-17">¶</a>
|
||||
</div>
|
||||
|
||||
<p>TODO: Do we care about symbol names for CoffeeScript? Probably not.
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-17">¶</a>
|
||||
</div>
|
||||
<p>TODO: Do we care about symbol names for CoffeeScript? Probably not.
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="nv">needComma = </span><span class="kc">yes</span>
|
||||
<div class="content"><div class='highlight'><pre> needComma = <span class="literal">yes</span>
|
||||
|
||||
<span class="nv">answer = </span><span class="p">{</span>
|
||||
<span class="nv">version: </span><span class="mi">3</span>
|
||||
<span class="nv">file: </span><span class="nx">generatedFile</span>
|
||||
<span class="nx">sourceRoot</span>
|
||||
<span class="nv">sources: </span><span class="nx">sourceFiles</span>
|
||||
<span class="nv">names: </span><span class="p">[]</span>
|
||||
<span class="nx">mappings</span>
|
||||
<span class="p">}</span>
|
||||
answer = {
|
||||
version: <span class="number">3</span>
|
||||
file: generatedFile
|
||||
sourceRoot
|
||||
sources: sourceFiles
|
||||
names: []
|
||||
mappings
|
||||
}
|
||||
answer.sourcesContent = [code] <span class="keyword">if</span> options.inline
|
||||
|
||||
<span class="k">return</span> <span class="nx">JSON</span><span class="p">.</span><span class="nx">stringify</span> <span class="nx">answer</span><span class="p">,</span> <span class="kc">null</span><span class="p">,</span> <span class="mi">2</span></pre></div></div>
|
||||
<span class="keyword">return</span> JSON.stringify answer, <span class="literal">null</span>, <span class="number">2</span></pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-18">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-18">¶</a>
|
||||
</div>
|
||||
|
||||
<p>Load a SourceMap from a JSON string. Returns the SourceMap object.
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-18">¶</a>
|
||||
</div>
|
||||
<p>Load a SourceMap from a JSON string. Returns the SourceMap object.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre><span class="nv">exports.loadV3SourceMap = </span><span class="nf">(sourceMap) -></span>
|
||||
<span class="nx">todo</span><span class="p">()</span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre>exports.<span class="function"><span class="title">loadV3SourceMap</span></span> = (sourceMap) ->
|
||||
todo()</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-19">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-19">¶</a>
|
||||
</div>
|
||||
|
||||
<h3>Base64 encoding helpers</h3>
|
||||
<div class="pilwrap for-h3">
|
||||
<a class="pilcrow" href="#section-19">¶</a>
|
||||
</div>
|
||||
<h3>Base64 encoding helpers</h3>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre><span class="nv">BASE64_CHARS = </span><span class="s">'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'</span>
|
||||
<span class="nv">MAX_BASE64_VALUE = </span><span class="nx">BASE64_CHARS</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span>
|
||||
<div class="content"><div class='highlight'><pre>BASE64_CHARS = <span class="string">'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'</span>
|
||||
MAX_BASE64_VALUE = BASE64_CHARS.length - <span class="number">1</span>
|
||||
|
||||
<span class="nv">encodeBase64Char = </span><span class="nf">(value) -></span>
|
||||
<span class="k">if</span> <span class="nx">value</span> <span class="o">></span> <span class="nx">MAX_BASE64_VALUE</span>
|
||||
<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s">"Cannot encode value </span><span class="si">#{</span><span class="nx">value</span><span class="si">}</span><span class="s"> > </span><span class="si">#{</span><span class="nx">MAX_BASE64_VALUE</span><span class="si">}</span><span class="s">"</span>
|
||||
<span class="k">else</span> <span class="k">if</span> <span class="nx">value</span> <span class="o"><</span> <span class="mi">0</span>
|
||||
<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s">"Cannot encode value </span><span class="si">#{</span><span class="nx">value</span><span class="si">}</span><span class="s"> < 0"</span>
|
||||
<span class="nx">BASE64_CHARS</span><span class="p">[</span><span class="nx">value</span><span class="p">]</span>
|
||||
<span class="function"><span class="title">encodeBase64Char</span></span> = (value) ->
|
||||
<span class="keyword">if</span> value > MAX_BASE64_VALUE
|
||||
<span class="keyword">throw</span> <span class="keyword">new</span> Error <span class="string">"Cannot encode value <span class="subst">#{value}</span> > <span class="subst">#{MAX_BASE64_VALUE}</span>"</span>
|
||||
<span class="keyword">else</span> <span class="keyword">if</span> value < <span class="number">0</span>
|
||||
<span class="keyword">throw</span> <span class="keyword">new</span> Error <span class="string">"Cannot encode value <span class="subst">#{value}</span> < 0"</span>
|
||||
BASE64_CHARS[value]
|
||||
|
||||
<span class="nv">decodeBase64Char = </span><span class="nf">(char) -></span>
|
||||
<span class="nv">value = </span><span class="nx">BASE64_CHARS</span><span class="p">.</span><span class="nx">indexOf</span> <span class="nx">char</span>
|
||||
<span class="k">if</span> <span class="nx">value</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span>
|
||||
<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s">"Invalid Base 64 character: </span><span class="si">#{</span><span class="nx">char</span><span class="si">}</span><span class="s">"</span>
|
||||
<span class="nx">value</span></pre></div></div>
|
||||
<span class="function"><span class="title">decodeBase64Char</span></span> = (char) ->
|
||||
value = BASE64_CHARS.indexOf char
|
||||
<span class="keyword">if</span> value == -<span class="number">1</span>
|
||||
<span class="keyword">throw</span> <span class="keyword">new</span> Error <span class="string">"Invalid Base 64 character: <span class="subst">#{char}</span>"</span>
|
||||
value</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-20">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-20">¶</a>
|
||||
</div>
|
||||
|
||||
<h3>Base 64 VLQ encoding/decoding helpers</h3>
|
||||
<div class="pilwrap for-h3">
|
||||
<a class="pilcrow" href="#section-20">¶</a>
|
||||
</div>
|
||||
<h3>Base 64 VLQ encoding/decoding helpers</h3>
|
||||
<p>Note that SourceMap VLQ encoding is "backwards". MIDI style VLQ encoding puts the
|
||||
most-significant-bit (MSB) from the original value into the MSB of the VLQ encoded value
|
||||
(see <a href="http://en.wikipedia.org/wiki/File:Uintvar_coding.svg">http://en.wikipedia.org/wiki/File:Uintvar_coding.svg</a>). SourceMap VLQ does things
|
||||
the other way around, with the least significat four bits of the original value encoded
|
||||
into the first byte of the VLQ encoded value.
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre><span class="nv">VLQ_SHIFT = </span><span class="mi">5</span>
|
||||
<span class="nv">VLQ_CONTINUATION_BIT = </span><span class="mi">1</span> <span class="o"><<</span> <span class="nx">VLQ_SHIFT</span> <span class="c1"># 0010 0000</span>
|
||||
<span class="nv">VLQ_VALUE_MASK = </span><span class="nx">VLQ_CONTINUATION_BIT</span> <span class="o">-</span> <span class="mi">1</span> <span class="c1"># 0001 1111</span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre>VLQ_SHIFT = <span class="number">5</span>
|
||||
VLQ_CONTINUATION_BIT = <span class="number">1</span> << VLQ_SHIFT <span class="comment"># 0010 0000</span>
|
||||
VLQ_VALUE_MASK = VLQ_CONTINUATION_BIT - <span class="number">1</span> <span class="comment"># 0001 1111</span></pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-21">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-21">¶</a>
|
||||
</div>
|
||||
|
||||
<p>Encode a value as Base 64 VLQ.
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-21">¶</a>
|
||||
</div>
|
||||
<p>Encode a value as Base 64 VLQ.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre><span class="nv">exports.vlqEncodeValue = </span><span class="nf">(value) -></span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre>exports.<span class="function"><span class="title">vlqEncodeValue</span></span> = (value) -></pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-22">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-22">¶</a>
|
||||
</div>
|
||||
|
||||
<p>Least significant bit represents the sign.
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-22">¶</a>
|
||||
</div>
|
||||
<p>Least significant bit represents the sign.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="nv">signBit = </span><span class="k">if</span> <span class="nx">value</span> <span class="o"><</span> <span class="mi">0</span> <span class="k">then</span> <span class="mi">1</span> <span class="k">else</span> <span class="mi">0</span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre> signBit = <span class="keyword">if</span> value < <span class="number">0</span> <span class="keyword">then</span> <span class="number">1</span> <span class="keyword">else</span> <span class="number">0</span></pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-23">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-23">¶</a>
|
||||
</div>
|
||||
|
||||
<p>Next bits are the actual value
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-23">¶</a>
|
||||
</div>
|
||||
<p>Next bits are the actual value
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="nv">valueToEncode = </span><span class="p">(</span><span class="nb">Math</span><span class="p">.</span><span class="nx">abs</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="o"><<</span> <span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="nx">signBit</span>
|
||||
<div class="content"><div class='highlight'><pre> valueToEncode = (Math.abs(value) << <span class="number">1</span>) + signBit
|
||||
|
||||
<span class="nv">answer = </span><span class="s">""</span></pre></div></div>
|
||||
answer = <span class="string">""</span></pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-24">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-24">¶</a>
|
||||
</div>
|
||||
|
||||
<p>Make sure we encode at least one character, even if valueToEncode is 0.
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-24">¶</a>
|
||||
</div>
|
||||
<p>Make sure we encode at least one character, even if valueToEncode is 0.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="k">while</span> <span class="nx">valueToEncode</span> <span class="o">||</span> <span class="o">!</span><span class="nx">answer</span>
|
||||
<span class="nv">nextVlqChunk = </span><span class="nx">valueToEncode</span> <span class="o">&</span> <span class="nx">VLQ_VALUE_MASK</span>
|
||||
<span class="nv">valueToEncode = </span><span class="nx">valueToEncode</span> <span class="o">>></span> <span class="nx">VLQ_SHIFT</span>
|
||||
<div class="content"><div class='highlight'><pre> <span class="keyword">while</span> valueToEncode || !answer
|
||||
nextVlqChunk = valueToEncode & VLQ_VALUE_MASK
|
||||
valueToEncode = valueToEncode >> VLQ_SHIFT
|
||||
|
||||
<span class="k">if</span> <span class="nx">valueToEncode</span>
|
||||
<span class="nx">nextVlqChunk</span> <span class="o">|=</span> <span class="nx">VLQ_CONTINUATION_BIT</span>
|
||||
<span class="keyword">if</span> valueToEncode
|
||||
nextVlqChunk |= VLQ_CONTINUATION_BIT
|
||||
|
||||
<span class="nx">answer</span> <span class="o">+=</span> <span class="nx">encodeBase64Char</span><span class="p">(</span><span class="nx">nextVlqChunk</span><span class="p">)</span>
|
||||
answer += encodeBase64Char(nextVlqChunk)
|
||||
|
||||
<span class="k">return</span> <span class="nx">answer</span></pre></div></div>
|
||||
<span class="keyword">return</span> answer</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-25">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-25">¶</a>
|
||||
</div>
|
||||
|
||||
<p>Decode a Base 64 VLQ value.
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-25">¶</a>
|
||||
</div>
|
||||
<p>Decode a Base 64 VLQ value.
|
||||
|
||||
</p>
|
||||
<p>Returns <code>[value, consumed]</code> where <code>value</code> is the decoded value, and <code>consumed</code> is the number
|
||||
of characters consumed from <code>str</code>.
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre><span class="nv">exports.vlqDecodeValue = </span><span class="nf">(str, offset=0) -></span>
|
||||
<span class="nv">position = </span><span class="nx">offset</span>
|
||||
<span class="nv">done = </span><span class="kc">false</span>
|
||||
<div class="content"><div class='highlight'><pre>exports.<span class="function"><span class="title">vlqDecodeValue</span></span> = (str, offset=<span class="number">0</span>) ->
|
||||
position = offset
|
||||
done = <span class="literal">false</span>
|
||||
|
||||
<span class="nv">value = </span><span class="mi">0</span>
|
||||
<span class="nv">continuationShift = </span><span class="mi">0</span>
|
||||
value = <span class="number">0</span>
|
||||
continuationShift = <span class="number">0</span>
|
||||
|
||||
<span class="k">while</span> <span class="o">!</span><span class="nx">done</span>
|
||||
<span class="nv">nextVlqChunk = </span><span class="nx">decodeBase64Char</span><span class="p">(</span><span class="nx">str</span><span class="p">[</span><span class="nx">position</span><span class="p">])</span>
|
||||
<span class="nx">position</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="keyword">while</span> !done
|
||||
nextVlqChunk = decodeBase64Char(str[position])
|
||||
position += <span class="number">1</span>
|
||||
|
||||
<span class="nv">nextChunkValue = </span><span class="nx">nextVlqChunk</span> <span class="o">&</span> <span class="nx">VLQ_VALUE_MASK</span>
|
||||
<span class="nx">value</span> <span class="o">+=</span> <span class="p">(</span><span class="nx">nextChunkValue</span> <span class="o"><<</span> <span class="nx">continuationShift</span><span class="p">)</span>
|
||||
nextChunkValue = nextVlqChunk & VLQ_VALUE_MASK
|
||||
value += (nextChunkValue << continuationShift)
|
||||
|
||||
<span class="k">if</span> <span class="o">!</span><span class="p">(</span><span class="nx">nextVlqChunk</span> <span class="o">&</span> <span class="nx">VLQ_CONTINUATION_BIT</span><span class="p">)</span></pre></div></div>
|
||||
<span class="keyword">if</span> !(nextVlqChunk & VLQ_CONTINUATION_BIT)</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-26">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-26">¶</a>
|
||||
</div>
|
||||
|
||||
<p>We'll be done after this character.
|
||||
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-26">¶</a>
|
||||
</div>
|
||||
<p>We'll be done after this character.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="nv">done = </span><span class="kc">true</span></pre></div></div>
|
||||
<div class="content"><div class='highlight'><pre> done = <span class="literal">true</span></pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-27">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-27">¶</a>
|
||||
</div>
|
||||
|
||||
<p>Bits are encoded least-significant first (opposite of MIDI VLQ). Increase the
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-27">¶</a>
|
||||
</div>
|
||||
<p>Bits are encoded least-significant first (opposite of MIDI VLQ). Increase the
|
||||
continuationShift, so the next byte will end up where it should in the value.
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="nx">continuationShift</span> <span class="o">+=</span> <span class="nx">VLQ_SHIFT</span>
|
||||
<div class="content"><div class='highlight'><pre> continuationShift += VLQ_SHIFT
|
||||
|
||||
<span class="nv">consumed = </span><span class="nx">position</span> <span class="o">-</span> <span class="nx">offset</span></pre></div></div>
|
||||
consumed = position - offset</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li id="section-28">
|
||||
<div class="annotation">
|
||||
<div class="pilwrap">
|
||||
<a class="pilcrow" href="#section-28">¶</a>
|
||||
</div>
|
||||
|
||||
<p>Least significant bit represents the sign.
|
||||
<div class="pilwrap ">
|
||||
<a class="pilcrow" href="#section-28">¶</a>
|
||||
</div>
|
||||
<p>Least significant bit represents the sign.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class="highlight"><pre> <span class="nv">signBit = </span><span class="nx">value</span> <span class="o">&</span> <span class="mi">1</span>
|
||||
<span class="nv">value = </span><span class="nx">value</span> <span class="o">>></span> <span class="mi">1</span>
|
||||
<div class="content"><div class='highlight'><pre> signBit = value & <span class="number">1</span>
|
||||
value = value >> <span class="number">1</span>
|
||||
|
||||
<span class="k">if</span> <span class="nx">signBit</span> <span class="k">then</span> <span class="nv">value = </span><span class="o">-</span><span class="nx">value</span>
|
||||
<span class="keyword">if</span> signBit <span class="keyword">then</span> value = -value
|
||||
|
||||
<span class="k">return</span> <span class="p">[</span><span class="nx">value</span><span class="p">,</span> <span class="nx">consumed</span><span class="p">]</span>
|
||||
|
||||
</pre></div></div>
|
||||
<span class="keyword">return</span> [value, consumed]</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user