浏览代码

Added scripts to custom converters #117

Xanathar 10 年之前
父节点
当前提交
fdbeb9799c

+ 1 - 1
src/MoonSharp.Interpreter.Tests/EndToEnd/CoroutineTests.cs

@@ -281,7 +281,7 @@ checkresume(6, false, 'cannot resume dead coroutine');
 			Assert.AreEqual(34, result.Number);
 
 			// Check the autoyield actually triggered
-			Assert.Greater(cycles, 10);
+			Assert.IsTrue(cycles > 10);
 		}
 
 

+ 1 - 1
src/MoonSharp.Interpreter.Tests/EndToEnd/UserDataMethodsTests.cs

@@ -287,7 +287,7 @@ namespace MoonSharp.Interpreter.Tests.EndToEnd
 					v => new int[] { 43, 78, 126, 14 });
 
 				Script.GlobalOptions.CustomConverters.SetClrToScriptCustomConversion<StringBuilder>(
-					v => DynValue.NewString(v.ToString().ToUpper()));
+					(_s, v) => DynValue.NewString(v.ToString().ToUpper()));
 
 
 				S.Globals.Set("static", UserData.CreateStatic<SomeClass>());

+ 1 - 1
src/MoonSharp.Interpreter.Tests/EndToEnd/VtUserDataMethodsTests.cs

@@ -287,7 +287,7 @@ namespace MoonSharp.Interpreter.Tests.EndToEnd
 					v => new int[] { 43, 78, 126, 14 });
 
 				Script.GlobalOptions.CustomConverters.SetClrToScriptCustomConversion<StringBuilder>(
-					v => DynValue.NewString(v.ToString().ToUpper()));
+					(_s, v) => DynValue.NewString(v.ToString().ToUpper()));
 
 
 				S.Globals.Set("static", UserData.CreateStatic<SomeClass>());

+ 1 - 1
src/MoonSharp.Interpreter/Interop/Converters/ClrToScriptConversions.cs

@@ -24,7 +24,7 @@ namespace MoonSharp.Interpreter.Interop.Converters
 			var converter = Script.GlobalOptions.CustomConverters.GetClrToScriptCustomConversion(obj.GetType());
 			if (converter != null)
 			{
-				var v = converter(obj);
+				var v = converter(script, obj);
 				if (v != null)
 					return v;
 			}

+ 26 - 5
src/MoonSharp.Interpreter/Interop/CustomConvertersCollection.cs

@@ -12,7 +12,7 @@ namespace MoonSharp.Interpreter.Interop
 	public class CustomConvertersCollection 
 	{
 		private Dictionary<Type, Func<DynValue, object>>[] m_Script2Clr = new Dictionary<Type, Func<DynValue, object>>[(int)LuaTypeExtensions.MaxConvertibleTypes + 1];
-		private Dictionary<Type, Func<object, DynValue>> m_Clr2Script = new Dictionary<Type, Func<object, DynValue>>();
+		private Dictionary<Type, Func<Script, object, DynValue>> m_Clr2Script = new Dictionary<Type, Func<Script, object, DynValue>>();
 
 		internal CustomConvertersCollection()
 		{
@@ -65,7 +65,7 @@ namespace MoonSharp.Interpreter.Interop
 		/// </summary>
 		/// <param name="clrDataType">The CLR data type.</param>
 		/// <param name="converter">The converter, or null.</param>
-		public void SetClrToScriptCustomConversion(Type clrDataType, Func<object, DynValue> converter = null)
+		public void SetClrToScriptCustomConversion(Type clrDataType, Func<Script, object, DynValue> converter = null)
 		{
 			if (converter == null)
 			{
@@ -83,9 +83,9 @@ namespace MoonSharp.Interpreter.Interop
 		/// </summary>
 		/// <typeparam name="T">The CLR data type.</typeparam>
 		/// <param name="converter">The converter, or null.</param>
-		public void SetClrToScriptCustomConversion<T>(Func<T, DynValue> converter = null)
+		public void SetClrToScriptCustomConversion<T>(Func<Script, T, DynValue> converter = null)
 		{
-			SetClrToScriptCustomConversion(typeof(T), o => converter((T)o));
+			SetClrToScriptCustomConversion(typeof(T), (s, o) => converter(s, (T)o));
 		}
 
 
@@ -94,11 +94,32 @@ namespace MoonSharp.Interpreter.Interop
 		/// </summary>
 		/// <param name="clrDataType">Type of the color data.</param>
 		/// <returns>The converter function, or null if not found</returns>
-		public Func<object, DynValue> GetClrToScriptCustomConversion(Type clrDataType)
+		public Func<Script, object, DynValue> GetClrToScriptCustomConversion(Type clrDataType)
 		{
 			return m_Clr2Script.GetOrDefault(clrDataType);
 		}
 
+		/// Sets a custom converter from a CLR data type. Set null to remove a previous custom converter.
+		/// </summary>
+		/// <param name="clrDataType">The CLR data type.</param>
+		/// <param name="converter">The converter, or null.</param>
+		[Obsolete("This method is deprecated. Use the overloads accepting functions with a Script argument.")]
+		public void SetClrToScriptCustomConversion(Type clrDataType, Func<object, DynValue> converter = null)
+		{
+			SetClrToScriptCustomConversion(clrDataType, (s, o) => converter(o));
+		}
+
+		/// <summary>
+		/// Sets a custom converter from a CLR data type. Set null to remove a previous custom converter.
+		/// </summary>
+		/// <typeparam name="T">The CLR data type.</typeparam>
+		/// <param name="converter">The converter, or null.</param>
+		[Obsolete("This method is deprecated. Use the overloads accepting functions with a Script argument.")]
+		public void SetClrToScriptCustomConversion<T>(Func<T, DynValue> converter = null)
+		{
+			SetClrToScriptCustomConversion(typeof(T), o => converter((T)o));
+		}
+
 
 		/// <summary>
 		/// Removes all converters.