Reworked script enumerator to not be overriden by generic enumerator
This commit is contained in:
parent
50f06f389a
commit
ff9eac888f
|
@ -16,7 +16,7 @@ namespace Upsilon.BaseTypes
|
||||||
|
|
||||||
public override object ToCSharpObject()
|
public override object ToCSharpObject()
|
||||||
{
|
{
|
||||||
return GetEnumerator();
|
return GetScriptEnumerator();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override System.Type GetCSharpType()
|
public override System.Type GetCSharpType()
|
||||||
|
@ -29,7 +29,7 @@ namespace Upsilon.BaseTypes
|
||||||
throw new InvalidOperationException();
|
throw new InvalidOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract IEnumerator<ScriptType> GetEnumerator();
|
public abstract IEnumerator<ScriptType> GetScriptEnumerator();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,9 +39,9 @@ namespace Upsilon.BaseTypes
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IEnumerator<ScriptType> GetEnumerator()
|
public override IEnumerator<ScriptType> GetScriptEnumerator()
|
||||||
{
|
{
|
||||||
using(var baseEnumerator = BaseIterator.GetEnumerator())
|
using(var baseEnumerator = BaseIterator.GetScriptEnumerator())
|
||||||
{
|
{
|
||||||
while (baseEnumerator.MoveNext())
|
while (baseEnumerator.MoveNext())
|
||||||
{
|
{
|
||||||
|
@ -63,13 +63,14 @@ namespace Upsilon.BaseTypes
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IEnumerator<ScriptType> GetEnumerator()
|
|
||||||
|
public override IEnumerator<ScriptType> GetScriptEnumerator()
|
||||||
{
|
{
|
||||||
using(var baseEnumerator = BaseIterator.GetEnumerator())
|
using(var baseEnumerator = BaseIterator.GetScriptEnumerator())
|
||||||
{
|
{
|
||||||
while (baseEnumerator.MoveNext())
|
while (baseEnumerator.MoveNext())
|
||||||
{
|
{
|
||||||
var key = baseEnumerator.Current;
|
var key = baseEnumerator.Current;
|
||||||
var value = BaseIterator.GetValueFromIndex(key);
|
var value = BaseIterator.GetValueFromIndex(key);
|
||||||
if (value.Type != Type.Nil)
|
if (value.Type != Type.Nil)
|
||||||
yield return new SimpleScriptTable(new List<ScriptType>(){key, value});
|
yield return new SimpleScriptTable(new List<ScriptType>(){key, value});
|
||||||
|
|
|
@ -21,5 +21,12 @@ namespace Upsilon.BaseTypes.ScriptTable
|
||||||
return EvaluationScope.Variables.ToDictionary(x => x.Key, x => x.Value.ToCSharpObject());
|
return EvaluationScope.Variables.ToDictionary(x => x.Key, x => x.Value.ToCSharpObject());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override IEnumerator<ScriptType> GetScriptEnumerator()
|
||||||
|
{
|
||||||
|
foreach (var variable in EvaluationScope.Variables)
|
||||||
|
{
|
||||||
|
yield return variable.Key.ToScriptType();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -11,19 +11,19 @@ namespace Upsilon.BaseTypes.ScriptTable
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public new IEnumerator GetEnumerator()
|
public override IEnumerator<ScriptType> GetScriptEnumerator()
|
||||||
{
|
|
||||||
return Enumerator();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override IEnumerator<ScriptType> Enumerator()
|
|
||||||
{
|
{
|
||||||
foreach (var variable in EvaluationScope.Variables)
|
foreach (var variable in EvaluationScope.Variables)
|
||||||
{
|
{
|
||||||
yield return variable.Value;
|
yield return variable.Key.ToScriptType();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IEnumerator<ScriptType> IEnumerable<ScriptType>.GetEnumerator()
|
||||||
|
{
|
||||||
|
return GetScriptEnumerator();
|
||||||
|
}
|
||||||
|
|
||||||
public override System.Type GetCSharpType()
|
public override System.Type GetCSharpType()
|
||||||
{
|
{
|
||||||
return typeof(IEnumerable<object>);
|
return typeof(IEnumerable<object>);
|
||||||
|
@ -34,5 +34,9 @@ namespace Upsilon.BaseTypes.ScriptTable
|
||||||
return EvaluationScope.Variables.Select(x => x.Value.ToCSharpObject()).ToArray();
|
return EvaluationScope.Variables.Select(x => x.Value.ToCSharpObject()).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IEnumerator GetEnumerator()
|
||||||
|
{
|
||||||
|
return GetScriptEnumerator();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -46,18 +46,7 @@ namespace Upsilon.BaseTypes.ScriptTable
|
||||||
throw new Exception($"Can't find key '{index}' in table.");
|
throw new Exception($"Can't find key '{index}' in table.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerator<ScriptType> GetEnumerator()
|
public abstract IEnumerator<ScriptType> GetScriptEnumerator();
|
||||||
{
|
|
||||||
return Enumerator();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual IEnumerator<ScriptType> Enumerator()
|
|
||||||
{
|
|
||||||
foreach (var variable in EvaluationScope.Variables)
|
|
||||||
{
|
|
||||||
yield return variable.Key.ToScriptType();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ScriptNumberLong Length()
|
public ScriptNumberLong Length()
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,6 +6,6 @@ namespace Upsilon.BaseTypes.ScriptTypeInterfaces
|
||||||
internal interface IIterable
|
internal interface IIterable
|
||||||
{
|
{
|
||||||
ScriptType GetValueFromIndex(ScriptType index);
|
ScriptType GetValueFromIndex(ScriptType index);
|
||||||
IEnumerator<ScriptType> GetEnumerator();
|
IEnumerator<ScriptType> GetScriptEnumerator();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -94,7 +94,7 @@ namespace Upsilon.BaseTypes.UserData
|
||||||
return List[(int) num.Value].ToScriptType();
|
return List[(int) num.Value].ToScriptType();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerator<ScriptType> GetEnumerator()
|
public IEnumerator<ScriptType> GetScriptEnumerator()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < List.Count; i++)
|
for (int i = 0; i < List.Count; i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -684,7 +684,7 @@ namespace Upsilon.Evaluator
|
||||||
throw new Exception($"Can't iterate over object with type '{enumeratorObject.Type}'");
|
throw new Exception($"Can't iterate over object with type '{enumeratorObject.Type}'");
|
||||||
}
|
}
|
||||||
|
|
||||||
using (var enumerator = iterable.GetEnumerator())
|
using (var enumerator = iterable.GetScriptEnumerator())
|
||||||
{
|
{
|
||||||
while (enumerator.MoveNext())
|
while (enumerator.MoveNext())
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue