<div class="gmail_quote">2012/3/23 Rafael Espíndola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com">rafael.espindola@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">> You should use IsFixed, as you are doing. The TypeSourceInfo* / Type*<br>
> distinction only exists to capture whether the type was literally written in<br>
> the source code (a scoped enumeration with no specified underlying type has<br>
> an implicit fixed underlying type of 'int').<br>
><br>
> Have you considered s/isBooleanUnderlyingType/hasBooleanRepresentation/ to<br>
> match how you've generalized it?<br>
><br>
> Please also add some test coverage for scoped enumerations.<br>
<br>
</div>Fixed the above comments.</blockquote><div><br></div><div>Thanks.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
> Finally, this patch does the wrong thing for an enum which is empty, or<br>
> whose only value is 0. Such an enum has a range of representable values of<br>
> [0, 1], not [0, 0].<br>
<br>
</div>Has this been changed recently? I am looking at paragraph 7 of<br>
[dcl.enum] in n3337.  I am getting<br>
<br>
* emin = emax = 0<br>
* K = 1<br>
* max(|emin| - K, |emax|) = max (-1, 0) = 0<br>
* M = 0<br>
* bmax = 2^M - 1 = 1 - 1 = 0<br></blockquote><div><br></div><div>Right you are, I was thinking of the smallest corresponding bitfield size, which is max(M, 1).</div><div><br></div><div><div>+  if (const EnumType *ET = dyn_cast<EnumType>(Ty))</div>
</div><div><br></div><div>+  const EnumType *ET = dyn_cast<EnumType>(Ty.getDesugaredType(getContext()));<br></div><div><br></div><div>Please use Ty->getAs<EnumType>() in both of these cases.</div><div><br></div>
<div><div>+    // The range is open on the right side.</div><div>+    uint64_t End = Max + 1;</div></div><div><br></div><div>All of your non-bool Max computations end with '- 1'. It looks like the code would be simpler if it computed End directly.</div>
<div><br></div><div>Thanks!</div><div>Richard</div></div>