2.2.1 (#4885) · jashkenas/coffeescript@a73f66b
@@ -2947,7 +2947,11 @@ <h3 id="range">Range</h3>
29472947 idx = del o, <span class="hljs-string">'index'</span>
29482948 idxName = del o, <span class="hljs-string">'name'</span>
29492949 namedIndex = idxName <span class="hljs-keyword">and</span> idxName <span class="hljs-keyword">isnt</span> idx
2950- varPart = <span class="hljs-string">"<span class="hljs-subst">#{idx}</span> = <span class="hljs-subst">#{@fromC}</span>"</span>
2950+ varPart =
2951+<span class="hljs-keyword">if</span> known <span class="hljs-keyword">and</span> <span class="hljs-keyword">not</span> namedIndex
2952+<span class="hljs-string">"var <span class="hljs-subst">#{idx}</span> = <span class="hljs-subst">#{@fromC}</span>"</span>
2953+<span class="hljs-keyword">else</span>
2954+<span class="hljs-string">"<span class="hljs-subst">#{idx}</span> = <span class="hljs-subst">#{@fromC}</span>"</span>
29512955 varPart += <span class="hljs-string">", <span class="hljs-subst">#{@toC}</span>"</span> <span class="hljs-keyword">if</span> @toC <span class="hljs-keyword">isnt</span> @toVar
29522956 varPart += <span class="hljs-string">", <span class="hljs-subst">#{@step}</span>"</span> <span class="hljs-keyword">if</span> @step <span class="hljs-keyword">isnt</span> @stepVar
29532957 [lt, gt] = [<span class="hljs-string">"<span class="hljs-subst">#{idx}</span> <<span class="hljs-subst">#{@equals}</span>"</span>, <span class="hljs-string">"<span class="hljs-subst">#{idx}</span> ><span class="hljs-subst">#{@equals}</span>"</span>]</pre></div></div>
@@ -4955,8 +4959,8 @@ <h3 id="assign">Assign</h3>
4955495949564960<div class="content"><div class='highlight'><pre> objects[splatsAndExpans.sort()[<span class="hljs-number">1</span>]].error <span class="hljs-string">"multiple splats/expansions are disallowed in an assignment"</span>
495749614958- isSplat = splats.length
4959- isExpans = expans.length
4962+ isSplat = splats?.length > <span class="hljs-number">0</span>
4963+ isExpans = expans?.length > <span class="hljs-number">0</span>
49604964 isObject = @variable.isObject()
49614965 isArray = @variable.isArray()
49624966@@ -5101,7 +5105,7 @@ <h3 id="assign">Assign</h3>
5101510551025106</div>
510351075104-<div class="content"><div class='highlight'><pre><span class="hljs-function"> <span class="hljs-title">loopObjects</span> = <span class="hljs-params">(objs, vvarTxt)</span> =></span>
5108+<div class="content"><div class='highlight'><pre><span class="hljs-function"> <span class="hljs-title">loopObjects</span> = <span class="hljs-params">(objs, vvar, vvarTxt)</span> =></span>
51055109 objSpreads = hasObjSpreads objs
51065110<span class="hljs-keyword">for</span> obj, i <span class="hljs-keyword">in</span> objs</pre></div></div>
51075111@@ -5182,16 +5186,16 @@ <h3 id="assign">Assign</h3>
5182518651835187</div>
518451885185-<div class="content"><div class='highlight'><pre><span class="hljs-function"> <span class="hljs-title">assignObjects</span> = <span class="hljs-params">(objs, vvarTxt)</span> =></span>
5189+<div class="content"><div class='highlight'><pre><span class="hljs-function"> <span class="hljs-title">assignObjects</span> = <span class="hljs-params">(objs, vvar, vvarTxt)</span> =></span>
51865190 vvar = <span class="hljs-keyword">new</span> Value <span class="hljs-keyword">new</span> Arr(objs, <span class="hljs-literal">yes</span>)
51875191 vval = <span class="hljs-keyword">if</span> vvarTxt <span class="hljs-keyword">instanceof</span> Value <span class="hljs-keyword">then</span> vvarTxt <span class="hljs-keyword">else</span> <span class="hljs-keyword">new</span> Value <span class="hljs-keyword">new</span> Literal(vvarTxt)
51885192 assigns.push <span class="hljs-keyword">new</span> Assign(vvar, vval, <span class="hljs-literal">null</span>, param: @param, subpattern: <span class="hljs-literal">yes</span>).compileToFragments o, LEVEL_LIST
51895193<span class="hljs-function">
5190-<span class="hljs-title">processObjects</span> = <span class="hljs-params">(objs, vvarTxt)</span> -></span>
5194+<span class="hljs-title">processObjects</span> = <span class="hljs-params">(objs, vvar, vvarTxt)</span> -></span>
51915195<span class="hljs-keyword">if</span> complexObjects objs
5192- loopObjects objs, vvarTxt
5196+ loopObjects objs, vvar, vvarTxt
51935197<span class="hljs-keyword">else</span>
5194- assignObjects objs, vvarTxt</pre></div></div>
5198+ assignObjects objs, vvar, vvarTxt</pre></div></div>
5195519951965200</li>
51975201@@ -5220,7 +5224,7 @@ <h3 id="assign">Assign</h3>
52205224 expIdx = splatsAndExpans[<span class="hljs-number">0</span>]
52215225 leftObjs = objects.slice <span class="hljs-number">0</span>, expIdx + (<span class="hljs-keyword">if</span> isSplat <span class="hljs-keyword">then</span> <span class="hljs-number">1</span> <span class="hljs-keyword">else</span> <span class="hljs-number">0</span>)
52225226 rightObjs = objects.slice expIdx + <span class="hljs-number">1</span>
5223- processObjects leftObjs, vvarText <span class="hljs-keyword">if</span> leftObjs.length <span class="hljs-keyword">isnt</span> <span class="hljs-number">0</span>
5227+ processObjects leftObjs, vvar, vvarText <span class="hljs-keyword">if</span> leftObjs.length <span class="hljs-keyword">isnt</span> <span class="hljs-number">0</span>
52245228<span class="hljs-keyword">if</span> rightObjs.length <span class="hljs-keyword">isnt</span> <span class="hljs-number">0</span></pre></div></div>
5225522952265230</li>
@@ -5243,7 +5247,7 @@ <h3 id="assign">Assign</h3>
52435247 restVar = refExp
52445248 refExp = o.scope.freeVariable <span class="hljs-string">'ref'</span>
52455249 assigns.push [@makeCode(refExp + <span class="hljs-string">' = '</span>), restVar.compileToFragments(o, LEVEL_LIST)...]
5246- processObjects rightObjs, refExp
5250+ processObjects rightObjs, vvar, refExp
52475251<span class="hljs-keyword">else</span></pre></div></div>
5248525252495253</li>
@@ -5259,7 +5263,7 @@ <h3 id="assign">Assign</h3>
5259526352605264</div>
526152655262-<div class="content"><div class='highlight'><pre> processObjects objects, vvarText
5266+<div class="content"><div class='highlight'><pre> processObjects objects, vvar, vvarText
52635267 assigns.push vvar <span class="hljs-keyword">unless</span> top <span class="hljs-keyword">or</span> @subpattern
52645268 fragments = @joinFragmentArrays assigns, <span class="hljs-string">', '</span>
52655269<span class="hljs-keyword">if</span> o.level < LEVEL_LIST <span class="hljs-keyword">then</span> fragments <span class="hljs-keyword">else</span> @wrapInParentheses fragments</pre></div></div>