50 lines
1.2 KiB
C#
50 lines
1.2 KiB
C#
|
namespace tlang
|
||
|
{
|
||
|
public class MemberGetVariableValue : GetVariableValue
|
||
|
{
|
||
|
public Node Parent {get;set;}
|
||
|
public MemberGetVariableValue(Node parent,string text) : base(text)
|
||
|
{
|
||
|
Parent = parent;
|
||
|
}
|
||
|
|
||
|
public override TObject Execute(IScopeEnvironment nodeEnv)
|
||
|
{
|
||
|
var res=Parent.Execute(nodeEnv);
|
||
|
|
||
|
var dict = res as TDictionary;
|
||
|
var integer = res as TNumber;
|
||
|
var array = res as TArray;
|
||
|
if(array != null)
|
||
|
{
|
||
|
if(Name == "length" || Name == "count")
|
||
|
{
|
||
|
return new TNumber(array.Items.Count);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
if(dict != null)
|
||
|
{
|
||
|
if(dict.MemberExists($"get{Name}"))
|
||
|
{
|
||
|
var mbm= dict[$"get{Name}"] as ICallable;
|
||
|
if(mbm != null)
|
||
|
return mbm.Call();
|
||
|
}
|
||
|
|
||
|
if(dict.MemberExists(Name))
|
||
|
{
|
||
|
return dict[Name];
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
if(integer != null)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
return new TUninit();
|
||
|
}
|
||
|
}
|
||
|
}
|