From 44bfc90fe302b671d31d660d549ae72abd3fd056 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Mon, 21 Jan 2019 13:37:51 +0100 Subject: [PATCH] Better handling of getting composite script types --- Upsilon/BaseTypes/TypeConversion.cs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Upsilon/BaseTypes/TypeConversion.cs b/Upsilon/BaseTypes/TypeConversion.cs index 0956fe4..f480fcb 100644 --- a/Upsilon/BaseTypes/TypeConversion.cs +++ b/Upsilon/BaseTypes/TypeConversion.cs @@ -1,5 +1,7 @@ using System; using System.Collections; +using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; using System.Reflection; using Upsilon.BaseTypes.Number; @@ -140,6 +142,31 @@ namespace Upsilon.BaseTypes return Type.Nil; if (t == typeof(SimpleScriptTable)) return Type.Table; + if (t.IsArray) + { + var elementType = t.GetElementType(); + return new CompositeTypeContainer() + { + Types = new TypeContainer[]{Type.Number, GetScriptType(elementType)}.ToImmutableArray() + }; + } + if (typeof(IList).IsAssignableFrom(t)) + { + var generic = t.GetGenericArguments()[0]; + return new CompositeTypeContainer() + { + Types = new TypeContainer[]{Type.Number, GetScriptType(generic)}.ToImmutableArray() + }; + } + if (typeof(IDictionary).IsAssignableFrom(t)) + { + var key = t.GetGenericArguments()[0]; + var value = t.GetGenericArguments()[1]; + return new CompositeTypeContainer() + { + Types = new[]{GetScriptType(key), GetScriptType(value)}.ToImmutableArray() + }; + } if (typeof(IEnumerable).IsAssignableFrom(t)) return Type.Table; if (typeof(IIndexable).IsAssignableFrom(t))