Better error handling of getting userdata members

This commit is contained in:
Deukhoofd 2018-11-21 14:11:52 +01:00
parent 8dd2be8c67
commit 1d24be85d6
No known key found for this signature in database
GPG Key ID: B4C087AC81641654
2 changed files with 10 additions and 9 deletions

View File

@ -27,10 +27,10 @@ namespace Upsilon.BaseTypes.UserData
public LuaType Get(Diagnostics diagnostics, TextSpan span, string s, EvaluationScope scope)
{
var (type, failed) = _typeInfo.Get(Value, s);
var (type, failed, error) = _typeInfo.Get(Value, s);
if (failed)
{
diagnostics.LogError($"Cannot find member '{s}' on type '{Value.GetType()}'", span);
diagnostics.LogError(error, span);
}
return type;
}

View File

@ -33,27 +33,28 @@ namespace Upsilon.BaseTypes.UserData
private Dictionary<string, UserDataMethod> Methods { get; }
private UserDataTypeOperators OperatorHandler { get; }
public (LuaType Type, bool Failed) Get(object value, string member)
public (LuaType Type, bool Failed, string Error) Get(object value, string member)
{
if (value.GetType() != Type)
return (null, true);
return (null, true, "Invalid Type");
member = member.ToLowerInvariant();
if (Variables.TryGetValue(member, out var info))
{
return (info.GetValue(value).ToLuaType(), false);
return (info.GetValue(value).ToLuaType(), false, null);
}
if (Properties.TryGetValue(member, out var property))
{
return (property.GetValue(value).ToLuaType(), false);
return (property.GetValue(value).ToLuaType(), false, null);
}
if (Methods.TryGetValue(member, out var method))
{
return (new LuaMethodInfoFunction(method, value), false);
}
return (null, true);
return (new LuaMethodInfoFunction(method, value), false, null);
}
public (bool failed, string error) Set(object value, string member, LuaType newValue)
return (null, true, $"Can't find public member '{member}' on type '{Type}'.");
}
public (bool Failed, string Error) Set(object value, string member, LuaType newValue)
{
member = member.ToLowerInvariant();
if (value.GetType() != Type)