/// <summary> /// Returns a <see cref="ClassInterpreter"/> from a class name /// </summary> /// <param name="className">The class name</param> /// <returns>Returns the class interpreter</returns> private ClassInterpreter GetProjectClassReference(string className) { ClassInterpreter classReference = null; var program = ParentInterpreter.ParentProgramInterpreter; var i = 0; while (i < program.Classes.Count && classReference == null) { if (program.Classes[i].ClassDeclaration.Name.ToString() == className) { classReference = program.Classes[i]; } i++; } return(classReference); }
/// <summary> /// Invoke a method in a new thread to avoid a stack overflow exception /// </summary> /// <param name="referenceClass">The class reference</param> /// <param name="argumentValues">The arguments values</param> /// <param name="callerMethod">The method from which we do the call</param> /// <param name="callStackService">The user call stack service</param> /// <returns></returns> private async Task CallMethodNewThread(ClassInterpreter referenceClass, Collection <object> argumentValues, MethodInterpreter callerMethod, CallStackService callStackService) { await ThreadPool.RunAsync(delegate { _result = referenceClass.InvokeMethod(ParentInterpreter, Expression, argumentValues, callerMethod, callStackService); }); }