From 5dfe00e95051577fac0af9ab68ec7cd3af2f9e74 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 12 Nov 2010 23:07:13 +0100 Subject: [PATCH] Add CSharpResolver.ResolveSizeOf(). --- .../CSharp/Resolver/CSharpResolver.cs | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/ICSharpCode.NRefactory/CSharp/Resolver/CSharpResolver.cs b/ICSharpCode.NRefactory/CSharp/Resolver/CSharpResolver.cs index f9605dee32..1dc532bd27 100644 --- a/ICSharpCode.NRefactory/CSharp/Resolver/CSharpResolver.cs +++ b/ICSharpCode.NRefactory/CSharp/Resolver/CSharpResolver.cs @@ -1617,5 +1617,41 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver } } #endregion + + #region ResolveSizeOf + /// + /// Resolves 'sizeof(type)'. + /// + public ResolveResult ResolveSizeOf(IType type) + { + IType int32 = TypeCode.Int32.ToTypeReference().Resolve(context); + int size; + switch (ReflectionHelper.GetTypeCode(type)) { + case TypeCode.Boolean: + case TypeCode.SByte: + case TypeCode.Byte: + size = 1; + break; + case TypeCode.Char: + case TypeCode.Int16: + case TypeCode.UInt16: + size = 2; + break; + case TypeCode.Int32: + case TypeCode.UInt32: + case TypeCode.Single: + size = 4; + break; + case TypeCode.Int64: + case TypeCode.UInt64: + case TypeCode.Double: + size = 8; + break; + default: + return new ResolveResult(int32); + } + return new ConstantResolveResult(int32, size); + } + #endregion } }