diff --git a/Upsilon/BaseTypes/ScriptIterator.cs b/Upsilon/BaseTypes/ScriptIterator.cs index 3df5c82..df100cb 100644 --- a/Upsilon/BaseTypes/ScriptIterator.cs +++ b/Upsilon/BaseTypes/ScriptIterator.cs @@ -16,7 +16,7 @@ namespace Upsilon.BaseTypes public override object ToCSharpObject() { - return GetEnumerator(); + return GetScriptEnumerator(); } public override System.Type GetCSharpType() @@ -29,7 +29,7 @@ namespace Upsilon.BaseTypes throw new InvalidOperationException(); } - public abstract IEnumerator GetEnumerator(); + public abstract IEnumerator GetScriptEnumerator(); } @@ -39,9 +39,9 @@ namespace Upsilon.BaseTypes { } - public override IEnumerator GetEnumerator() + public override IEnumerator GetScriptEnumerator() { - using(var baseEnumerator = BaseIterator.GetEnumerator()) + using(var baseEnumerator = BaseIterator.GetScriptEnumerator()) { while (baseEnumerator.MoveNext()) { @@ -63,13 +63,14 @@ namespace Upsilon.BaseTypes { } - public override IEnumerator GetEnumerator() + + public override IEnumerator GetScriptEnumerator() { - using(var baseEnumerator = BaseIterator.GetEnumerator()) + using(var baseEnumerator = BaseIterator.GetScriptEnumerator()) { while (baseEnumerator.MoveNext()) { - var key = baseEnumerator.Current; + var key = baseEnumerator.Current; var value = BaseIterator.GetValueFromIndex(key); if (value.Type != Type.Nil) yield return new SimpleScriptTable(new List(){key, value}); diff --git a/Upsilon/BaseTypes/ScriptTable/GenericKeyedScriptTable.cs b/Upsilon/BaseTypes/ScriptTable/GenericKeyedScriptTable.cs index c6b26d2..a3263a2 100644 --- a/Upsilon/BaseTypes/ScriptTable/GenericKeyedScriptTable.cs +++ b/Upsilon/BaseTypes/ScriptTable/GenericKeyedScriptTable.cs @@ -21,5 +21,12 @@ namespace Upsilon.BaseTypes.ScriptTable return EvaluationScope.Variables.ToDictionary(x => x.Key, x => x.Value.ToCSharpObject()); } + public override IEnumerator GetScriptEnumerator() + { + foreach (var variable in EvaluationScope.Variables) + { + yield return variable.Key.ToScriptType(); + } + } } } \ No newline at end of file diff --git a/Upsilon/BaseTypes/ScriptTable/NumeratedScriptTable.cs b/Upsilon/BaseTypes/ScriptTable/NumeratedScriptTable.cs index ffdb4e8..def1a8a 100644 --- a/Upsilon/BaseTypes/ScriptTable/NumeratedScriptTable.cs +++ b/Upsilon/BaseTypes/ScriptTable/NumeratedScriptTable.cs @@ -11,19 +11,19 @@ namespace Upsilon.BaseTypes.ScriptTable { } - public new IEnumerator GetEnumerator() - { - return Enumerator(); - } - - protected override IEnumerator Enumerator() + public override IEnumerator GetScriptEnumerator() { foreach (var variable in EvaluationScope.Variables) { - yield return variable.Value; + yield return variable.Key.ToScriptType(); } } + IEnumerator IEnumerable.GetEnumerator() + { + return GetScriptEnumerator(); + } + public override System.Type GetCSharpType() { return typeof(IEnumerable); @@ -34,5 +34,9 @@ namespace Upsilon.BaseTypes.ScriptTable return EvaluationScope.Variables.Select(x => x.Value.ToCSharpObject()).ToArray(); } + public IEnumerator GetEnumerator() + { + return GetScriptEnumerator(); + } } } \ No newline at end of file diff --git a/Upsilon/BaseTypes/ScriptTable/ScriptTable.cs b/Upsilon/BaseTypes/ScriptTable/ScriptTable.cs index acd8cea..8246a0a 100644 --- a/Upsilon/BaseTypes/ScriptTable/ScriptTable.cs +++ b/Upsilon/BaseTypes/ScriptTable/ScriptTable.cs @@ -46,18 +46,7 @@ namespace Upsilon.BaseTypes.ScriptTable throw new Exception($"Can't find key '{index}' in table."); } - public IEnumerator GetEnumerator() - { - return Enumerator(); - } - - protected virtual IEnumerator Enumerator() - { - foreach (var variable in EvaluationScope.Variables) - { - yield return variable.Key.ToScriptType(); - } - } + public abstract IEnumerator GetScriptEnumerator(); public ScriptNumberLong Length() { diff --git a/Upsilon/BaseTypes/ScriptTypeInterfaces/IITerable.cs b/Upsilon/BaseTypes/ScriptTypeInterfaces/IITerable.cs index 715152e..09911cb 100644 --- a/Upsilon/BaseTypes/ScriptTypeInterfaces/IITerable.cs +++ b/Upsilon/BaseTypes/ScriptTypeInterfaces/IITerable.cs @@ -6,6 +6,6 @@ namespace Upsilon.BaseTypes.ScriptTypeInterfaces internal interface IIterable { ScriptType GetValueFromIndex(ScriptType index); - IEnumerator GetEnumerator(); + IEnumerator GetScriptEnumerator(); } } \ No newline at end of file diff --git a/Upsilon/BaseTypes/UserData/ListUserData.cs b/Upsilon/BaseTypes/UserData/ListUserData.cs index c063bcf..b6cd1d0 100644 --- a/Upsilon/BaseTypes/UserData/ListUserData.cs +++ b/Upsilon/BaseTypes/UserData/ListUserData.cs @@ -94,7 +94,7 @@ namespace Upsilon.BaseTypes.UserData return List[(int) num.Value].ToScriptType(); } - public IEnumerator GetEnumerator() + public IEnumerator GetScriptEnumerator() { for (int i = 0; i < List.Count; i++) { diff --git a/Upsilon/Evaluator/Evaluator.cs b/Upsilon/Evaluator/Evaluator.cs index 020e384..87bcf55 100644 --- a/Upsilon/Evaluator/Evaluator.cs +++ b/Upsilon/Evaluator/Evaluator.cs @@ -684,7 +684,7 @@ namespace Upsilon.Evaluator 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()) {