// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
using System;
using System.Collections;
namespace Microsoft.ClearScript
{
///
/// Represents a script engine.
///
public interface IScriptEngine : IDisposable
{
///
/// Gets the name associated with the script engine instance.
///
string Name { get; }
///
/// Gets the script engine's recommended file name extension for script files.
///
string FileNameExtension { get; }
///
/// Allows script code to access non-public resources.
///
///
/// By setting this property to a type, you declare that script code running in the current
/// script engine is to be treated as if it were part of that type's implementation. Doing
/// so does not expose any host resources to script code, but it affects which host
/// resources are importable and which members of exposed resources are accessible.
///
Type AccessContext { get; set; }
///
/// Gets or sets the default script access setting for all members of exposed objects.
///
///
/// Use , , or
/// their subclasses to override this property for individual types and members. Note that
/// this property has no effect on the method binding algorithm. If a script-based call is
/// bound to a method that is blocked by this property, it will be rejected even if an
/// overload exists that could receive the call.
///
ScriptAccess DefaultAccess { get; set; }
///
/// Enables or disables access restrictions for anonymous types.
///
///
/// Anonymous types are
/// internal
/// and therefore accessible only within the same assembly, but ClearScript 5.5.3 and
/// earlier permitted access to the properties of an object even if its type was
/// internal. Newer versions strictly enforce , but because
/// anonymous types are particularly useful for scripting, ClearScript by default continues
/// to expose their properties to external contexts. To override this behavior and enable
/// normal access restrictions for anonymous types, set this property to true.
///
bool EnforceAnonymousTypeAccess { get; set; }
///
/// Controls whether host objects provide access to the static members of their exposed types to script code.
///
bool ExposeHostObjectStaticMembers { get; set; }
///
/// Enables or disables extension method support.
///
bool DisableExtensionMethods { get; set; }
///
/// Enables or disables script code formatting.
///
///
/// When this property is set to true, the script engine may format script code
/// before executing or compiling it. This is intended to facilitate interactive debugging.
/// The formatting operation currently includes stripping leading and trailing blank lines
/// and removing global indentation.
///
bool FormatCode { get; set; }
///
/// Controls whether script code is permitted to use reflection.
///
///
/// When this property is set to true, script code running in the current script
/// engine is permitted to use reflection. This affects
/// Object.GetType(),
/// Exception.GetType(),
/// Exception.TargetSite,
/// Delegate.Method,
/// and .
/// By default, any attempt to invoke these members from script code results in an
/// exception.
///
bool AllowReflection { get; set; }
///
/// Enables or disables type restriction for field, property, and method return values.
///
///
/// When this property is set to true, script code running in the current script
/// engine has access to the runtime types of all exposed host resources, which by default
/// are restricted to their declared types. The default behavior is a general requirement
/// for correct method binding, so setting this property to true is not recommended.
///
///
bool DisableTypeRestriction { get; set; }
///
/// Enables or disables type restriction for array and list elements retrieved by index.
///
///
/// In ClearScript 5.4.4 and earlier, indexed array and list elements were exempt from type
/// restriction. ClearScript 5.4.5 introduced a breaking change to correct this, but you can
/// set this property to true to restore the exemption if you have older script code
/// that depends on it.
///
///
bool DisableListIndexTypeRestriction { get; set; }
///
/// Enables or disables null wrapping for field, property, and method return values.
///
///
/// When this property is set to true, all field, property, and method return values
/// are marshaled with full .NET type information even if they are null. Note that
/// such values will always fail equality comparison with JavaScript's
/// null,
/// VBScript's
/// Nothing,
/// and other similar values. Instead, use or
/// to perform such a comparison.
///
///
///
bool EnableNullResultWrapping { get; set; }
///
/// Enables or disables floating point narrowing.
///
///
/// When this property is set to true, no attempt is made to convert floating-point
/// values imported from the script engine to the narrowest equivalent .NET representation.
/// The default behavior is more likely to result in successful method binding in specific
/// scenarios, so setting this property to true is not recommended.
///
bool DisableFloatNarrowing { get; set; }
///
/// Enables or disables dynamic method binding.
///
///
/// When this property is set to true, the script engine bypasses the default method
/// binding algorithm and uses reflection-based method binding instead. This approach
/// abandons support for generic type inference and other features, but it avoids engaging
/// the dynamic infrastructure.
///
///
bool DisableDynamicBinding { get; set; }
///
/// Enables or disables the use of reflection-based method binding as a fallback.
///
///
///
/// When this property is set to true, the script engine attempts to use
/// reflection-based method binding when the default method binding algorithm fails. This
/// approach reduces type safety, but it may be useful for running legacy scripts that rely
/// on the specific behavior of reflection-based method binding.
///
///
/// This property has no effect when is set to
/// true.
///
///
bool UseReflectionBindFallback { get; set; }
///
/// Controls whether enumerations are converted to their underlying integral type when passed to script code.
///
///
/// When this property is set to true, the script engine converts enumerations to
/// their underlying types when passing them to script code. This conversion is lossy and
/// could break host method binding, property assignment, and other scenarios that rely on
/// enumeration type identity. It is recommended that you use this property in conjunction
/// with .
///
bool MarshalEnumAsUnderlyingType { get; set; }
///
/// Controls whether scripts can pass integral values to enumeration-typed host properties or parameters.
///
///
/// When this property is set to true, the script engine accepts integral values for
/// enumeration-typed host properties and parameters. Note that the default method binding
/// algorithm cannot support this property; it must be used in conjunction with
/// or . The
/// script engine makes no attempt to validate integral values passed from script code
/// against the defined members of the target enumeration type.
///
bool AcceptEnumAsUnderlyingType { get; set; }
///
/// Enables or disables automatic host variable tunneling for by-reference arguments to script functions and delegates.
///
///
/// When this property is set to true, the script engine replaces by-reference
/// arguments to script functions and delegates with host variables, allowing script code
/// to simulate output arguments if the script language does not support them natively.
///
///
bool EnableAutoHostVariables { get; set; }
///
/// Gets or sets the script engine's undefined import value.
///
///
/// Some script languages support one or more special non-null values that represent
/// nonexistent, missing, unknown, or undefined data. When such a value is marshaled to the
/// host, the script engine maps it to the value of this property. The default value is
/// Undefined.Value.
///
object UndefinedImportValue { get; set; }
///
/// Gets or sets the script engine's null import value.
///
///
/// Some script languages support one or more special null values that represent
/// empty or unassigned object references. When such a value is marshaled to the host, the
/// script engine maps it to the value of this property. The default value is simply
/// null.
///
object NullImportValue { get; set; }
///
/// Gets or sets the script engine's null export value.
///
///
///
/// When a null object reference is marshaled to script code, the script engine maps it to
/// the value of this property. The default value is simply null, which corresponds
/// to null or its closest equivalent in the script language. Other useful
/// possibilities include
/// Undefined.Value and
/// Nothing.Value.
///
///
/// Note that ,
/// , and
/// MarshalNullAsDispatch
/// all take precedence over this property.
///
///
object NullExportValue { get; set; }
///
/// Gets or sets the script engine's void result export value.
///
///
/// Some script languages expect every subroutine call to return a value. When script code
/// written in such a language invokes a host method that explicitly returns no value (such
/// as a C#
/// void
/// method), the script engine returns the value of this property as a dummy result. The
/// default value is VoidResult.Value.
///
object VoidResultValue { get; set; }
///
/// Gets or sets a callback that can be used to halt script execution.
///
///
/// During script execution the script engine periodically invokes this callback to
/// determine whether it should continue. If the callback returns false, the script
/// engine terminates script execution and throws an exception.
///
ContinuationCallback ContinuationCallback { get; set; }
///
/// Allows the host to access script resources dynamically.
///
///
/// The value of this property is an object that is bound to the script engine's root
/// namespace. It dynamically supports properties and methods that correspond to global
/// script objects and functions.
///
dynamic Script { get; }
///
/// Allows the host to access script resources.
///
///
/// The value of this property is an object that is bound to the script engine's root
/// namespace. It allows you to access global script resources via the
/// class interface. Doing so is likely to outperform
/// dynamic access via .
///
ScriptObject Global { get; }
///
/// Gets or sets the script engine's document settings.
///
DocumentSettings DocumentSettings { get; set; }
///
/// Gets or sets the script engine's custom attribute loader.
///
///
/// By default, all script engines use the
/// global custom attribute loader.
///
CustomAttributeLoader CustomAttributeLoader { get; set; }
///
/// Allows the host to attach arbitrary data to the script engine.
///
object HostData { get; set; }
///
/// Exposes a host object to script code.
///
/// A name for the new global script item that will represent the object.
/// The object to expose.
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
void AddHostObject(string itemName, object target);
///
/// Exposes a host object to script code with the specified options.
///
/// A name for the new global script item that will represent the object.
/// A value that selects options for the operation.
/// The object to expose.
///
///
/// Once a host object is exposed to script code, its members are accessible via the script
/// language's native syntax for member access. The following table provides details about
/// the mapping between host members and script-accessible properties and methods.
///
///
///
///
/// Member Type
/// Exposed As
/// Remarks
///
/// -
/// Constructor
/// N/A
///
/// To invoke a constructor from script code, call
/// HostFunctions.newObj(T).
///
///
/// -
/// Property/Field
/// Property
/// N/A
///
/// -
/// Method
/// Method
///
/// Overloaded host methods are merged into a single script-callable method. At
/// runtime the correct host method is selected based on the argument types.
///
///
/// -
/// Generic Method
/// Method
///
/// The ClearScript library supports dynamic C#-like type inference when invoking
/// generic methods. However, some methods require explicit type arguments. To call
/// such a method from script code, you must place the required number of
/// host type objects
/// at the beginning of the argument list. Doing so for methods that do not require
/// explicit type arguments is optional.
///
///
/// -
/// Extension Method
/// Method
///
/// Extension methods are available if the type that implements them has been
/// exposed in the current script engine.
///
///
/// -
/// Indexer
/// Property
///
/// Indexers appear as properties named "Item" that accept one or more index values
/// as arguments. In addition, objects that implement expose
/// properties with numeric names that match their valid indices. This includes
/// one-dimensional host arrays and other collections. Multidimensional host arrays
/// do not expose functional indexers; you must use
/// Array.GetValue
/// and
/// Array.SetValue
/// instead.
///
///
/// -
/// Event
/// Property
///
/// Events are exposed as read-only properties of type .
///
///
///
///
///
void AddHostObject(string itemName, HostItemFlags flags, object target);
///
/// Exposes a host object to script code with the specified type restriction.
///
/// The type whose members are to be made accessible from script code.
/// A name for the new global script item that will represent the object.
/// The object to expose.
///
///
/// This method can be used to restrict script access to the members of a particular
/// interface or base class.
///
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
///
void AddRestrictedHostObject(string itemName, T target);
///
/// Exposes a host object to script code with the specified type restriction and options.
///
/// The type whose members are to be made accessible from script code.
/// A name for the new global script item that will represent the object.
/// A value that selects options for the operation.
/// The object to expose.
///
///
/// This method can be used to restrict script access to the members of a particular
/// interface or base class.
///
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
///
void AddRestrictedHostObject(string itemName, HostItemFlags flags, T target);
///
/// Creates a COM/ActiveX object and exposes it to script code. The registered class is
/// specified by programmatic identifier (ProgID).
///
/// A name for the new global script item that will represent the object.
/// The programmatic identifier (ProgID) of the registered class to instantiate.
///
///
/// The argument can be a class identifier (CLSID) in standard
/// GUID format with braces (e.g., "{0D43FE01-F093-11CF-8940-00A0C9054228}").
///
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
///
void AddCOMObject(string itemName, string progID);
///
/// Creates a COM/ActiveX object on the specified server and exposes it to script code. The
/// registered class is specified by programmatic identifier (ProgID).
///
/// A name for the new global script item that will represent the object.
/// The programmatic identifier (ProgID) of the registered class to instantiate.
/// The name of the server on which to create the object.
///
///
/// The argument can be a class identifier (CLSID) in standard
/// GUID format with braces (e.g., "{0D43FE01-F093-11CF-8940-00A0C9054228}").
///
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
///
void AddCOMObject(string itemName, string progID, string serverName);
///
/// Creates a COM/ActiveX object and exposes it to script code with the specified options.
/// The registered class is specified by programmatic identifier (ProgID).
///
/// A name for the new global script item that will represent the object.
/// A value that selects options for the operation.
/// The programmatic identifier (ProgID) of the registered class to instantiate.
///
///
/// The argument can be a class identifier (CLSID) in standard
/// GUID format with braces (e.g., "{0D43FE01-F093-11CF-8940-00A0C9054228}").
///
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
///
void AddCOMObject(string itemName, HostItemFlags flags, string progID);
///
/// Creates a COM/ActiveX object on the specified server and exposes it to script code with
/// the specified options. The registered class is specified by programmatic identifier (ProgID).
///
/// A name for the new global script item that will represent the object.
/// A value that selects options for the operation.
/// The programmatic identifier (ProgID) of the registered class to instantiate.
/// The name of the server on which to create the object.
///
///
/// The argument can be a class identifier (CLSID) in standard
/// GUID format with braces (e.g., "{0D43FE01-F093-11CF-8940-00A0C9054228}").
///
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
///
void AddCOMObject(string itemName, HostItemFlags flags, string progID, string serverName);
///
/// Creates a COM/ActiveX object and exposes it to script code. The registered class is
/// specified by class identifier (CLSID).
///
/// A name for the new global script item that will represent the object.
/// The class identifier (CLSID) of the registered class to instantiate.
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
void AddCOMObject(string itemName, Guid clsid);
///
/// Creates a COM/ActiveX object on the specified server and exposes it to script code. The
/// registered class is specified by class identifier (CLSID).
///
/// A name for the new global script item that will represent the object.
/// The class identifier (CLSID) of the registered class to instantiate.
/// The name of the server on which to create the object.
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
void AddCOMObject(string itemName, Guid clsid, string serverName);
///
/// Creates a COM/ActiveX object and exposes it to script code with the specified options.
/// The registered class is specified by class identifier (CLSID).
///
/// A name for the new global script item that will represent the object.
/// A value that selects options for the operation.
/// The class identifier (CLSID) of the registered class to instantiate.
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
void AddCOMObject(string itemName, HostItemFlags flags, Guid clsid);
///
/// Creates a COM/ActiveX object on the specified server and exposes it to script code with
/// the specified options. The registered class is specified by class identifier (CLSID).
///
/// A name for the new global script item that will represent the object.
/// A value that selects options for the operation.
/// The class identifier (CLSID) of the registered class to instantiate.
/// The name of the server on which to create the object.
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
void AddCOMObject(string itemName, HostItemFlags flags, Guid clsid, string serverName);
///
/// Exposes a host type to script code with a default name.
///
/// The type to expose.
///
///
/// This method uses 's name for the new global script item that
/// will represent it.
///
///
/// Host types are exposed to script code in the form of objects whose properties and
/// methods are bound to the type's static members and nested types. If the type has
/// generic parameters, the corresponding object will be invocable with type arguments to
/// yield a specific type.
///
///
/// For more information about the mapping between host members and script-callable
/// properties and methods, see .
///
///
void AddHostType(Type type);
///
/// Exposes a host type to script code with a default name and the specified options.
///
/// A value that selects options for the operation.
/// The type to expose.
///
///
/// This method uses 's name for the new global script item that
/// will represent it.
///
///
/// Host types are exposed to script code in the form of objects whose properties and
/// methods are bound to the type's static members and nested types. If the type has
/// generic parameters, the corresponding object will be invocable with type arguments to
/// yield a specific type.
///
///
/// For more information about the mapping between host members and script-callable
/// properties and methods, see .
///
///
void AddHostType(HostItemFlags flags, Type type);
///
/// Exposes a host type to script code.
///
/// A name for the new global script item that will represent the type.
/// The type to expose.
///
///
/// Host types are exposed to script code in the form of objects whose properties and
/// methods are bound to the type's static members and nested types. If the type has
/// generic parameters, the corresponding object will be invocable with type arguments to
/// yield a specific type.
///
///
/// For more information about the mapping between host members and script-callable
/// properties and methods, see .
///
///
void AddHostType(string itemName, Type type);
///
/// Exposes a host type to script code with the specified options.
///
/// A name for the new global script item that will represent the type.
/// A value that selects options for the operation.
/// The type to expose.
///
///
/// Host types are exposed to script code in the form of objects whose properties and
/// methods are bound to the type's static members and nested types. If the type has
/// generic parameters, the corresponding object will be invocable with type arguments to
/// yield a specific type.
///
///
/// For more information about the mapping between host members and script-callable
/// properties and methods, see .
///
///
void AddHostType(string itemName, HostItemFlags flags, Type type);
///
/// Exposes a host type to script code. The type is specified by name.
///
/// A name for the new global script item that will represent the type.
/// The fully qualified name of the type to expose.
/// Optional generic type arguments.
///
///
/// Host types are exposed to script code in the form of objects whose properties and
/// methods are bound to the type's static members and nested types. If the type has
/// generic parameters, the corresponding object will be invocable with type arguments to
/// yield a specific type.
///
///
/// For more information about the mapping between host members and script-callable
/// properties and methods, see .
///
///
void AddHostType(string itemName, string typeName, params Type[] typeArgs);
///
/// Exposes a host type to script code with the specified options. The type is specified by name.
///
/// A name for the new global script item that will represent the type.
/// A value that selects options for the operation.
/// The fully qualified name of the type to expose.
/// Optional generic type arguments.
///
///
/// Host types are exposed to script code in the form of objects whose properties and
/// methods are bound to the type's static members and nested types. If the type has
/// generic parameters, the corresponding object will be invocable with type arguments to
/// yield a specific type.
///
///
/// For more information about the mapping between host members and script-callable
/// properties and methods, see .
///
///
void AddHostType(string itemName, HostItemFlags flags, string typeName, params Type[] typeArgs);
///
/// Exposes a host type to script code. The type is specified by type name and assembly name.
///
/// A name for the new global script item that will represent the type.
/// The fully qualified name of the type to expose.
/// The name of the assembly that contains the type to expose.
/// Optional generic type arguments.
///
///
/// Host types are exposed to script code in the form of objects whose properties and
/// methods are bound to the type's static members and nested types. If the type has
/// generic parameters, the corresponding object will be invocable with type arguments to
/// yield a specific type.
///
///
/// For more information about the mapping between host members and script-callable
/// properties and methods, see .
///
///
void AddHostType(string itemName, string typeName, string assemblyName, params Type[] typeArgs);
///
/// Exposes a host type to script code with the specified options. The type is specified by
/// type name and assembly name.
///
/// A name for the new global script item that will represent the type.
/// A value that selects options for the operation.
/// The fully qualified name of the type to expose.
/// The name of the assembly that contains the type to expose.
/// Optional generic type arguments.
///
///
/// Host types are exposed to script code in the form of objects whose properties and
/// methods are bound to the type's static members and nested types. If the type has
/// generic parameters, the corresponding object will be invocable with type arguments to
/// yield a specific type.
///
///
/// For more information about the mapping between host members and script-callable
/// properties and methods, see .
///
///
void AddHostType(string itemName, HostItemFlags flags, string typeName, string assemblyName, params Type[] typeArgs);
///
/// Exposes host types to script code.
///
/// The types to expose.
///
///
/// This method uses each specified type's name for the new global script item that will
/// represent it.
///
///
/// Host types are exposed to script code in the form of objects whose properties and
/// methods are bound to the type's static members and nested types. If the type has
/// generic parameters, the corresponding object will be invocable with type arguments to
/// yield a specific type.
///
///
/// For more information about the mapping between host members and script-callable
/// properties and methods, see .
///
///
void AddHostTypes(params Type[] types);
///
/// Imports a COM/ActiveX type and exposes it to script code. The registered class is
/// specified by programmatic identifier (ProgID).
///
/// A name for the new global script item that will represent the type.
/// The programmatic identifier (ProgID) of the registered class to import.
///
///
/// The argument can be a class identifier (CLSID) in standard
/// GUID format with braces (e.g., "{0D43FE01-F093-11CF-8940-00A0C9054228}").
///
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
///
void AddCOMType(string itemName, string progID);
///
/// Imports a COM/ActiveX type from the specified server and exposes it to script code. The
/// registered class is specified by programmatic identifier (ProgID).
///
/// A name for the new global script item that will represent the type.
/// The programmatic identifier (ProgID) of the registered class to import.
/// The name of the server from which to import the type.
///
///
/// The argument can be a class identifier (CLSID) in standard
/// GUID format with braces (e.g., "{0D43FE01-F093-11CF-8940-00A0C9054228}").
///
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
///
void AddCOMType(string itemName, string progID, string serverName);
///
/// Imports a COM/ActiveX type and exposes it to script code with the specified options.
/// The registered class is specified by programmatic identifier (ProgID).
///
/// A name for the new global script item that will represent the type.
/// A value that selects options for the operation.
/// The programmatic identifier (ProgID) of the registered class to import.
///
///
/// The argument can be a class identifier (CLSID) in standard
/// GUID format with braces (e.g., "{0D43FE01-F093-11CF-8940-00A0C9054228}").
///
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
///
void AddCOMType(string itemName, HostItemFlags flags, string progID);
///
/// Imports a COM/ActiveX type from the specified server and exposes it to script code with
/// the specified options. The registered class is specified by programmatic identifier (ProgID).
///
/// A name for the new global script item that will represent the type.
/// A value that selects options for the operation.
/// The programmatic identifier (ProgID) of the registered class to import.
/// The name of the server from which to import the type.
///
///
/// The argument can be a class identifier (CLSID) in standard
/// GUID format with braces (e.g., "{0D43FE01-F093-11CF-8940-00A0C9054228}").
///
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
///
void AddCOMType(string itemName, HostItemFlags flags, string progID, string serverName);
///
/// Imports a COM/ActiveX type and exposes it to script code. The registered class is
/// specified by class identifier (CLSID).
///
/// A name for the new global script item that will represent the type.
/// The class identifier (CLSID) of the registered class to import.
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
void AddCOMType(string itemName, Guid clsid);
///
/// Imports a COM/ActiveX type from the specified server and exposes it to script code. The
/// registered class is specified by class identifier (CLSID).
///
/// A name for the new global script item that will represent the type.
/// The class identifier (CLSID) of the registered class to import.
/// The name of the server from which to import the type.
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
void AddCOMType(string itemName, Guid clsid, string serverName);
///
/// Imports a COM/ActiveX type and exposes it to script code with the specified options.
/// The registered class is specified by class identifier (CLSID).
///
/// A name for the new global script item that will represent the type.
/// A value that selects options for the operation.
/// The class identifier (CLSID) of the registered class to import.
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
void AddCOMType(string itemName, HostItemFlags flags, Guid clsid);
///
/// Imports a COM/ActiveX type from the specified server and exposes it to script code with
/// the specified options. The registered class is specified by class identifier (CLSID).
///
/// A name for the new global script item that will represent the type.
/// A value that selects options for the operation.
/// The class identifier (CLSID) of the registered class to import.
/// The name of the server from which to import the type.
///
/// For information about the mapping between host members and script-callable properties
/// and methods, see .
///
void AddCOMType(string itemName, HostItemFlags flags, Guid clsid, string serverName);
///
/// Executes script code.
///
/// The script code to execute.
///
///
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets the specified script code as a statement.
///
///
/// If a debugger is attached, it will present the specified script code to the user as a
/// document with an automatically selected name. This document will not be discarded
/// after execution.
///
///
void Execute(string code);
///
/// Executes script code with an associated document name.
///
/// A document name for the script code. Currently, this name is used only as a label in presentation contexts such as debugger user interfaces.
/// The script code to execute.
///
///
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets the specified script code as a statement.
///
///
/// If a debugger is attached, it will present the specified script code to the user as a
/// document with the specified name. This document will not be discarded after execution.
///
///
void Execute(string documentName, string code);
///
/// Executes script code with an associated document name, optionally discarding the document after execution.
///
/// A document name for the script code. Currently, this name is used only as a label in presentation contexts such as debugger user interfaces.
/// True to discard the script document after execution, false otherwise.
/// The script code to execute.
///
///
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets the specified script code as a statement.
///
///
/// If a debugger is attached, it will present the specified script code to the user as a
/// document with the specified name. Discarding this document removes it from view but
/// has no effect on the script engine. Only Windows Script engines honor
/// .
///
///
void Execute(string documentName, bool discard, string code);
///
/// Executes script code with the specified document meta-information.
///
/// A structure containing meta-information for the script document.
/// The script code to execute.
///
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets the specified script code as a statement.
///
void Execute(DocumentInfo documentInfo, string code);
///
/// Loads and executes a script document.
///
/// A string specifying the document to be loaded and executed.
///
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets script code loaded from the specified document as a statement.
///
void ExecuteDocument(string specifier);
///
/// Loads and executes a document with the specified category.
///
/// A string specifying the document to be loaded and executed.
/// An optional category for the requested document.
///
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets script code loaded from the specified document as a statement.
///
void ExecuteDocument(string specifier, DocumentCategory category);
///
/// Loads and executes a document with the specified category and context callback.
///
/// A string specifying the document to be loaded and executed.
/// An optional category for the requested document.
/// An optional context callback for the requested document.
///
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets script code loaded from the specified document as a statement.
///
void ExecuteDocument(string specifier, DocumentCategory category, DocumentContextCallback contextCallback);
///
/// Executes script code as a command.
///
/// The script command to execute.
/// The command output.
///
/// This method is similar to but optimized for command
/// consoles. The specified command must be limited to a single expression or statement.
/// Script engines can override this method to customize command execution as well as the
/// process of converting the result to a string for console output.
///
string ExecuteCommand(string command);
///
/// Evaluates script code.
///
/// The script code to evaluate.
/// The result value.
///
///
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets the specified script code as an expression.
///
///
/// If a debugger is attached, it will present the specified script code to the user as a
/// document with an automatically selected name. This document will be discarded after
/// execution.
///
///
/// For information about the types of result values that script code can return, see
/// .
///
///
object Evaluate(string code);
///
/// Evaluates script code with an associated document name.
///
/// A document name for the script code. Currently, this name is used only as a label in presentation contexts such as debugger user interfaces.
/// The script code to evaluate.
/// The result value.
///
///
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets the specified script code as an expression.
///
///
/// If a debugger is attached, it will present the specified script code to the user as a
/// document with the specified name. This document will be discarded after execution.
///
///
/// For information about the types of result values that script code can return, see
/// .
///
///
object Evaluate(string documentName, string code);
///
/// Evaluates script code with an associated document name, optionally discarding the document after execution.
///
/// A document name for the script code. Currently, this name is used only as a label in presentation contexts such as debugger user interfaces.
/// True to discard the script document after execution, false otherwise.
/// The script code to evaluate.
/// The result value.
///
///
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets the specified script code as an expression.
///
///
/// If a debugger is attached, it will present the specified script code to the user as a
/// document with the specified name. Discarding this document removes it from view but
/// has no effect on the script engine. Only Windows Script engines honor
/// .
///
///
/// The following table summarizes the types of result values that script code can return.
///
///
/// Type
/// Returned As
/// Remarks
///
/// -
/// String
/// System.String
/// N/A
///
/// -
/// Boolean
/// System.Boolean
/// N/A
///
/// -
/// Number
/// System.Int32 or System.Double
///
/// Other numeric types are possible. The exact conversions between script and .NET
/// numeric types are defined by the script engine.
///
///
/// -
/// Null Reference
/// null
/// N/A
///
/// -
/// Undefined
///
///
/// This represents JavaScript's
/// undefined,
/// VBScript's
/// Empty,
/// etc.
///
///
/// -
/// Void
///
///
/// This is returned when script code forwards the result of a host method that returns no value.
///
///
/// -
/// Host Object
/// Native .NET type
///
/// This includes all .NET types not mentioned above, including value types (enums,
/// structs, etc.), and instances of all other classes. Script code can only create
/// these objects by invoking a host method or constructor. They are returned to
/// the host in their native .NET form.
///
///
/// -
/// Script Object
///
///
/// This includes all native script objects that have no .NET representation. C#'s
/// dynamic
/// keyword provides a convenient way to access them.
///
///
/// -
/// Other
/// Unspecified
///
/// This includes host types and other ClearScript-specific objects intended for
/// script code use only. It may also include language-specific values that the
/// ClearScript library does not support.
///
///
///
///
///
object Evaluate(string documentName, bool discard, string code);
///
/// Evaluates script code with the specified document meta-information.
///
/// A structure containing meta-information for the script document.
/// The script code to evaluate.
/// The result value.
///
///
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets the specified script code as an expression.
///
///
/// For information about the types of result values that script code can return, see
/// .
///
///
object Evaluate(DocumentInfo documentInfo, string code);
///
/// Loads and evaluates a script document.
///
/// A string specifying the document to be loaded and evaluated.
/// The result value.
///
///
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets script code loaded from the specified document as an expression.
///
///
/// For information about the types of result values that script code can return, see
/// .
///
///
object EvaluateDocument(string specifier);
///
/// Loads and evaluates a document with the specified category.
///
/// A string specifying the document to be loaded and evaluated.
/// An optional category for the requested document.
/// The result value.
///
///
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets script code loaded from the specified document as an expression.
///
///
/// For information about the types of result values that script code can return, see
/// .
///
///
object EvaluateDocument(string specifier, DocumentCategory category);
///
/// Loads and evaluates a document with the specified category and context callback.
///
/// A string specifying the document to be loaded and evaluated.
/// An optional category for the requested document.
/// An optional context callback for the requested document.
/// The result value.
///
///
/// In some script languages the distinction between statements and expressions is
/// significant but ambiguous for certain syntactic elements. This method always
/// interprets script code loaded from the specified document as an expression.
///
///
/// For information about the types of result values that script code can return, see
/// .
///
///
object EvaluateDocument(string specifier, DocumentCategory category, DocumentContextCallback contextCallback);
///
/// Invokes a global function or procedure.
///
/// The name of the global function or procedure to invoke.
/// Optional invocation arguments.
/// The return value if a function was invoked, an undefined value otherwise.
object Invoke(string funcName, params object[] args);
///
/// Gets a string representation of the script call stack.
///
/// The script call stack formatted as a string.
///
/// This method returns an empty string if the script engine is not executing script code.
/// The stack trace text format is defined by the script engine.
///
string GetStackTrace();
///
/// Interrupts script execution and causes the script engine to throw an exception.
///
///
/// This method can be called safely from any thread.
///
void Interrupt();
///
/// Performs garbage collection.
///
/// True to perform exhaustive garbage collection, false to favor speed over completeness.
void CollectGarbage(bool exhaustive);
}
}