Эх сурвалжийг харах

Tutorial project added. Minor change in script loaders

Xanathar 10 жил өмнө
parent
commit
27935b2f93

+ 11 - 0
src/MoonSharp.Interpreter/CodeAnalysis/AstNode.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace MoonSharp.Interpreter.CodeAnalysis
+{
+	class AstNode
+	{
+	}
+}

+ 14 - 5
src/MoonSharp.Interpreter/Loaders/ScriptLoaderBase.cs

@@ -55,8 +55,8 @@ namespace MoonSharp.Interpreter.Loaders
 
 		/// <summary>
 		/// Resolves the name of a module to a filename (which will later be passed to OpenScriptFile).
-		/// The resolution happens first on paths included in the LUA_PATH global variable, and -
-		/// if the variable does not exist - by consulting the
+		/// The resolution happens first on paths included in the LUA_PATH global variable (if and only if
+		/// the IgnoreLuaPathGlobal is false), and - if the variable does not exist - by consulting the
 		/// ScriptOptions.ModulesPaths array. Override to provide a different behaviour.
 		/// </summary>
 		/// <param name="modname">The modname.</param>
@@ -64,10 +64,13 @@ namespace MoonSharp.Interpreter.Loaders
 		/// <returns></returns>
 		public virtual string ResolveModuleName(string modname, Table globalContext)
 		{
-			DynValue s = globalContext.RawGet("LUA_PATH");
+			if (!this.IgnoreLuaPathGlobal)
+			{
+				DynValue s = globalContext.RawGet("LUA_PATH");
 
-			if (s != null && s.Type == DataType.String)
-				return ResolveModuleName(modname, UnpackStringPaths(s.String));
+				if (s != null && s.Type == DataType.String)
+					return ResolveModuleName(modname, UnpackStringPaths(s.String));
+			}
 
 			return ResolveModuleName(modname, this.ModulePaths);
 		}
@@ -126,5 +129,11 @@ namespace MoonSharp.Interpreter.Loaders
 		{
 			return filename;
 		}
+
+		/// <summary>
+		/// Gets or sets a value indicating whether the LUA_PATH global is checked or not to get the path where modules are contained.
+		/// If true, the LUA_PATH global is NOT checked.
+		/// </summary>
+		public bool IgnoreLuaPathGlobal { get; set; }
 	}
 }

+ 1 - 0
src/MoonSharp.Interpreter/MoonSharp.Interpreter.net35-client.csproj

@@ -116,6 +116,7 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="AsyncExtensions.cs" />
+    <Compile Include="CodeAnalysis\AstNode.cs" />
     <Compile Include="CoreLib\CoroutineModule.cs" />
     <Compile Include="CoreLib\BasicModule.cs" />
     <Compile Include="CoreLib\DebugModule.cs" />

+ 29 - 1
src/MoonSharp.Interpreter/REPL/ReplInterpreterScriptLoader.cs

@@ -9,7 +9,15 @@ namespace MoonSharp.Interpreter.REPL
 {
 	/// <summary>
 	/// A script loader loading scripts directly from the file system (does not go through platform object)
-	/// AND starts with module paths taken from environment variables (again, not going through the platform object)
+	/// AND starts with module paths taken from environment variables (again, not going through the platform object).
+	/// 
+	/// The paths are preconstructed using :
+	///		* The MOONSHARP_PATH variable if it exists
+	///		* The LUA_PATH otherwise
+	///		* The '?;?.lua" path otherwise again
+	///		
+	/// Also, everytime a module is require(d), the "LUA_PATH" global variable is checked. If it exists, those paths
+	/// will be used to load the module instead of the global ones.
 	/// </summary>
 	public class ReplInterpreterScriptLoader : FileSystemScriptLoader
 	{
@@ -32,6 +40,26 @@ namespace MoonSharp.Interpreter.REPL
 				ModulePaths = UnpackStringPaths("?;?.lua");
 			}
 		}
+
+		/// <summary>
+		/// Resolves the name of a module to a filename (which will later be passed to OpenScriptFile).
+		/// The resolution happens first on paths included in the LUA_PATH global variable, and -
+		/// if the variable does not exist - by consulting the
+		/// ScriptOptions.ModulesPaths array. Override to provide a different behaviour.
+		/// </summary>
+		/// <param name="modname">The modname.</param>
+		/// <param name="globalContext">The global context.</param>
+		/// <returns></returns>
+		public override string ResolveModuleName(string modname, Table globalContext)
+		{
+			DynValue s = globalContext.RawGet("LUA_PATH");
+
+			if (s != null && s.Type == DataType.String)
+				return ResolveModuleName(modname, UnpackStringPaths(s.String));
+
+			else
+				return base.ResolveModuleName(modname, globalContext);
+		}
 	}
 }
 

