Mercurial > projects > ddmd
diff dmd/Type.d @ 53:a8b50ff7f201
ForeachStatement.syntaxCopy
SliceExp.syntaxCopy
AnonDeclaration.syntaxCopy
SwitchStatement.syntaxCopy
CaseStatement.syntaxCopy
BreakStatement.syntaxCopy
ThrowStatement.syntaxCopy
NewExp.syntaxCopy
DefaultStatement.syntaxCopy
AssertExp.syntaxCopy
ClassDeclaration.syntaxCopy
TypeTypedef.constConv
eval_builtin
ComplexExp.isConst
DVCondition.syntaxCopy
OrExp.getIntRange
AndExp.getIntRange
getMask
IntegerExp.getIntRange
Type.sizemask
CastExp.getIntRange
Expression.getIntRange
author | korDen |
---|---|
date | Sat, 21 Aug 2010 12:15:47 +0400 |
parents | b7d29f613539 |
children | ef02e2e203c2 |
line wrap: on
line diff
--- a/dmd/Type.d Sat Aug 21 11:50:50 2010 +0400 +++ b/dmd/Type.d Sat Aug 21 12:15:47 2010 +0400 @@ -2182,9 +2182,32 @@ return null; } + /**************************************** + * Return the mask that an integral type will + * fit into. + */ ulong sizemask() { - assert(false); + ulong m; + + switch (toBasetype().ty) + { + case Tbool: m = 1; break; + case Tchar: + case Tint8: + case Tuns8: m = 0xFF; break; + case Twchar: + case Tint16: + case Tuns16: m = 0xFFFFUL; break; + case Tdchar: + case Tint32: + case Tuns32: m = 0xFFFFFFFFUL; break; + case Tint64: + case Tuns64: m = 0xFFFFFFFFFFFFFFFFUL; break; + default: + assert(0); + } + return m; } static void error(T...)(Loc loc, string format, T t)