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)