+ 6 - 0
src/Tutorial/Tutorials/App.config

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+    </startup>
+</configuration>

+ 15 - 0
src/Tutorial/Tutorials/Program.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tutorials
+{
+	class Program
+	{
+		static void Main(string[] args)
+		{
+		}
+	}
+}

+ 36 - 0
src/Tutorial/Tutorials/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Tutorials")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Tutorials")]
+[assembly: AssemblyCopyright("Copyright ©  2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("62e4449b-74a0-4d7e-9a21-00eeff1f4f6f")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 65 - 0
src/Tutorial/Tutorials/Tutorials.csproj

@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{56301BAA-FD15-46D4-9C77-84F9DC299C56}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Tutorials</RootNamespace>
+    <AssemblyName>Tutorials</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="MoonSharp.Interpreter">
+      <HintPath>..\..\packages\MoonSharp.0.9.2.0\lib\net40-client\MoonSharp.Interpreter.dll</HintPath>
+    </Reference>
+    <Reference Include="MoonSharp.RemoteDebugger">
+      <HintPath>..\..\packages\MoonSharp.Debugger.0.9.2.0\lib\net40-client\MoonSharp.RemoteDebugger.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 5 - 0
src/Tutorial/Tutorials/packages.config

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="MoonSharp" version="0.9.2.0" targetFramework="net45" />
+  <package id="MoonSharp.Debugger" version="0.9.2.0" targetFramework="net45" />
+</packages>

BIN
src/Unity/UnityTestBed/Assets/Plugins/MoonSharp.Interpreter.Tests.dll


BIN
src/Unity/UnityTestBed/Assets/Plugins/MoonSharp.Interpreter.dll


+ 572 - 5
src/Unity/UnityTestBed/Assets/Plugins/MoonSharp.Interpreter.xml

@@ -150,9 +150,15 @@
             Marks a method as the handler of metamethods of a userdata type
             </summary>
         </member>
+        <member name="M:MoonSharp.Interpreter.MoonSharpUserDataMetamethodAttribute.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:MoonSharp.Interpreter.MoonSharpUserDataMetamethodAttribute"/> class.
+            </summary>
+            <param name="name">The metamethod name (like '__div', '__ipairs', etc.)</param>
+        </member>
         <member name="P:MoonSharp.Interpreter.MoonSharpUserDataMetamethodAttribute.Name">
             <summary>
-            The interop access mode
+            The metamethod name (like '__div', '__ipairs', etc.)
             </summary>
         </member>
         <member name="M:MoonSharp.Interpreter.Interop.Converters.ClrToScriptConversions.TryObjectToSimpleDynValue(MoonSharp.Interpreter.Script,System.Object)">
@@ -614,6 +620,25 @@
             Base type of all exceptions thrown in MoonSharp
             </summary>
         </member>
+        <member name="M:MoonSharp.Interpreter.InterpreterException.#ctor(System.Exception)">
+            <summary>
+            Initializes a new instance of the <see cref="T:MoonSharp.Interpreter.InterpreterException"/> class.
+            </summary>
+            <param name="ex">The ex.</param>
+        </member>
+        <member name="M:MoonSharp.Interpreter.InterpreterException.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:MoonSharp.Interpreter.InterpreterException"/> class.
+            </summary>
+            <param name="message">The message that describes the error.</param>
+        </member>
+        <member name="M:MoonSharp.Interpreter.InterpreterException.#ctor(System.String,System.Object[])">
+            <summary>
+            Initializes a new instance of the <see cref="T:MoonSharp.Interpreter.InterpreterException"/> class.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The arguments.</param>
+        </member>
         <member name="P:MoonSharp.Interpreter.InterpreterException.InstructionPtr">
             <summary>
             Gets the instruction pointer of the execution (if it makes sense)
@@ -629,11 +654,343 @@
             Gets the decorated message (error message plus error location in script) if possible.
             </summary>
         </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.#ctor(System.Exception)">
+            <summary>
+            Initializes a new instance of the <see cref="T:MoonSharp.Interpreter.ScriptRuntimeException"/> class.
+            </summary>
+            <param name="ex">The ex.</param>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:MoonSharp.Interpreter.ScriptRuntimeException"/> class.
+            </summary>
+            <param name="message">The message that describes the error.</param>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.#ctor(System.String,System.Object[])">
+            <summary>
+            Initializes a new instance of the <see cref="T:MoonSharp.Interpreter.ScriptRuntimeException"/> class.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The arguments.</param>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.ArithmeticOnNonNumber(MoonSharp.Interpreter.DynValue,MoonSharp.Interpreter.DynValue)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            an arithmetic operation was attempted on non-numbers
+            </summary>
+            <param name="l">The left operand.</param>
+            <param name="r">The right operand (or null).</param>
+            <returns>The exception to be raised.</returns>
+            <exception cref="T:MoonSharp.Interpreter.InternalErrorException">If both are numbers</exception>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.ConcatOnNonString(MoonSharp.Interpreter.DynValue,MoonSharp.Interpreter.DynValue)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a concat operation was attempted on non-strings
+            </summary>
+            <param name="l">The left operand.</param>
+            <param name="r">The right operand.</param>
+            <returns>The exception to be raised.</returns>
+            <exception cref="T:MoonSharp.Interpreter.InternalErrorException">If both are numbers or strings</exception>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.LenOnInvalidType(MoonSharp.Interpreter.DynValue)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a len operator was applied on an invalid operand
+            </summary>
+            <param name="r">The operand.</param>
+            <returns>The exception to be raised.</returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.CompareInvalidType(MoonSharp.Interpreter.DynValue,MoonSharp.Interpreter.DynValue)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a comparison operator was applied on an invalid combination of operand types
+            </summary>
+            <param name="l">The left operand.</param>
+            <param name="r">The right operand.</param>
+            <returns>The exception to be raised.</returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.BadArgument(System.Int32,System.String,System.String)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a function was called with a bad argument
+            </summary>
+            <param name="argNum">The argument number (0-based).</param>
+            <param name="funcName">Name of the function generating this error.</param>
+            <param name="message">The error message.</param>
+            <returns>The exception to be raised.</returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.BadArgumentUserData(System.Int32,System.String,System.Type,System.Object,System.Boolean)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a function was called with a bad userdata argument
+            </summary>
+            <param name="argNum">The argument number (0-based).</param>
+            <param name="funcName">Name of the function generating this error.</param>
+            <param name="expected">The expected System.Type.</param>
+            <param name="got">The object which was used.</param>
+            <param name="allowNil">True if nils were allowed in this call.</param>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.BadArgument(System.Int32,System.String,MoonSharp.Interpreter.DataType,MoonSharp.Interpreter.DataType,System.Boolean)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a function was called with a bad argument
+            </summary>
+            <param name="argNum">The argument number (0-based).</param>
+            <param name="funcName">Name of the function generating this error.</param>
+            <param name="expected">The expected data type.</param>
+            <param name="got">The data type received.</param>
+            <param name="allowNil">True if nils were allowed in this call.</param>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.BadArgument(System.Int32,System.String,System.String,System.String,System.Boolean)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a function was called with a bad argument
+            </summary>
+            <param name="argNum">The argument number (0-based).</param>
+            <param name="funcName">Name of the function generating this error.</param>
+            <param name="expected">The expected type description.</param>
+            <param name="got">The description of the type received.</param>
+            <param name="allowNil">True if nils were allowed in this call.</param>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.BadArgumentNoValue(System.Int32,System.String,MoonSharp.Interpreter.DataType)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a function was called with no value when a value was required.
+            
+            This function creates a message like "bad argument #xxx to 'yyy' (zzz expected, got no value)"
+            while <see cref="M:MoonSharp.Interpreter.ScriptRuntimeException.BadArgumentValueExpected(System.Int32,System.String)"/> creates a message like "bad argument #xxx to 'yyy' (value expected)"
+            </summary>
+            <param name="argNum">The argument number (0-based).</param>
+            <param name="funcName">Name of the function generating this error.</param>
+            <param name="expected">The expected data type.</param>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.BadArgumentIndexOutOfRange(System.String,System.Int32)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            an out of range index was specified
+            </summary>
+            <param name="argNum">The argument number (0-based).</param>
+            <param name="funcName">Name of the function generating this error.</param>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.BadArgumentNoNegativeNumbers(System.Int32,System.String)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a function was called with a negative number when a positive one was expected.
+            </summary>
+            <param name="argNum">The argument number (0-based).</param>
+            <param name="funcName">Name of the function generating this error.</param>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.BadArgumentValueExpected(System.Int32,System.String)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a function was called with no value when a value was required.
+            This function creates a message like "bad argument #xxx to 'yyy' (value expected)"
+            while <see cref="M:MoonSharp.Interpreter.ScriptRuntimeException.BadArgumentNoValue(System.Int32,System.String,MoonSharp.Interpreter.DataType)"/> creates a message like "bad argument #xxx to 'yyy' (zzz expected, got no value)"
+            </summary>
+            <param name="argNum">The argument number (0-based).</param>
+            <param name="funcName">Name of the function generating this error.</param>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.IndexType(MoonSharp.Interpreter.DynValue)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            an invalid attempt to index the specified object was made
+            </summary>
+            <param name="obj">The object.</param>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.LoopInIndex">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a loop was detected when performing __index over metatables.
+            </summary>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.LoopInNewIndex">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a loop was detected when performing __newindex over metatables.
+            </summary>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.LoopInCall">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a loop was detected when performing __call over metatables.
+            </summary>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.TableIndexIsNil">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a table indexing operation used nil as the key.
+            </summary>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.TableIndexIsNaN">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a table indexing operation used a NaN as the key.
+            </summary>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.ConvertToNumberFailed(System.Int32)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a conversion to number failed.
+            </summary>
+            <param name="stage">
+            Selects the correct error message:
+            0 - "value must be a number"
+            1 - "'for' initial value must be a number"
+            2 - "'for' step must be a number"
+            3 - "'for' limit must be a number"
+            </param>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.ConvertObjectFailed(System.Object)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a conversion of a CLR type to a Lua type has failed.
+            </summary>
+            <param name="obj">The object which could not be converted.</param>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.ConvertObjectFailed(MoonSharp.Interpreter.DataType)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a conversion of a Lua type to a CLR type has failed.
+            </summary>
+            <param name="t">The Lua type.</param>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.ConvertObjectFailed(MoonSharp.Interpreter.DataType,System.Type)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a constrained conversion of a Lua type to a CLR type has failed.
+            </summary>
+            <param name="t">The Lua type.</param>
+            <param name="t2">The expected CLR type.</param>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.UserDataArgumentTypeMismatch(MoonSharp.Interpreter.DataType,System.Type)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            a userdata of a specific CLR type was expected and a non-userdata type was passed.
+            </summary>
+            <param name="t">The Lua type.</param>
+            <param name="clrType">The expected CLR type.</param>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.UserDataMissingField(System.String,System.String)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            an attempt to index an invalid member of a userdata was done.
+            </summary>
+            <param name="typename">The name of the userdata type.</param>
+            <param name="fieldname">The field name.</param>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.CannotResumeNotSuspended(MoonSharp.Interpreter.CoroutineState)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            an attempt resume a coroutine in an invalid state was done.
+            </summary>
+            <param name="state">The state of the coroutine.</param>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.CannotYield">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            an attempt to yield across a CLR boundary was made.
+            </summary>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.CannotYieldMain">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            an attempt to yield from the main coroutine was made.
+            </summary>
+            <returns>
+            The exception to be raised.
+            </returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.ScriptRuntimeException.AttemptToCallNonFunc(MoonSharp.Interpreter.DataType,System.String)">
+            <summary>
+            Creates a ScriptRuntimeException with a predefined error message specifying that
+            an attempt to call a non-function was made
+            </summary>
+            <param name="type">The lua non-function data type.</param>
+            <param name="debugText">The debug text to aid location (appears as "near 'xxx'").</param>
+            <returns></returns>
+        </member>
         <member name="P:MoonSharp.Interpreter.ScriptRuntimeException.DoNotDecorateMessage">
             <summary>
             Gets or sets a value indicating whether the message should not be decorated
             </summary>
         </member>
+        <member name="M:MoonSharp.Interpreter.DynamicExpressionException.#ctor(System.String,System.Object[])">
+            <summary>
+            Initializes a new instance of the <see cref="T:MoonSharp.Interpreter.DynamicExpressionException"/> class.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The arguments.</param>
+        </member>
+        <member name="M:MoonSharp.Interpreter.DynamicExpressionException.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:MoonSharp.Interpreter.DynamicExpressionException"/> class.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
         <member name="T:MoonSharp.Interpreter.DynamicExpression">
             <summary>
             Represents a dynamic expression in the script
@@ -652,6 +1009,11 @@
             The script owning this resource.
             </value>
         </member>
+        <member name="F:MoonSharp.Interpreter.DynamicExpression.ExpressionCode">
+            <summary>
+            The code which generated this expression
+            </summary>
+        </member>
         <member name="M:MoonSharp.Interpreter.DynamicExpression.Evaluate(MoonSharp.Interpreter.ScriptExecutionContext)">
             <summary>
             Evaluates the expression
@@ -709,6 +1071,22 @@
             </summary>
             <typeparam name="T">The type to wrap</typeparam>
         </member>
+        <member name="M:MoonSharp.Interpreter.Interop.AnonWrapper`1.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:MoonSharp.Interpreter.Interop.AnonWrapper`1"/> class.
+            </summary>
+        </member>
+        <member name="M:MoonSharp.Interpreter.Interop.AnonWrapper`1.#ctor(`0)">
+            <summary>
+            Initializes a new instance of the <see cref="T:MoonSharp.Interpreter.Interop.AnonWrapper`1"/> class.
+            </summary>
+            <param name="o">The o.</param>
+        </member>
+        <member name="P:MoonSharp.Interpreter.Interop.AnonWrapper`1.Value">
+            <summary>
+            Gets or sets the value this instance wraps.
+            </summary>
+        </member>
         <member name="T:MoonSharp.Interpreter.Interop.IUserDataDescriptor">
             <summary>
             Interface used by MoonSharp to access objects of a given type from scripts.
@@ -1067,24 +1445,81 @@
         <member name="M:MoonSharp.Interpreter.Coroutine.AsTypedEnumerable">
             <summary>
             Gets this coroutine as a typed enumerable which can be looped over for resuming.
+            Returns its result as DynValue(s)
+            </summary>
+            <returns></returns>
+            <exception cref="T:System.InvalidOperationException">Only non-CLR coroutines can be resumed with this overload of the Resume method. Use the overload accepting a ScriptExecutionContext instead</exception>
+        </member>
+        <member name="M:MoonSharp.Interpreter.Coroutine.AsEnumerable">
+            <summary>
+            Gets this coroutine as a typed enumerable which can be looped over for resuming.
+            Returns its result as System.Object. Only the first element of tuples is returned.
+            Only non-CLR coroutines can be resumed with this method. Use an overload of the Resume method accepting a ScriptExecutionContext instead.
             </summary>
             <returns></returns>
+            <exception cref="T:System.InvalidOperationException">Only non-CLR coroutines can be resumed with this overload of the Resume method. Use the overload accepting a ScriptExecutionContext instead</exception>
         </member>
-        <member name="M:MoonSharp.Interpreter.Coroutine.AsEnumerator">
+        <member name="M:MoonSharp.Interpreter.Coroutine.AsEnumerable``1">
             <summary>
-            Gets this coroutine as a System.Collections.IEnumerator. This should bridge with Unity3D coroutines.
+            Gets this coroutine as a typed enumerable which can be looped over for resuming.
+            Returns its result as the specified type. Only the first element of tuples is returned.
+            Only non-CLR coroutines can be resumed with this method. Use an overload of the Resume method accepting a ScriptExecutionContext instead.
             </summary>
             <returns></returns>
+            <exception cref="T:System.InvalidOperationException">Only non-CLR coroutines can be resumed with this overload of the Resume method. Use the overload accepting a ScriptExecutionContext instead</exception>
+        </member>
+        <member name="M:MoonSharp.Interpreter.Coroutine.AsUnityCoroutine">
+            <summary>
+            The purpose of this method is to convert a MoonSharp/Lua coroutine to a Unity3D coroutine.
+            This loops over the coroutine, discarding returned values, and returning null for each invocation.
+            This means however that the coroutine will be invoked each frame.
+            Only non-CLR coroutines can be resumed with this method. Use an overload of the Resume method accepting a ScriptExecutionContext instead.
+            </summary>
+            <returns></returns>
+            <exception cref="T:System.InvalidOperationException">Only non-CLR coroutines can be resumed with this overload of the Resume method. Use the overload accepting a ScriptExecutionContext instead</exception>
         </member>
         <member name="M:MoonSharp.Interpreter.Coroutine.Resume(MoonSharp.Interpreter.DynValue[])">
             <summary>
-            Resumes the coroutine
+            Resumes the coroutine.
+            Only non-CLR coroutines can be resumed with this overload of the Resume method. Use the overload accepting a ScriptExecutionContext instead.
             </summary>
             <param name="args">The arguments.</param>
             <returns></returns>
             <exception cref="T:System.InvalidOperationException">Only non-CLR coroutines can be resumed with this overload of the Resume method. Use the overload accepting a ScriptExecutionContext instead</exception>
         </member>
         <member name="M:MoonSharp.Interpreter.Coroutine.Resume(MoonSharp.Interpreter.ScriptExecutionContext,MoonSharp.Interpreter.DynValue[])">
+            <summary>
+            Resumes the coroutine.
+            </summary>
+            <param name="context">The ScriptExecutionContext.</param>
+            <param name="args">The arguments.</param>
+            <returns></returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.Coroutine.Resume">
+            <summary>
+            Resumes the coroutine.
+            Only non-CLR coroutines can be resumed with this overload of the Resume method. Use the overload accepting a ScriptExecutionContext instead.
+            </summary>
+            <returns></returns>
+            <exception cref="T:System.InvalidOperationException">Only non-CLR coroutines can be resumed with this overload of the Resume method. Use the overload accepting a ScriptExecutionContext instead</exception>
+        </member>
+        <member name="M:MoonSharp.Interpreter.Coroutine.Resume(MoonSharp.Interpreter.ScriptExecutionContext)">
+            <summary>
+            Resumes the coroutine.
+            </summary>
+            <param name="context">The ScriptExecutionContext.</param>
+            <returns></returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.Coroutine.Resume(System.Object[])">
+            <summary>
+            Resumes the coroutine.
+            Only non-CLR coroutines can be resumed with this overload of the Resume method. Use the overload accepting a ScriptExecutionContext instead.
+            </summary>
+            <param name="args">The arguments.</param>
+            <returns></returns>
+            <exception cref="T:System.InvalidOperationException">Only non-CLR coroutines can be resumed with this overload of the Resume method. Use the overload accepting a ScriptExecutionContext instead.</exception>
+        </member>
+        <member name="M:MoonSharp.Interpreter.Coroutine.Resume(MoonSharp.Interpreter.ScriptExecutionContext,System.Object[])">
             <summary>
             Resumes the coroutine
             </summary>
@@ -1110,6 +1545,15 @@
             Gets the coroutine state.
             </summary>
         </member>
+        <member name="P:MoonSharp.Interpreter.Coroutine.OwnerScript">
+            <summary>
+            Gets the script owning this resource.
+            </summary>
+            <value>
+            The script owning this resource.
+            </value>
+            <exception cref="T:System.NotImplementedException"></exception>
+        </member>
         <member name="T:MoonSharp.Interpreter.Coroutine.CoroutineType">
             <summary>
             Possible types of coroutine
@@ -1665,12 +2109,57 @@
             The maximum value of this enum
             </summary>
         </member>
+        <member name="T:MoonSharp.Interpreter.Diagnostics.PerformanceCounter">
+            <summary>
+            Enumeration of the possible performance counters
+            </summary>
+        </member>
+        <member name="F:MoonSharp.Interpreter.Diagnostics.PerformanceCounter.AstCreation">
+            <summary>
+            Measures the time spent parsing the source creating the AST
+            </summary>
+        </member>
+        <member name="F:MoonSharp.Interpreter.Diagnostics.PerformanceCounter.Compilation">
+            <summary>
+            Measures the time spent converting ASTs in bytecode
+            </summary>
+        </member>
+        <member name="F:MoonSharp.Interpreter.Diagnostics.PerformanceCounter.Execution">
+            <summary>
+            Measures the time spent in executing scripts
+            </summary>
+        </member>
+        <member name="F:MoonSharp.Interpreter.Diagnostics.PerformanceCounter.AdaptersCompilation">
+            <summary>
+            Measures the on the fly creation/compilation of functions in userdata descriptors
+            </summary>
+        </member>
+        <member name="F:MoonSharp.Interpreter.Diagnostics.PerformanceCounter.LastValue">
+            <summary>
+            Sentinel value to get the enum size
+            </summary>
+        </member>
         <member name="T:MoonSharp.Interpreter.Diagnostics.PerformanceCounters.GlobalPerformanceStopwatch">
             <summary>
             This class is not *really* IDisposable.. it's just use to have a RAII like pattern.
             You are free to reuse this instance after calling Dispose.
             </summary>
         </member>
+        <member name="T:MoonSharp.Interpreter.Diagnostics.PerformanceCounterType">
+            <summary>
+            Enumeration of unit of measures of the performance counters
+            </summary>
+        </member>
+        <member name="F:MoonSharp.Interpreter.Diagnostics.PerformanceCounterType.MemoryBytes">
+            <summary>
+            The performance counter is specified in bytes (of memory)
+            </summary>
+        </member>
+        <member name="F:MoonSharp.Interpreter.Diagnostics.PerformanceCounterType.TimeMilliseconds">
+            <summary>
+            The performance counter is specified in milliseconds
+            </summary>
+        </member>
         <member name="T:MoonSharp.Interpreter.Diagnostics.PerformanceStatistics">
             <summary>
             A single object of this type exists for every script and gives access to performance statistics.
@@ -1842,6 +2331,13 @@
             <returns></returns>
             <exception cref="T:MoonSharp.Interpreter.ScriptRuntimeException">'tostring' must return a string to '{0}'</exception>
         </member>
+        <member name="M:MoonSharp.Interpreter.CallbackArguments.SkipMethodCall">
+            <summary>
+            Returns a copy of CallbackArguments where the first ("self") argument is skipped if this was a method call,
+            otherwise returns itself.
+            </summary>
+            <returns></returns>
+        </member>
         <member name="P:MoonSharp.Interpreter.CallbackArguments.Count">
             <summary>
             Gets the count of arguments
@@ -2165,6 +2661,19 @@
             Returns this value as readonly - eventually cloning it in the process if it isn't readonly to start with.
             </summary>
         </member>
+        <member name="M:MoonSharp.Interpreter.DynValue.Clone">
+            <summary>
+            Clones this instance.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:MoonSharp.Interpreter.DynValue.Clone(System.Boolean)">
+            <summary>
+            Clones this instance, overriding the "readonly" status.
+            </summary>
+            <param name="readOnly">if set to <c>true</c> the new instance is set as readonly, or writeable otherwise.</param>
+            <returns></returns>
+        </member>
         <member name="M:MoonSharp.Interpreter.DynValue.CloneAsWritable">
             <summary>
             Clones this instance, returning a writable copy.
@@ -2651,6 +3160,11 @@
             Marks a type of automatic registration as userdata (which happens only if UserData.RegisterAssembly is called).
             </summary>
         </member>
+        <member name="M:MoonSharp.Interpreter.MoonSharpUserDataAttribute.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:MoonSharp.Interpreter.MoonSharpUserDataAttribute"/> class.
+            </summary>
+        </member>
         <member name="P:MoonSharp.Interpreter.MoonSharpUserDataAttribute.AccessMode">
             <summary>
             The interop access mode
@@ -2667,6 +3181,11 @@
             </summary>
             <param name="visible">if set to true the member will be exposed to scripts, if false the member will be hidden.</param>
         </member>
+        <member name="P:MoonSharp.Interpreter.Interop.MoonSharpVisibleAttribute.Visible">
+            <summary>
+            Gets a value indicating whether this <see cref="T:MoonSharp.Interpreter.Interop.MoonSharpVisibleAttribute"/> is set to "visible".
+            </summary>
+        </member>
         <member name="T:MoonSharp.Interpreter.AutoDescribingUserDataDescriptor">
             <summary>
             Descriptor which acts as a non-containing adapter from IUserDataType to IUserDataDescriptor
@@ -3111,6 +3630,26 @@
             Reads a symbolref from a binary stream 
             </summary>
         </member>
+        <member name="P:MoonSharp.Interpreter.SymbolRef.Type">
+            <summary>
+            Gets the type of this symbol reference
+            </summary>
+        </member>
+        <member name="P:MoonSharp.Interpreter.SymbolRef.Index">
+            <summary>
+            Gets the index of this symbol in its scope context
+            </summary>
+        </member>
+        <member name="P:MoonSharp.Interpreter.SymbolRef.Name">
+            <summary>
+            Gets the name of this symbol
+            </summary>
+        </member>
+        <member name="P:MoonSharp.Interpreter.SymbolRef.Environment">
+            <summary>
+            Gets the environment this symbol refers to (for global symbols only)
+            </summary>
+        </member>
         <member name="P:MoonSharp.Interpreter.SymbolRef.DefaultEnv">
             <summary>
             Gets the default _ENV.
@@ -3488,6 +4027,11 @@
             scripts should be saved as .txt files in Assets/Resources/MoonSharp/Scripts.
             </summary>
         </member>
+        <member name="F:MoonSharp.Interpreter.Loaders.UnityAssetsScriptLoader.DEFAULT_PATH">
+            <summary>
+            The default path where scripts are meant to be stored (if not changed)
+            </summary>
+        </member>
         <member name="M:MoonSharp.Interpreter.Loaders.UnityAssetsScriptLoader.#ctor(System.String)">
             <summary>
             Initializes a new instance of the <see cref="T:MoonSharp.Interpreter.Loaders.UnityAssetsScriptLoader"/> class.
@@ -3510,6 +4054,13 @@
             </returns>
             <exception cref="T:System.Exception">UnityAssetsScriptLoader.LoadFile : Cannot load  + file</exception>
         </member>
+        <member name="M:MoonSharp.Interpreter.Loaders.UnityAssetsScriptLoader.ScriptFileExists(System.String)">
+            <summary>
+            Checks if a given file exists
+            </summary>
+            <param name="file">The file.</param>
+            <returns></returns>
+        </member>
         <member name="M:MoonSharp.Interpreter.Loaders.UnityAssetsScriptLoader.GetLoadedScripts">
             <summary>
             Gets the list of loaded scripts filenames (useful for debugging purposes).
@@ -3523,6 +4074,11 @@
             See <see cref="T:MoonSharp.Interpreter.MoonSharpModuleAttribute"/> for more information about modules.
             </summary>
         </member>
+        <member name="P:MoonSharp.Interpreter.MoonSharpModuleConstantAttribute.Name">
+            <summary>
+            Gets or sets the name of the constant - if different from the name of the field itself
+            </summary>
+        </member>
         <member name="T:MoonSharp.Interpreter.NamespaceDoc">
             <summary>
             Namespace containing all the most commonly used classes for MoonSharp operation.
@@ -4145,7 +4701,7 @@
         </member>
         <member name="M:MoonSharp.Interpreter.Script.#ctor">
             <summary>
-            Initializes a new instance of the <see cref="T:MoonSharp.Interpreter.Script"/> class.
+            Initializes a new instance of the <see cref="T:MoonSharp.Interpreter.Script"/> clas.s
             </summary>
         </member>
         <member name="M:MoonSharp.Interpreter.Script.#ctor(MoonSharp.Interpreter.CoreModules)">
@@ -4615,6 +5171,11 @@
             Enumeration (combinable as flags) of all the standard library modules
             </summary>
         </member>
+        <member name="F:MoonSharp.Interpreter.CoreModules.None">
+            <summary>
+            Value used to specify no modules to be loaded (equals 0).
+            </summary>
+        </member>
         <member name="F:MoonSharp.Interpreter.CoreModules.Basic">
             <summary>
             The basic methods. Includes "assert", "collectgarbage", "error", "print", "select", "type", "tonumber" and "tostring".
@@ -4786,6 +5347,12 @@
             See <see cref="T:MoonSharp.Interpreter.UserData"/> for easier object marshalling.
             </summary>
         </member>
+        <member name="P:MoonSharp.Interpreter.MoonSharpModuleAttribute.Namespace">
+            <summary>
+            Gets or sets the namespace, that is the name of the table which will contain the defined functions.
+            Can be null to be in the global table.
+            </summary>
+        </member>
         <member name="T:MoonSharp.Interpreter.ScriptGlobalOptions">
             <summary>
             Class containing script global options, that is options which cannot be customized per-script.

+ 25 - 0
src/moonsharp.sln

@@ -61,6 +61,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MoonSharpSL5ReplDemo", "Dev
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{32D6B30B-3970-45A0-AE63-2150CAEC325A}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial", "Tutorial", "{1AD0980F-0C79-4F83-A638-5CB22ED62675}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tutorials", "Tutorial\Tutorials\Tutorials.csproj", "{56301BAA-FD15-46D4-9C77-84F9DC299C56}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -508,6 +512,26 @@ Global
 		{69B110B4-E578-4854-8F63-D80E4E14E1B6}.Release|ARM.ActiveCfg = Release|Any CPU
 		{69B110B4-E578-4854-8F63-D80E4E14E1B6}.Release|x64.ActiveCfg = Release|Any CPU
 		{69B110B4-E578-4854-8F63-D80E4E14E1B6}.Release|x86.ActiveCfg = Release|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Debug|ARM.ActiveCfg = Debug|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Dev|ARM.ActiveCfg = Debug|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Dev|x64.ActiveCfg = Debug|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Devp4|Any CPU.ActiveCfg = Debug|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Devp4|Any CPU.Build.0 = Debug|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Devp4|ARM.ActiveCfg = Debug|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Devp4|x64.ActiveCfg = Debug|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Devp4|x86.ActiveCfg = Debug|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Release|Any CPU.Build.0 = Release|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Release|ARM.ActiveCfg = Release|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Release|x64.ActiveCfg = Release|Any CPU
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56}.Release|x86.ActiveCfg = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -532,5 +556,6 @@ Global
 		{6D867B0C-EFC6-48C8-972C-EE0A2F99FEB4} = {023F1F7D-5F49-430F-9CC4-5FF891439548}
 		{F9D383B9-2639-4738-A897-4D9F8801B8C9} = {5014C740-F6C7-4995-8D40-C250FB159A20}
 		{69B110B4-E578-4854-8F63-D80E4E14E1B6} = {3C626068-E8CE-4F62-8974-F42A56F4EFD3}
+		{56301BAA-FD15-46D4-9C77-84F9DC299C56} = {1AD0980F-0C79-4F83-A638-5CB22ED62675}
 	EndGlobalSection
 EndGlobal

+ 1 - 0
src/packages/repositories.config

@@ -7,4 +7,5 @@
   <repository path="..\MoonSharp.Interpreter.Tests\packages.config" />
   <repository path="..\TestRunners\ConsoleTestRunner\packages.config" />
   <repository path="..\TestRunners\Windows8TestRunner\packages.config" />
+  <repository path="..\Tutorial\Tutorials\packages.config" />
 </repositories>