On 21 September 2011 10:21, Eric Anholt <span dir="ltr">&lt;<a href="mailto:eric@anholt.net">eric@anholt.net</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Tue, 20 Sep 2011 18:28:15 -0700, Kenneth Graunke &lt;<a href="mailto:kenneth@whitecape.org">kenneth@whitecape.org</a>&gt; wrote:<br>
&gt; All this does is generate a bogus value with error type; the fact that<br>
&gt; it was in ir_call was rather arbitrary to begin with. ir_constant is an<br>
&gt; equally arbitrary place. The rationale is that a future commit will<br>
&gt; change ir_calls from rvalues to statements, and all uses of this<br>
&gt; function expect an rvalue.<br>
<br>
</div>This would make a lot more sense to me as a global<br>
&quot;get_error_rvalue(ctx)&quot; instead of a method of some arbitrary class.<br></blockquote><div><br>I guess there are two questions to be answered here:<br><br>1. What type of object should we use as a placeholder in the IR for errors?<br>
2. Where should we put the factory method that creates this object?<br><br>As to question 1, we have to choose some type, and short of creating a brand new type to represent errors (which seems wasteful and possibly bug-prone), ir_constant is as good as any.  It&#39;s certainly better than ir_call for the reasons Ken stated.<br>
<br>As to question 2, I agree that making this a static method of ir_constant seems kind of arbitrary--ideally the caller shouldn&#39;t know or care that the factory method creates an ir_constant.  But I&#39;d prefer to make it a static method of some class so that it&#39;s less likely to be stumbled upon by someone who doesn&#39;t need it.  How about making it a static method of ir_rvalue?<br>
</div></div>