On Sat, Jun 19, 2010 at 5:27 PM, Gabriel Dos Reis <span dir="ltr"><<a href="mailto:gdr@integrable-solutions.net">gdr@integrable-solutions.net</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

On Sat, Jun 19, 2010 at 10:21 AM, Juan Jose Garcia-Ripoll<br>
<div class="im"><<a href="mailto:juanjose.garciaripoll@googlemail.com">juanjose.garciaripoll@googlemail.com</a>> wrote:<br>
<br>
>><br>
</div><div class="im">>> The compiler can infer that FOO inside the branch must have type STRING.<br>
><br>
> Doing this is not as easy as it sounds. Inferring types from conditional<br>
> expressions and branches is not only difficult, but it may also be<br>
> impossible when predicates are combined.<br>
<br>
</div>What about:<br>
  (1) do the inference per basic blocks<br>
  (2) if combining types from two branches is impossible to check<br>
       issue a runtime check (based on compilation policy, debug, speed, etc.)<br>
       and issue a note<br></blockquote></div><br>This might work if we represented the code as a graph, but from my previous email you will understand that this is not the case. An IF statement sees the condition as an expression, with no type information about other expressions or variables being propagated.<br>

<br>Anyway, I think I will settle for a simple style warning. The disadvantage is that this will mask real problems, such as real type errors, but given Common Lisp's semantics and the code out there, nothing else seems sensible.<br>

<br>Juanjo<br><br>-- <br>Instituto de Física Fundamental, CSIC<br>c/ Serrano, 113b, Madrid 28006 (Spain) <br><a href="http://tream.dreamhosters.com">http://tream.dreamhosters.com</a><br>