diff --git a/Upsilon/BaseTypes/ScriptFunction/ScriptFunction.cs b/Upsilon/BaseTypes/ScriptFunction/ScriptFunction.cs new file mode 100644 index 0000000..970d13a --- /dev/null +++ b/Upsilon/BaseTypes/ScriptFunction/ScriptFunction.cs @@ -0,0 +1,18 @@ +namespace Upsilon.BaseTypes.ScriptFunction +{ + internal abstract class ScriptFunction : ScriptType + { + public override Type Type => Type.Function; + public override object ToCSharpObject() + { + return this; + } + + public override System.Type GetCSharpType() + { + return null; + } + + public abstract ScriptType Run(Diagnostics diagnostics, ScriptType[] variables); + } +} \ No newline at end of file diff --git a/Upsilon/BaseTypes/ScriptFunction.cs b/Upsilon/BaseTypes/ScriptFunction/ScriptMethodInfoFunction.cs similarity index 50% rename from Upsilon/BaseTypes/ScriptFunction.cs rename to Upsilon/BaseTypes/ScriptFunction/ScriptMethodInfoFunction.cs index b74d1f4..a47bab7 100644 --- a/Upsilon/BaseTypes/ScriptFunction.cs +++ b/Upsilon/BaseTypes/ScriptFunction/ScriptMethodInfoFunction.cs @@ -1,71 +1,24 @@ using System; -using System.Collections.Immutable; using System.Linq; using System.Reflection; -using Upsilon.BaseTypes.ScriptTypeInterfaces; using Upsilon.BaseTypes.UserData; -using Upsilon.Binder; -using Upsilon.Evaluator; -namespace Upsilon.BaseTypes +namespace Upsilon.BaseTypes.ScriptFunction { - internal abstract class ScriptFunction : ScriptType - { - public override Type Type => Type.Function; - public override object ToCSharpObject() - { - return this; - } - - public override System.Type GetCSharpType() - { - return null; - } - - public abstract ScriptType Run(Diagnostics diagnostics, ScriptType[] variables); - } - - internal class ScriptRuntimeFunction : ScriptFunction, IScopeOwner - { - public BoundBlockStatement Block { get; } - public ImmutableArray Parameters { get; } - public EvaluationScope EvaluationScope { get; } - - public ScriptRuntimeFunction(ImmutableArray parameters, BoundBlockStatement block, - EvaluationScope evaluationScope) - { - Parameters = parameters; - Block = block; - EvaluationScope = evaluationScope; - } - - public override ScriptType Run(Diagnostics diagnostics, ScriptType[] variables) - { - var innerEvaluator = new Evaluator.Evaluator(diagnostics, EvaluationScope); - for (var i = 0; i < Parameters.Length; i++) - { - var parameterVariable = Parameters[i]; - var parameterValue = variables[i]; - innerEvaluator.Scope.CreateLocal(parameterVariable.VariableSymbol, parameterValue); - } - return innerEvaluator.EvaluateNode(Block); - } - } - internal class ScriptMethodInfoFunction : ScriptFunction { public ScriptMethodInfoFunction(UserDataMethod method, object o, bool directTypeManipulation) { - _method = method; - _object = o; + _method = method; + _object = o; _directTypeManipulation = directTypeManipulation; - ReturnType = _method.ReturnType; + ReturnType = _method.ReturnType; } private readonly UserDataMethod _method; - private readonly object _object; - private readonly bool _directTypeManipulation; - public System.Type ReturnType { get; } + private readonly object _object; + private readonly bool _directTypeManipulation; + public System.Type ReturnType { get; } public override ScriptType Run(Diagnostics diagnostics, ScriptType[] variables) { diff --git a/Upsilon/BaseTypes/ScriptFunction/ScriptRuntimeFunction.cs b/Upsilon/BaseTypes/ScriptFunction/ScriptRuntimeFunction.cs new file mode 100644 index 0000000..7a26c5a --- /dev/null +++ b/Upsilon/BaseTypes/ScriptFunction/ScriptRuntimeFunction.cs @@ -0,0 +1,34 @@ +using System.Collections.Immutable; +using Upsilon.BaseTypes.ScriptTypeInterfaces; +using Upsilon.Binder; +using Upsilon.Evaluator; + +namespace Upsilon.BaseTypes.ScriptFunction +{ + internal class ScriptRuntimeFunction : ScriptFunction, IScopeOwner + { + public BoundBlockStatement Block { get; } + public ImmutableArray Parameters { get; } + public EvaluationScope EvaluationScope { get; } + + public ScriptRuntimeFunction(ImmutableArray parameters, BoundBlockStatement block, + EvaluationScope evaluationScope) + { + Parameters = parameters; + Block = block; + EvaluationScope = evaluationScope; + } + + public override ScriptType Run(Diagnostics diagnostics, ScriptType[] variables) + { + var innerEvaluator = new Evaluator.Evaluator(diagnostics, EvaluationScope); + for (var i = 0; i < Parameters.Length; i++) + { + var parameterVariable = Parameters[i]; + var parameterValue = variables[i]; + innerEvaluator.Scope.CreateLocal(parameterVariable.VariableSymbol, parameterValue); + } + return innerEvaluator.EvaluateNode(Block); + } + } +} \ No newline at end of file diff --git a/Upsilon/BaseTypes/TypeConversion.cs b/Upsilon/BaseTypes/TypeConversion.cs index fffd48a..a33cbb7 100644 --- a/Upsilon/BaseTypes/TypeConversion.cs +++ b/Upsilon/BaseTypes/TypeConversion.cs @@ -94,7 +94,7 @@ namespace Upsilon.BaseTypes return Type.String; if (typeof(ScriptNumber).IsAssignableFrom(t)) return Type.Number; - if (typeof(ScriptFunction).IsAssignableFrom(t)) + if (typeof(ScriptFunction.ScriptFunction).IsAssignableFrom(t)) return Type.Function; if (typeof(ScriptTable).IsAssignableFrom(t)) return Type.Table; diff --git a/Upsilon/BaseTypes/UserData/UserDataType.cs b/Upsilon/BaseTypes/UserData/UserDataType.cs index 3dc71c8..0ff22e7 100644 --- a/Upsilon/BaseTypes/UserData/UserDataType.cs +++ b/Upsilon/BaseTypes/UserData/UserDataType.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; +using Upsilon.BaseTypes.ScriptFunction; namespace Upsilon.BaseTypes.UserData { diff --git a/Upsilon/Evaluator/Evaluator.cs b/Upsilon/Evaluator/Evaluator.cs index de617d5..a129445 100644 --- a/Upsilon/Evaluator/Evaluator.cs +++ b/Upsilon/Evaluator/Evaluator.cs @@ -4,6 +4,7 @@ using System.Collections.Immutable; using System.Net.Http.Headers; using Upsilon.BaseTypes; using Upsilon.BaseTypes.Number; +using Upsilon.BaseTypes.ScriptFunction; using Upsilon.BaseTypes.ScriptTypeInterfaces; using Upsilon.BaseTypes.UserData; using Upsilon.Binder; diff --git a/Upsilon/StandardLibraries/ScriptLibrary.cs b/Upsilon/StandardLibraries/ScriptLibrary.cs index 7534687..d7de7d4 100644 --- a/Upsilon/StandardLibraries/ScriptLibrary.cs +++ b/Upsilon/StandardLibraries/ScriptLibrary.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Reflection; using Upsilon.BaseTypes; +using Upsilon.BaseTypes.ScriptFunction; using Upsilon.BaseTypes.UserData; namespace Upsilon.StandardLibraries