Better binding for index expressions
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
using Upsilon.BaseTypes.Number;
|
||||
using Upsilon.BaseTypes.ScriptTypeInterfaces;
|
||||
@@ -17,7 +18,27 @@ namespace Upsilon.BaseTypes.UserData
|
||||
public DictionaryUserData(IDictionary dictionary)
|
||||
{
|
||||
Dictionary = dictionary;
|
||||
BoundTypeName = BoundTypeHandler.GetTypeName(dictionary.GetType());
|
||||
var type = dictionary.GetType();
|
||||
var generics = type.GetGenericArguments();
|
||||
if (generics.Length == 2)
|
||||
{
|
||||
var keyType = generics[0];
|
||||
var valueType = generics[1];
|
||||
var boundKeyType = BoundTypeHandler.GetTypeName(keyType);
|
||||
var boundValueType = BoundTypeHandler.GetTypeName(valueType);
|
||||
var boundKey = boundKeyType == null
|
||||
? new UndefinedUserDataTypeContainer(keyType)
|
||||
: new TypeContainer(boundKeyType);
|
||||
var boundValue = boundValueType == null
|
||||
? new UndefinedUserDataTypeContainer(valueType)
|
||||
: new TypeContainer(boundValueType);
|
||||
Type = new CompositeTypeContainer(new[] {boundKey, boundValue}.ToImmutableArray());
|
||||
}
|
||||
else
|
||||
{
|
||||
BoundTypeName = BoundTypeHandler.GetTypeName(type);
|
||||
Type = BoundTypeName == null ? new UndefinedUserDataTypeContainer(type) : new TypeContainer(BoundTypeName);
|
||||
}
|
||||
}
|
||||
|
||||
public ScriptType Get(Diagnostics diagnostics, TextSpan span, ScriptType index, EvaluationScope scope)
|
||||
@@ -44,7 +65,7 @@ namespace Upsilon.BaseTypes.UserData
|
||||
}
|
||||
}
|
||||
|
||||
public override TypeContainer Type => new TypeContainer(BoundTypeName);
|
||||
public override TypeContainer Type { get; }
|
||||
public override object ToCSharpObject()
|
||||
{
|
||||
return Dictionary;
|
||||
|
||||
Reference in New Issue
Block a user