/// <summary> /// Evaluates the provided expression or list of statements, returning an <see cref="EvalResult{T}"/> with <see /// cref="EvalResult{T}.Value"/> set to the evaluated value. /// /// Output printed to the standard output stream will be available in <see cref="EvalResult{T}.Output"/>. /// /// This method will propagate all errors apart from <see cref="ScanError"/> to the caller. Scan errors /// will be available in the returned <see cref="EvalResult{T}.Errors"/> property. /// /// If any warnings are emitted, they will be available in the returned <see /// cref="EvalResult{T}.CompilerWarnings"/> property. "Warnings as errors" will be disabled for all warnings. /// </summary> /// <param name="source">A valid Perlang program.</param> /// <returns>An <see cref="EvalResult{T}"/> with the <see cref="EvalResult{T}.Value"/> property set to the /// result of the provided expression. If not provided a valid expression, <see cref="EvalResult{T}.Value"/> /// will be set to `null`.</returns> internal static EvalResult <ScanError> EvalWithScanErrorCatch(string source) { var result = new EvalResult <ScanError>(); var interpreter = new PerlangInterpreter(AssertFailRuntimeErrorHandler, result.OutputHandler); result.Value = interpreter.Eval( source, result.ErrorHandler, AssertFailParseErrorHandler, AssertFailNameResolutionErrorHandler, AssertFailValidationErrorHandler, AssertFailValidationErrorHandler, result.WarningHandler ); return(result); }
/// <summary> /// Evaluates the provided expression or list of statements, returning an <see cref="EvalResult{T}"/> with <see /// cref="EvalResult{T}.Value"/> set to the evaluated value. /// /// Output printed to the standard output stream will be available in <see cref="EvalResult{T}.Output"/>. /// /// This method will propagate all kinds of errors to the caller, throwing an exception on the first error /// encountered. If any warnings are emitted, they will be available in the returned <see /// cref="EvalResult{T}.CompilerWarnings"/> property. This can be seen as "warnings as errors" is disabled /// for all warnings; the caller need to explicitly check for warnings and fail if appropriate. /// </summary> /// <param name="source">A valid Perlang program.</param> /// <param name="arguments">Zero or more arguments to be passed to the program.</param> /// <returns>An <see cref="EvalResult{T}"/> with the <see cref="EvalResult{T}.Value"/> property set to the /// result of the provided expression. If not provided a valid expression, <see cref="EvalResult{T}.Value"/> /// will be set to `null`.</returns> internal static EvalResult <Exception> EvalWithResult(string source, params string[] arguments) { var result = new EvalResult <Exception>(); var interpreter = new PerlangInterpreter(AssertFailRuntimeErrorHandler, result.OutputHandler, null, arguments); result.Value = interpreter.Eval( source, AssertFailScanErrorHandler, AssertFailParseErrorHandler, AssertFailNameResolutionErrorHandler, AssertFailValidationErrorHandler, AssertFailValidationErrorHandler, result.WarningHandler ); return(result); }