An easy to use Unity 3D library for creating illustrated Interactive Fiction games and more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
3.6 KiB

using System;
using System.IO;
using MoonSharp.Interpreter.Loaders;
namespace MoonSharp.Interpreter
{
/// <summary>
/// This class contains options to customize behaviour of Script objects.
/// </summary>
public class ScriptOptions
{
internal ScriptOptions()
{
}
internal ScriptOptions(ScriptOptions defaults)
{
this.DebugInput = defaults.DebugInput;
this.DebugPrint = defaults.DebugPrint;
this.UseLuaErrorLocations = defaults.UseLuaErrorLocations;
this.Stdin = defaults.Stdin;
this.Stdout = defaults.Stdout;
this.Stderr = defaults.Stderr;
this.TailCallOptimizationThreshold = defaults.TailCallOptimizationThreshold;
this.ScriptLoader = defaults.ScriptLoader;
this.CheckThreadAccess = defaults.CheckThreadAccess;
}
/// <summary>
/// Gets or sets the current script-loader.
/// </summary>
public IScriptLoader ScriptLoader { get; set; }
/// <summary>
/// Gets or sets the debug print handler
/// </summary>
public Action<string> DebugPrint { get; set; }
/// <summary>
/// Gets or sets the debug input handler (takes a prompt as an input, for interactive interpreters, like debug.debug).
/// </summary>
public Func<string, string> DebugInput { get; set; }
/// <summary>
/// Gets or sets a value indicating whether error messages will use Lua error locations instead of MoonSharp
/// improved ones. Use this for compatibility with legacy Lua code which parses error messages.
/// </summary>
public bool UseLuaErrorLocations { get; set; }
/// <summary>
/// Gets or sets a value which dictates the behaviour of the colon (':') operator in callbacks to CLR code.
/// </summary>
public ColonOperatorBehaviour ColonOperatorClrCallbackBehaviour { get; set; }
/// <summary>
/// Gets or sets the stream used as stdin. If null, a default stream is used.
/// </summary>
public Stream Stdin { get; set; }
/// <summary>
/// Gets or sets the stream used as stdout. If null, a default stream is used.
/// </summary>
public Stream Stdout { get; set; }
/// <summary>
/// Gets or sets the stream used as stderr. If null, a default stream is used.
/// </summary>
public Stream Stderr { get; set; }
/// <summary>
/// Gets or sets the stack depth threshold at which MoonSharp starts doing
/// tail call optimizations.
/// TCOs can provide the little benefit of avoiding stack overflows in corner case
/// scenarios, at the expense of losing debug information and error stack traces
/// in all other, more common scenarios. MoonSharp choice is to start performing
/// TCOs only after a certain threshold of stack usage is reached - by default
/// half the current stack depth (128K entries), thus 64K entries, on either
/// the internal stacks.
/// Set this to int.MaxValue to disable TCOs entirely, or to 0 to always have
/// TCOs enabled.
/// </summary>
public int TailCallOptimizationThreshold { get; set; }
/// <summary>
/// Gets or sets a value indicating whether the thread check is enabled.
/// A "lazy" thread check is performed everytime execution is entered to ensure that no two threads
/// calls MoonSharp execution concurrently. However 1) the check is performed best effort (thus, it might
/// not detect all issues) and 2) it might trigger in very odd legal situations (like, switching threads
/// inside a CLR-callback without actually having concurrency.
///
/// Disable this option if the thread check is giving problems in your scenario, but please check that
/// you are not calling MoonSharp execution concurrently as it is not supported.
/// </summary>
public bool CheckThreadAccess { get; set; }
}
}