diff options
author | Kartik Agaram <vc@akkartik.com> | 2019-02-25 00:26:48 -0800 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2019-02-25 01:50:53 -0800 |
commit | cb7b403210f13e721739d58dab9000ec51ed2d0a (patch) | |
tree | e8f56c9e5577f82127d158d683faab84041ff0d8 /html/subx/031check_operands.cc.html | |
parent | 565dcbab944d0182a8e41c47c9dba38ca72e75b1 (diff) | |
download | mu-cb7b403210f13e721739d58dab9000ec51ed2d0a.tar.gz |
4989
Diffstat (limited to 'html/subx/031check_operands.cc.html')
-rw-r--r-- | html/subx/031check_operands.cc.html | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/html/subx/031check_operands.cc.html b/html/subx/031check_operands.cc.html index af4bbab7..4a2e78f1 100644 --- a/html/subx/031check_operands.cc.html +++ b/html/subx/031check_operands.cc.html @@ -71,14 +71,14 @@ if ('onhashchange' in window) { <span id="L9" class="LineNr"> 9 </span> <span id="L10" class="LineNr"> 10 </span><span class="Delimiter">:(before "Pack Operands(segment code)")</span> <span id="L11" class="LineNr"> 11 </span>check_operands<span class="Delimiter">(</span><a href='031check_operands.cc.html#L11'>code</a><span class="Delimiter">);</span> -<span id="L12" class="LineNr"> 12 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L204'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span> +<span id="L12" class="LineNr"> 12 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L230'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span id="L13" class="LineNr"> 13 </span> <span id="L14" class="LineNr"> 14 </span><span class="Delimiter">:(code)</span> <span id="L15" class="LineNr"> 15 </span><span class="Normal">void</span> check_operands<span class="Delimiter">(</span><span class="Normal">const</span> segment& <a href='031check_operands.cc.html#L11'>code</a><span class="Delimiter">)</span> <span class="Delimiter">{</span> -<span id="L16" class="LineNr"> 16 </span> <a href='003trace.cc.html#L183'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">"transform"</span><span class="Delimiter">)</span> << <span class="Constant">"-- check operands"</span> << end<span class="Delimiter">();</span> +<span id="L16" class="LineNr"> 16 </span> <a href='003trace.cc.html#L98'>trace</a><span class="Delimiter">(</span><span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">"transform"</span><span class="Delimiter">)</span> << <span class="Constant">"-- check operands"</span> << end<span class="Delimiter">();</span> <span id="L17" class="LineNr"> 17 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i < <a href='001help.cc.html#L166'>SIZE</a><span class="Delimiter">(</span><a href='031check_operands.cc.html#L11'>code</a><span class="Delimiter">.</span><a href='011run.cc.html#L105'>lines</a><span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L18" class="LineNr"> 18 </span> check_operands<span class="Delimiter">(</span><a href='031check_operands.cc.html#L11'>code</a><span class="Delimiter">.</span><a href='011run.cc.html#L105'>lines</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span> -<span id="L19" class="LineNr"> 19 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L204'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span class="Comment">// stop at the first mal-formed instruction</span> +<span id="L19" class="LineNr"> 19 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L230'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span class="Comment">// stop at the first mal-formed instruction</span> <span id="L20" class="LineNr"> 20 </span> <span class="Delimiter">}</span> <span id="L21" class="LineNr"> 21 </span><span class="Delimiter">}</span> <span id="L22" class="LineNr"> 22 </span> @@ -323,16 +323,16 @@ if ('onhashchange' in window) { <span id="L261" class="LineNr">261 </span><span class="Normal">void</span> <a href='031check_operands.cc.html#L261'>compare_bitvector</a><span class="Delimiter">(</span><span class="Normal">const</span> line& inst<span class="Delimiter">,</span> <span class="Normal">uint8_t</span> expected<span class="Delimiter">,</span> <span class="Normal">const</span> word& op<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L262" class="LineNr">262 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='030---operands.cc.html#L379'>all_hex_bytes</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> && <a href='031check_operands.cc.html#L297'>has_operands</a><span class="Delimiter">(</span>inst<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span class="Comment">// deliberately programming in raw hex; we'll raise a warning elsewhere</span> <span id="L263" class="LineNr">263 </span> <span class="Normal">uint8_t</span> bitvector = <a href='031check_operands.cc.html#L287'>compute_expected_operand_bitvector</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span> -<span id="L264" class="LineNr">264 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L204'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span class="Comment">// duplicate operand type</span> +<span id="L264" class="LineNr">264 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L230'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span class="Comment">// duplicate operand type</span> <span id="L265" class="LineNr">265 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>bitvector == expected<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span class="Comment">// all good with this instruction</span> <span id="L266" class="LineNr">266 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i < <a href='031check_operands.cc.html#L71'>NUM_OPERAND_TYPES</a><span class="Delimiter">;</span> ++i<span class="Delimiter">,</span> bitvector >>= <span class="Constant">1</span><span class="Delimiter">,</span> expected >>= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L267" class="LineNr">267 </span><span class="CommentedCode">//? cerr << "comparing " << HEXBYTE << NUM(bitvector) << " with " << NUM(expected) << '\n';</span> <span id="L268" class="LineNr">268 </span> <span class="Normal">if</span> <span class="Delimiter">((</span>bitvector & <span class="Constant">0x1</span><span class="Delimiter">)</span> == <span class="Delimiter">(</span>expected & <span class="Constant">0x1</span><span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span> <span class="Comment">// all good with this operand</span> <span id="L269" class="LineNr">269 </span> <span class="Normal">const</span> string& optype = <span class="Special"><a href='031check_operands.cc.html#L74'>Operand_type_name</a></span><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span> <span id="L270" class="LineNr">270 </span> <span class="Normal">if</span> <span class="Delimiter">((</span>bitvector & <span class="Constant">0x1</span><span class="Delimiter">)</span> > <span class="Delimiter">(</span>expected & <span class="Constant">0x1</span><span class="Delimiter">))</span> -<span id="L271" class="LineNr">271 </span> <a href='003trace.cc.html#L190'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L279'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": unexpected "</span> << optype << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> +<span id="L271" class="LineNr">271 </span> <a href='003trace.cc.html#L217'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L279'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": unexpected "</span> << optype << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> <span id="L272" class="LineNr">272 </span> <span class="Normal">else</span> -<span id="L273" class="LineNr">273 </span> <a href='003trace.cc.html#L190'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L279'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": missing "</span> << optype << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> +<span id="L273" class="LineNr">273 </span> <a href='003trace.cc.html#L217'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L279'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": missing "</span> << optype << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> <span id="L274" class="LineNr">274 </span> <span class="Comment">// continue giving all errors for a single instruction</span> <span id="L275" class="LineNr">275 </span> <span class="Delimiter">}</span> <span id="L276" class="LineNr">276 </span> <span class="Comment">// ignore settings in any unused bits</span> @@ -340,9 +340,9 @@ if ('onhashchange' in window) { <span id="L278" class="LineNr">278 </span> <span id="L279" class="LineNr">279 </span>string <a href='031check_operands.cc.html#L279'>maybe_name</a><span class="Delimiter">(</span><span class="Normal">const</span> word& op<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L280" class="LineNr">280 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_hex_byte<span class="Delimiter">(</span>op<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">""</span><span class="Delimiter">;</span> -<span id="L281" class="LineNr">281 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L378'>Name</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">""</span><span class="Delimiter">;</span> +<span id="L281" class="LineNr">281 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L380'>Name</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">""</span><span class="Delimiter">;</span> <span id="L282" class="LineNr">282 </span> <span class="Comment">// strip stuff in parens from the name</span> -<span id="L283" class="LineNr">283 </span> <span class="Normal">const</span> string& s = get<span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L378'>Name</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">);</span> +<span id="L283" class="LineNr">283 </span> <span class="Normal">const</span> string& s = get<span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L380'>Name</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">);</span> <span id="L284" class="LineNr">284 </span> <span class="Identifier">return</span> <span class="Constant">" ("</span>+s<span class="Delimiter">.</span>substr<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> s<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">" ("</span><span class="Delimiter">))</span>+<span class="Constant">')'</span><span class="Delimiter">;</span> <span id="L285" class="LineNr">285 </span><span class="Delimiter">}</span> <span id="L286" class="LineNr">286 </span> @@ -351,7 +351,7 @@ if ('onhashchange' in window) { <span id="L289" class="LineNr">289 </span> <span class="Normal">uint32_t</span> bitvector = <span class="Constant">0</span><span class="Delimiter">;</span> <span id="L290" class="LineNr">290 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/*</span><span class="Comment">skip op</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span> i < <a href='001help.cc.html#L166'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L114'>words</a><span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L291" class="LineNr">291 </span> bitvector = bitvector | <a href='031check_operands.cc.html#L314'>expected_bit_for_received_operand</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L114'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> operands_found<span class="Delimiter">,</span> inst<span class="Delimiter">);</span> -<span id="L292" class="LineNr">292 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L204'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span> <a href='031check_operands.cc.html#L95'>INVALID_OPERANDS</a><span class="Delimiter">;</span> <span class="Comment">// duplicate operand type</span> +<span id="L292" class="LineNr">292 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L230'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span> <a href='031check_operands.cc.html#L95'>INVALID_OPERANDS</a><span class="Delimiter">;</span> <span class="Comment">// duplicate operand type</span> <span id="L293" class="LineNr">293 </span> <span class="Delimiter">}</span> <span id="L294" class="LineNr">294 </span> <span class="Identifier">return</span> bitvector<span class="Delimiter">;</span> <span id="L295" class="LineNr">295 </span><span class="Delimiter">}</span> @@ -383,11 +383,11 @@ if ('onhashchange' in window) { <span id="L321" class="LineNr">321 </span> expected_metadata = <span class="Constant">"modrm"</span><span class="Delimiter">;</span> <span id="L322" class="LineNr">322 </span> <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><span class="Special"><a href='031check_operands.cc.html#L75'>Operand_type</a></span><span class="Delimiter">,</span> curr<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span> <span class="Comment">// ignore unrecognized metadata</span> <span id="L323" class="LineNr">323 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>found<span class="Delimiter">)</span> <span class="Delimiter">{</span> -<span id="L324" class="LineNr">324 </span> <a href='003trace.cc.html#L190'>raise</a> << <span class="Constant">"'"</span> << w<span class="Delimiter">.</span>original << <span class="Constant">"' has conflicting operand types; it should have only one\n"</span> << end<span class="Delimiter">();</span> +<span id="L324" class="LineNr">324 </span> <a href='003trace.cc.html#L217'>raise</a> << <span class="Constant">"'"</span> << w<span class="Delimiter">.</span>original << <span class="Constant">"' has conflicting operand types; it should have only one\n"</span> << end<span class="Delimiter">();</span> <span id="L325" class="LineNr">325 </span> <span class="Identifier">return</span> <a href='031check_operands.cc.html#L95'>INVALID_OPERANDS</a><span class="Delimiter">;</span> <span id="L326" class="LineNr">326 </span> <span class="Delimiter">}</span> <span id="L327" class="LineNr">327 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>instruction_operands<span class="Delimiter">.</span>find<span class="Delimiter">(</span>curr<span class="Delimiter">)</span> != instruction_operands<span class="Delimiter">.</span>end<span class="Delimiter">())</span> <span class="Delimiter">{</span> -<span id="L328" class="LineNr">328 </span> <a href='003trace.cc.html#L190'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"': duplicate "</span> << curr << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> +<span id="L328" class="LineNr">328 </span> <a href='003trace.cc.html#L217'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"': duplicate "</span> << curr << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> <span id="L329" class="LineNr">329 </span> <span class="Identifier">return</span> <a href='031check_operands.cc.html#L95'>INVALID_OPERANDS</a><span class="Delimiter">;</span> <span id="L330" class="LineNr">330 </span> <span class="Delimiter">}</span> <span id="L331" class="LineNr">331 </span> instruction_operands<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>curr<span class="Delimiter">);</span> @@ -422,10 +422,10 @@ if ('onhashchange' in window) { <span id="L360" class="LineNr">360 </span> <a href='031check_operands.cc.html#L414'>check_operand_metadata_present</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"subop"</span><span class="Delimiter">,</span> op<span class="Delimiter">);</span> <span id="L361" class="LineNr">361 </span> <a href='031check_operands.cc.html#L419'>check_operand_metadata_absent</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"r32"</span><span class="Delimiter">,</span> op<span class="Delimiter">,</span> <span class="Constant">"should be replaced by subop"</span><span class="Delimiter">);</span> <span id="L362" class="LineNr">362 </span> <span class="Delimiter">}</span> -<span id="L363" class="LineNr">363 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L204'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span> +<span id="L363" class="LineNr">363 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L230'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span id="L364" class="LineNr">364 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"rm32"</span><span class="Delimiter">).</span>data != <span class="Constant">"4"</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span id="L365" class="LineNr">365 </span> <span class="Comment">// SIB byte checks</span> -<span id="L366" class="LineNr">366 </span> <span class="Normal">uint8_t</span> mod = <a href='011run.cc.html#L271'>hex_byte</a><span class="Delimiter">(</span>metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"mod"</span><span class="Delimiter">).</span>data<span class="Delimiter">);</span> +<span id="L366" class="LineNr">366 </span> <span class="Normal">uint8_t</span> mod = <a href='011run.cc.html#L266'>hex_byte</a><span class="Delimiter">(</span>metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"mod"</span><span class="Delimiter">).</span>data<span class="Delimiter">);</span> <span id="L367" class="LineNr">367 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>mod != <span class="Comment">/*</span><span class="Comment">direct</span><span class="Comment">*/</span><span class="Constant">3</span><span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L368" class="LineNr">368 </span> <a href='031check_operands.cc.html#L414'>check_operand_metadata_present</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"base"</span><span class="Delimiter">,</span> op<span class="Delimiter">);</span> <span id="L369" class="LineNr">369 </span> <a href='031check_operands.cc.html#L414'>check_operand_metadata_present</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"index"</span><span class="Delimiter">,</span> op<span class="Delimiter">);</span> <span class="Comment">// otherwise why go to SIB?</span> @@ -442,13 +442,13 @@ if ('onhashchange' in window) { <span id="L380" class="LineNr">380 </span><span class="Normal">void</span> <a href='031check_operands.cc.html#L380'>compare_bitvector_modrm</a><span class="Delimiter">(</span><span class="Normal">const</span> line& inst<span class="Delimiter">,</span> <span class="Normal">uint8_t</span> expected<span class="Delimiter">,</span> <span class="Normal">const</span> word& op<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L381" class="LineNr">381 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='030---operands.cc.html#L379'>all_hex_bytes</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> && <a href='031check_operands.cc.html#L297'>has_operands</a><span class="Delimiter">(</span>inst<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span class="Comment">// deliberately programming in raw hex; we'll raise a warning elsewhere</span> <span id="L382" class="LineNr">382 </span> <span class="Normal">uint8_t</span> bitvector = <a href='031check_operands.cc.html#L287'>compute_expected_operand_bitvector</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span> -<span id="L383" class="LineNr">383 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L204'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span class="Comment">// duplicate operand type</span> +<span id="L383" class="LineNr">383 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L230'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span class="Comment">// duplicate operand type</span> <span id="L384" class="LineNr">384 </span> <span class="Comment">// update 'expected' bitvector for the additional exception</span> <span id="L385" class="LineNr">385 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_operand_metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"mod"</span><span class="Delimiter">))</span> <span class="Delimiter">{</span> -<span id="L386" class="LineNr">386 </span> <span class="Normal">int32_t</span> mod = <a href='011run.cc.html#L360'>parse_int</a><span class="Delimiter">(</span>metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"mod"</span><span class="Delimiter">).</span>data<span class="Delimiter">);</span> +<span id="L386" class="LineNr">386 </span> <span class="Normal">int32_t</span> mod = <a href='011run.cc.html#L355'>parse_int</a><span class="Delimiter">(</span>metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"mod"</span><span class="Delimiter">).</span>data<span class="Delimiter">);</span> <span id="L387" class="LineNr">387 </span> <span class="Normal">switch</span> <span class="Delimiter">(</span>mod<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L388" class="LineNr">388 </span> <span class="Normal">case</span> <span class="Constant">0</span>: -<span id="L389" class="LineNr">389 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_operand_metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"rm32"</span><span class="Delimiter">)</span> && <a href='011run.cc.html#L360'>parse_int</a><span class="Delimiter">(</span>metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"rm32"</span><span class="Delimiter">).</span>data<span class="Delimiter">)</span> == <span class="Constant">5</span><span class="Delimiter">)</span> +<span id="L389" class="LineNr">389 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_operand_metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"rm32"</span><span class="Delimiter">)</span> && <a href='011run.cc.html#L355'>parse_int</a><span class="Delimiter">(</span>metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"rm32"</span><span class="Delimiter">).</span>data<span class="Delimiter">)</span> == <span class="Constant">5</span><span class="Delimiter">)</span> <span id="L390" class="LineNr">390 </span> expected |= <span class="Delimiter">(</span><span class="Constant">1</span><<DISP32<span class="Delimiter">);</span> <span id="L391" class="LineNr">391 </span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span id="L392" class="LineNr">392 </span> <span class="Normal">case</span> <span class="Constant">1</span>: @@ -465,9 +465,9 @@ if ('onhashchange' in window) { <span id="L403" class="LineNr">403 </span> <span class="Normal">if</span> <span class="Delimiter">((</span>bitvector & <span class="Constant">0x1</span><span class="Delimiter">)</span> == <span class="Delimiter">(</span>expected & <span class="Constant">0x1</span><span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span> <span class="Comment">// all good with this operand</span> <span id="L404" class="LineNr">404 </span> <span class="Normal">const</span> string& optype = <span class="Special"><a href='031check_operands.cc.html#L74'>Operand_type_name</a></span><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span> <span id="L405" class="LineNr">405 </span> <span class="Normal">if</span> <span class="Delimiter">((</span>bitvector & <span class="Constant">0x1</span><span class="Delimiter">)</span> > <span class="Delimiter">(</span>expected & <span class="Constant">0x1</span><span class="Delimiter">))</span> -<span id="L406" class="LineNr">406 </span> <a href='003trace.cc.html#L190'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L279'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": unexpected "</span> << optype << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> +<span id="L406" class="LineNr">406 </span> <a href='003trace.cc.html#L217'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L279'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": unexpected "</span> << optype << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> <span id="L407" class="LineNr">407 </span> <span class="Normal">else</span> -<span id="L408" class="LineNr">408 </span> <a href='003trace.cc.html#L190'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L279'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": missing "</span> << optype << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> +<span id="L408" class="LineNr">408 </span> <a href='003trace.cc.html#L217'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L279'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": missing "</span> << optype << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> <span id="L409" class="LineNr">409 </span> <span class="Comment">// continue giving all errors for a single instruction</span> <span id="L410" class="LineNr">410 </span> <span class="Delimiter">}</span> <span id="L411" class="LineNr">411 </span> <span class="Comment">// ignore settings in any unused bits</span> @@ -475,12 +475,12 @@ if ('onhashchange' in window) { <span id="L413" class="LineNr">413 </span> <span id="L414" class="LineNr">414 </span><span class="Normal">void</span> <a href='031check_operands.cc.html#L414'>check_operand_metadata_present</a><span class="Delimiter">(</span><span class="Normal">const</span> line& inst<span class="Delimiter">,</span> <span class="Normal">const</span> string& type<span class="Delimiter">,</span> <span class="Normal">const</span> word& op<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L415" class="LineNr">415 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!has_operand_metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> type<span class="Delimiter">))</span> -<span id="L416" class="LineNr">416 </span> <a href='003trace.cc.html#L190'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L279'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": missing "</span> << type << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> +<span id="L416" class="LineNr">416 </span> <a href='003trace.cc.html#L217'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L279'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": missing "</span> << type << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> <span id="L417" class="LineNr">417 </span><span class="Delimiter">}</span> <span id="L418" class="LineNr">418 </span> <span id="L419" class="LineNr">419 </span><span class="Normal">void</span> <a href='031check_operands.cc.html#L419'>check_operand_metadata_absent</a><span class="Delimiter">(</span><span class="Normal">const</span> line& inst<span class="Delimiter">,</span> <span class="Normal">const</span> string& type<span class="Delimiter">,</span> <span class="Normal">const</span> word& op<span class="Delimiter">,</span> <span class="Normal">const</span> string& msg<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L420" class="LineNr">420 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_operand_metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> type<span class="Delimiter">))</span> -<span id="L421" class="LineNr">421 </span> <a href='003trace.cc.html#L190'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L279'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": unexpected "</span> << type << <span class="Constant">" operand ("</span> << msg << <span class="Constant">")\n"</span> << end<span class="Delimiter">();</span> +<span id="L421" class="LineNr">421 </span> <a href='003trace.cc.html#L217'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L279'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": unexpected "</span> << type << <span class="Constant">" operand ("</span> << msg << <span class="Constant">")\n"</span> << end<span class="Delimiter">();</span> <span id="L422" class="LineNr">422 </span><span class="Delimiter">}</span> <span id="L423" class="LineNr">423 </span> <span id="L424" class="LineNr">424 </span><span class="Delimiter">:(scenarios transform)</span> @@ -575,19 +575,19 @@ if ('onhashchange' in window) { <span id="L513" class="LineNr">513 </span><span class="Normal">void</span> check_operands_0f<span class="Delimiter">(</span><span class="Normal">const</span> line& inst<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L514" class="LineNr">514 </span> assert<span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L114'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>data == <span class="Constant">"0f"</span><span class="Delimiter">);</span> <span id="L515" class="LineNr">515 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L166'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L114'>words</a><span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span> -<span id="L516" class="LineNr">516 </span> <a href='003trace.cc.html#L190'>raise</a> << <span class="Constant">"opcode '0f' requires a second opcode\n"</span> << end<span class="Delimiter">();</span> +<span id="L516" class="LineNr">516 </span> <a href='003trace.cc.html#L217'>raise</a> << <span class="Constant">"opcode '0f' requires a second opcode\n"</span> << end<span class="Delimiter">();</span> <span id="L517" class="LineNr">517 </span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span id="L518" class="LineNr">518 </span> <span class="Delimiter">}</span> <span id="L519" class="LineNr">519 </span> <a href='011run.cc.html#L119'>word</a> op = <a href='031check_operands.cc.html#L36'>preprocess_op</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L114'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">));</span> -<span id="L520" class="LineNr">520 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L379'>Name_0f</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">))</span> <span class="Delimiter">{</span> -<span id="L521" class="LineNr">521 </span> <a href='003trace.cc.html#L190'>raise</a> << <span class="Constant">"unknown 2-byte opcode '0f "</span> << op<span class="Delimiter">.</span>data << <span class="Constant">"'\n"</span> << end<span class="Delimiter">();</span> +<span id="L520" class="LineNr">520 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L381'>Name_0f</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">))</span> <span class="Delimiter">{</span> +<span id="L521" class="LineNr">521 </span> <a href='003trace.cc.html#L217'>raise</a> << <span class="Constant">"unknown 2-byte opcode '0f "</span> << op<span class="Delimiter">.</span>data << <span class="Constant">"'\n"</span> << end<span class="Delimiter">();</span> <span id="L522" class="LineNr">522 </span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span id="L523" class="LineNr">523 </span> <span class="Delimiter">}</span> <span id="L524" class="LineNr">524 </span> check_operands_0f<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> op<span class="Delimiter">);</span> <span id="L525" class="LineNr">525 </span><span class="Delimiter">}</span> <span id="L526" class="LineNr">526 </span> <span id="L527" class="LineNr">527 </span><span class="Normal">void</span> <a href='031check_operands.cc.html#L527'>check_operands_f3</a><span class="Delimiter">(</span><span class="Normal">const</span> line& <span class="Comment">/*</span><span class="Comment">unused</span><span class="Comment">*/</span><span class="Delimiter">)</span> <span class="Delimiter">{</span> -<span id="L528" class="LineNr">528 </span> <a href='003trace.cc.html#L190'>raise</a> << <span class="Constant">"no supported opcodes starting with f3\n"</span> << end<span class="Delimiter">();</span> +<span id="L528" class="LineNr">528 </span> <a href='003trace.cc.html#L217'>raise</a> << <span class="Constant">"no supported opcodes starting with f3\n"</span> << end<span class="Delimiter">();</span> <span id="L529" class="LineNr">529 </span><span class="Delimiter">}</span> <span id="L530" class="LineNr">530 </span> <span id="L531" class="LineNr">531 </span><span class="Delimiter">:(scenario check_missing_disp32_operand)</span> @@ -628,16 +628,16 @@ if ('onhashchange' in window) { <span id="L566" class="LineNr">566 </span><span class="Normal">void</span> <a href='031check_operands.cc.html#L566'>compare_bitvector_0f</a><span class="Delimiter">(</span><span class="Normal">const</span> line& inst<span class="Delimiter">,</span> <span class="Normal">uint8_t</span> expected<span class="Delimiter">,</span> <span class="Normal">const</span> word& op<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L567" class="LineNr">567 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='030---operands.cc.html#L379'>all_hex_bytes</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> && <a href='031check_operands.cc.html#L297'>has_operands</a><span class="Delimiter">(</span>inst<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span class="Comment">// deliberately programming in raw hex; we'll raise a warning elsewhere</span> <span id="L568" class="LineNr">568 </span> <span class="Normal">uint8_t</span> bitvector = <a href='031check_operands.cc.html#L287'>compute_expected_operand_bitvector</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span> -<span id="L569" class="LineNr">569 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L204'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span class="Comment">// duplicate operand type</span> +<span id="L569" class="LineNr">569 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L230'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span class="Comment">// duplicate operand type</span> <span id="L570" class="LineNr">570 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>bitvector == expected<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span class="Comment">// all good with this instruction</span> <span id="L571" class="LineNr">571 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i < <a href='031check_operands.cc.html#L71'>NUM_OPERAND_TYPES</a><span class="Delimiter">;</span> ++i<span class="Delimiter">,</span> bitvector >>= <span class="Constant">1</span><span class="Delimiter">,</span> expected >>= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L572" class="LineNr">572 </span><span class="CommentedCode">//? cerr << "comparing " << HEXBYTE << NUM(bitvector) << " with " << NUM(expected) << '\n';</span> <span id="L573" class="LineNr">573 </span> <span class="Normal">if</span> <span class="Delimiter">((</span>bitvector & <span class="Constant">0x1</span><span class="Delimiter">)</span> == <span class="Delimiter">(</span>expected & <span class="Constant">0x1</span><span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span> <span class="Comment">// all good with this operand</span> <span id="L574" class="LineNr">574 </span> <span class="Normal">const</span> string& optype = <span class="Special"><a href='031check_operands.cc.html#L74'>Operand_type_name</a></span><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span> <span id="L575" class="LineNr">575 </span> <span class="Normal">if</span> <span class="Delimiter">((</span>bitvector & <span class="Constant">0x1</span><span class="Delimiter">)</span> > <span class="Delimiter">(</span>expected & <span class="Constant">0x1</span><span class="Delimiter">))</span> -<span id="L576" class="LineNr">576 </span> <a href='003trace.cc.html#L190'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L584'>maybe_name_0f</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": unexpected "</span> << optype << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> +<span id="L576" class="LineNr">576 </span> <a href='003trace.cc.html#L217'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L584'>maybe_name_0f</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": unexpected "</span> << optype << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> <span id="L577" class="LineNr">577 </span> <span class="Normal">else</span> -<span id="L578" class="LineNr">578 </span> <a href='003trace.cc.html#L190'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L584'>maybe_name_0f</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": missing "</span> << optype << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> +<span id="L578" class="LineNr">578 </span> <a href='003trace.cc.html#L217'>raise</a> << <span class="Constant">"'"</span> << to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> << <span class="Constant">"'"</span> << <a href='031check_operands.cc.html#L584'>maybe_name_0f</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> << <span class="Constant">": missing "</span> << optype << <span class="Constant">" operand\n"</span> << end<span class="Delimiter">();</span> <span id="L579" class="LineNr">579 </span> <span class="Comment">// continue giving all errors for a single instruction</span> <span id="L580" class="LineNr">580 </span> <span class="Delimiter">}</span> <span id="L581" class="LineNr">581 </span> <span class="Comment">// ignore settings in any unused bits</span> @@ -645,9 +645,9 @@ if ('onhashchange' in window) { <span id="L583" class="LineNr">583 </span> <span id="L584" class="LineNr">584 </span>string <a href='031check_operands.cc.html#L584'>maybe_name_0f</a><span class="Delimiter">(</span><span class="Normal">const</span> word& op<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L585" class="LineNr">585 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_hex_byte<span class="Delimiter">(</span>op<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">""</span><span class="Delimiter">;</span> -<span id="L586" class="LineNr">586 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L379'>Name_0f</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">""</span><span class="Delimiter">;</span> +<span id="L586" class="LineNr">586 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L381'>Name_0f</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">""</span><span class="Delimiter">;</span> <span id="L587" class="LineNr">587 </span> <span class="Comment">// strip stuff in parens from the name</span> -<span id="L588" class="LineNr">588 </span> <span class="Normal">const</span> string& s = get<span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L379'>Name_0f</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">);</span> +<span id="L588" class="LineNr">588 </span> <span class="Normal">const</span> string& s = get<span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L381'>Name_0f</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">);</span> <span id="L589" class="LineNr">589 </span> <span class="Identifier">return</span> <span class="Constant">" ("</span>+s<span class="Delimiter">.</span>substr<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> s<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">" ("</span><span class="Delimiter">))</span>+<span class="Constant">')'</span><span class="Delimiter">;</span> <span id="L590" class="LineNr">590 </span><span class="Delimiter">}</span> <span id="L591" class="LineNr">591 </span> |