diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2016-05-21 17:44:53 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2016-05-21 17:44:53 -0700 |
commit | 2f02189ddcdeb7d25b0ca9bd5b955b764d41a1a7 (patch) | |
tree | 7c2e8b6e37ae3201dc01e90bcb390ee60b7f4a77 /html/052tangle.cc.html | |
parent | 61c025b11ed4ddd002f09f061fd77c75d8b6d0ba (diff) | |
download | mu-2f02189ddcdeb7d25b0ca9bd5b955b764d41a1a7.tar.gz |
2996
Diffstat (limited to 'html/052tangle.cc.html')
-rw-r--r-- | html/052tangle.cc.html | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/html/052tangle.cc.html b/html/052tangle.cc.html index 6356cd68..14832b2a 100644 --- a/html/052tangle.cc.html +++ b/html/052tangle.cc.html @@ -76,6 +76,7 @@ Fragments_used<span class="Delimiter">.</span>clear<span class="Delimiter">();</ Before_fragments[label]<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>Before_fragments[label]<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>end<span class="Delimiter">(),</span> tmp<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> tmp<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>end<span class="Delimiter">());</span> <span class="Normal">else</span> raise << <span class="Constant">"can't tangle before label "</span> << label << <span class="cSpecial">'\n'</span> << end<span class="Delimiter">();</span> + <span class="Comment">// End before Command Handler</span> <span class="Delimiter">}</span> <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>command == <span class="Constant">"after"</span><span class="Delimiter">)</span> <span class="Delimiter">{</span> string label = next_word<span class="Delimiter">(</span>in<span class="Delimiter">);</span> @@ -85,6 +86,7 @@ Fragments_used<span class="Delimiter">.</span>clear<span class="Delimiter">();</ After_fragments[label]<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>After_fragments[label]<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> tmp<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> tmp<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>end<span class="Delimiter">());</span> <span class="Normal">else</span> raise << <span class="Constant">"can't tangle after label "</span> << label << <span class="cSpecial">'\n'</span> << end<span class="Delimiter">();</span> + <span class="Comment">// End after Command Handler</span> <span class="Delimiter">}</span> <span class="Comment">//: after all recipes are loaded, insert fragments at appropriate labels.</span> @@ -179,11 +181,11 @@ check_insert_fragments<span class="Delimiter">();</span> <span class="Normal">void</span> check_insert_fragments<span class="Delimiter">()</span> <span class="Delimiter">{</span> <span class="Normal">for</span> <span class="Delimiter">(</span>map<string<span class="Delimiter">,</span> recipe>::iterator p = Before_fragments<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != Before_fragments<span class="Delimiter">.</span>end<span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Fragments_used<span class="Delimiter">,</span> p<span class="Delimiter">-></span>first<span class="Delimiter">))</span> - raise << <span class="Constant">"could not locate insert before "</span> << p<span class="Delimiter">-></span>first << <span class="cSpecial">'\n'</span> << end<span class="Delimiter">();</span> + raise << <span class="Constant">"could not locate insert before label "</span> << p<span class="Delimiter">-></span>first << <span class="cSpecial">'\n'</span> << end<span class="Delimiter">();</span> <span class="Delimiter">}</span> <span class="Normal">for</span> <span class="Delimiter">(</span>map<string<span class="Delimiter">,</span> recipe>::iterator p = After_fragments<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != After_fragments<span class="Delimiter">.</span>end<span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Fragments_used<span class="Delimiter">,</span> p<span class="Delimiter">-></span>first<span class="Delimiter">))</span> - raise << <span class="Constant">"could not locate insert after "</span> << p<span class="Delimiter">-></span>first << <span class="cSpecial">'\n'</span> << end<span class="Delimiter">();</span> + raise << <span class="Constant">"could not locate insert after label "</span> << p<span class="Delimiter">-></span>first << <span class="cSpecial">'\n'</span> << end<span class="Delimiter">();</span> <span class="Delimiter">}</span> <span class="Delimiter">}</span> @@ -450,6 +452,35 @@ before <label1> [ <span class="traceAbsent">-mem: storing 12 in location 3</span> <span class="Comment"># nothing else</span> $mem: <span class="Constant">2</span> + +<span class="Comment">//: ensure that there are no new fragments created for a label after it's already been inserted to</span> + +<span class="Delimiter">:(code)</span> +<span class="Normal">void</span> test_new_fragment_after_tangle<span class="Delimiter">()</span> <span class="Delimiter">{</span> + <span class="Comment">// define a recipe</span> + load<span class="Delimiter">(</span><span class="Constant">"def foo [</span><span class="cSpecial">\n</span><span class="Constant">"</span> + <span class="Constant">" local-scope</span><span class="cSpecial">\n</span><span class="Constant">"</span> + <span class="Constant">" <label></span><span class="cSpecial">\n</span><span class="Constant">"</span> + <span class="Constant">"]</span><span class="cSpecial">\n</span><span class="Constant">"</span> + <span class="Constant">"after <label> [</span><span class="cSpecial">\n</span><span class="Constant">"</span> + <span class="Constant">" 1:number/raw <- copy 34</span><span class="cSpecial">\n</span><span class="Constant">"</span> + <span class="Constant">"]</span><span class="cSpecial">\n</span><span class="Constant">"</span><span class="Delimiter">);</span> + transform_all<span class="Delimiter">();</span> + CHECK_TRACE_DOESNT_CONTAIN_ERROR<span class="Delimiter">();</span> + Hide_errors = <span class="Constant">true</span><span class="Delimiter">;</span> + <span class="Comment">// try to tangle into recipe foo after transform</span> + load<span class="Delimiter">(</span><span class="Constant">"before <label> [</span><span class="cSpecial">\n</span><span class="Constant">"</span> + <span class="Constant">" 2:number/raw <- copy 35</span><span class="cSpecial">\n</span><span class="Constant">"</span> + <span class="Constant">"]</span><span class="cSpecial">\n</span><span class="Constant">"</span><span class="Delimiter">);</span> + CHECK_TRACE_CONTAINS_ERROR<span class="Delimiter">();</span> +<span class="Delimiter">}</span> + +<span class="Delimiter">:(before "End before Command Handler")</span> +<span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Fragments_used<span class="Delimiter">,</span> label<span class="Delimiter">))</span> + raise << <span class="Constant">"we've already tangled some code at label "</span> << label << <span class="Constant">" in a previous call to transform_all(). Those locations won't be updated.</span><span class="cSpecial">\n</span><span class="Constant">"</span> << end<span class="Delimiter">();</span> +<span class="Delimiter">:(before "End after Command Handler")</span> +<span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Fragments_used<span class="Delimiter">,</span> label<span class="Delimiter">))</span> + raise << <span class="Constant">"we've already tangled some code at label "</span> << label << <span class="Constant">" in a previous call to transform_all(). Those locations won't be updated.</span><span class="cSpecial">\n</span><span class="Constant">"</span> << end<span class="Delimiter">();</span> </pre> </body> </html> |