Foxoft.Ci.CiResolver.ResolveConstInitializer C# (CSharp) Method

ResolveConstInitializer() private method

private ResolveConstInitializer ( CiType &type, object value ) : object
type CiType
value object
return object
        object ResolveConstInitializer(ref CiType type, object value)
        {
            if (type is CiArrayType) {
            object[] array = value as object[];
            if (array == null)
                return value;
            CiType elementType = ((CiArrayType) type).ElementType;
            if (type is CiArrayStorageType) {
                int expected = ((CiArrayStorageType) type).Length;
                if (array.Length != expected)
                    throw new ResolveException("Expected {0} array elements, got {1}", expected, array.Length);
            }
            else {
                type = new CiArrayStorageType { ElementType = elementType, Length = array.Length };
            }
            Array dest = Array.CreateInstance(elementType.DotNetType, array.Length);
            for (int i = 0; i < array.Length; i++)
                dest.SetValue(ResolveConstInitializer(ref elementType, array[i]), i);
            return dest;
            }
            if (value is CiExpr)
            return ResolveConstExpr((CiExpr) value, type);
            return value;
        }