internal static object?CallMethod <TScope, TRootScope>(ILanguageDefinition languageDefinition, ScopeStack <TScope, TRootScope> scopeStack, object?left, object?[] args) where TScope : class, IScope where TRootScope : class, TScope { switch (left) { case FunctionMethodGroup methodGroup: return(methodGroup.FunctionDefinition.Invoke(languageDefinition, args)); case UserDefinedFunction userDefinedFunction: return(userDefinedFunction.Invoke(languageDefinition, args)); case PipelineMethodGroup pipelineGroup: return(pipelineGroup.FunctionDefinition.Invoke(languageDefinition, pipelineGroup.ReferredObject, args)); case ScopedFunctionMethodGroup scopedMethodGroup: return(scopedMethodGroup.FunctionDefinition.Invoke(languageDefinition, scopeStack.Current, args)); default: var callable = ReflectionHelpers.GetCallable(left); if (callable != null) { return(callable.Invoke(left, new object[] { args })); } throw new NotImplementedException(); }
internal DynamicTransformer <TScope, TRootScope> CreateDynamicTransformer <TScope, TRootScope>(ScopeStack <TScope, TRootScope> scopeStack) where TScope : DynamicScope where TRootScope : TScope { return(new DynamicTransformer <TScope, TRootScope>(scopeStack, LanguageDefinition)); }