Commit be0bfcc8 authored by Mervill's avatar Mervill
Browse files

Forced consistent line endings.

parent e5330179
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
using System; using System;
using System.Reflection; using System.Reflection;
using System.Collections.Generic; using System.Collections.Generic;
...@@ -47,7 +47,7 @@ namespace NLua ...@@ -47,7 +47,7 @@ namespace NLua
*/ */
sealed class CheckType sealed class CheckType
{ {
#if SILVERLIGHT #if SILVERLIGHT
private Dictionary<Type, ExtractValue> extractValues = new Dictionary<Type, ExtractValue>(); private Dictionary<Type, ExtractValue> extractValues = new Dictionary<Type, ExtractValue>();
#else #else
private Dictionary<long, ExtractValue> extractValues = new Dictionary<long, ExtractValue> (); private Dictionary<long, ExtractValue> extractValues = new Dictionary<long, ExtractValue> ();
...@@ -57,25 +57,25 @@ namespace NLua ...@@ -57,25 +57,25 @@ namespace NLua
public CheckType (ObjectTranslator translator) public CheckType (ObjectTranslator translator)
{ {
this.translator = translator; this.translator = translator;
extractValues.Add(GetExtractDictionaryKey(typeof(object)), new ExtractValue(GetAsObject)); extractValues.Add(GetExtractDictionaryKey(typeof(object)), new ExtractValue(GetAsObject));
extractValues.Add(GetExtractDictionaryKey(typeof(sbyte)), new ExtractValue(GetAsSbyte)); extractValues.Add(GetExtractDictionaryKey(typeof(sbyte)), new ExtractValue(GetAsSbyte));
extractValues.Add(GetExtractDictionaryKey(typeof(byte)), new ExtractValue(GetAsByte)); extractValues.Add(GetExtractDictionaryKey(typeof(byte)), new ExtractValue(GetAsByte));
extractValues.Add(GetExtractDictionaryKey(typeof(short)), new ExtractValue(GetAsShort)); extractValues.Add(GetExtractDictionaryKey(typeof(short)), new ExtractValue(GetAsShort));
extractValues.Add(GetExtractDictionaryKey(typeof(ushort)), new ExtractValue(GetAsUshort)); extractValues.Add(GetExtractDictionaryKey(typeof(ushort)), new ExtractValue(GetAsUshort));
extractValues.Add(GetExtractDictionaryKey(typeof(int)), new ExtractValue(GetAsInt)); extractValues.Add(GetExtractDictionaryKey(typeof(int)), new ExtractValue(GetAsInt));
extractValues.Add(GetExtractDictionaryKey(typeof(uint)), new ExtractValue(GetAsUint)); extractValues.Add(GetExtractDictionaryKey(typeof(uint)), new ExtractValue(GetAsUint));
extractValues.Add(GetExtractDictionaryKey(typeof(long)), new ExtractValue(GetAsLong)); extractValues.Add(GetExtractDictionaryKey(typeof(long)), new ExtractValue(GetAsLong));
extractValues.Add(GetExtractDictionaryKey(typeof(ulong)), new ExtractValue(GetAsUlong)); extractValues.Add(GetExtractDictionaryKey(typeof(ulong)), new ExtractValue(GetAsUlong));
extractValues.Add(GetExtractDictionaryKey(typeof(double)), new ExtractValue(GetAsDouble)); extractValues.Add(GetExtractDictionaryKey(typeof(double)), new ExtractValue(GetAsDouble));
extractValues.Add(GetExtractDictionaryKey(typeof(char)), new ExtractValue(GetAsChar)); extractValues.Add(GetExtractDictionaryKey(typeof(char)), new ExtractValue(GetAsChar));
extractValues.Add(GetExtractDictionaryKey(typeof(float)), new ExtractValue(GetAsFloat)); extractValues.Add(GetExtractDictionaryKey(typeof(float)), new ExtractValue(GetAsFloat));
extractValues.Add(GetExtractDictionaryKey(typeof(decimal)), new ExtractValue(GetAsDecimal)); extractValues.Add(GetExtractDictionaryKey(typeof(decimal)), new ExtractValue(GetAsDecimal));
extractValues.Add(GetExtractDictionaryKey(typeof(bool)), new ExtractValue(GetAsBoolean)); extractValues.Add(GetExtractDictionaryKey(typeof(bool)), new ExtractValue(GetAsBoolean));
extractValues.Add(GetExtractDictionaryKey(typeof(string)), new ExtractValue(GetAsString)); extractValues.Add(GetExtractDictionaryKey(typeof(string)), new ExtractValue(GetAsString));
extractValues.Add(GetExtractDictionaryKey(typeof(char[])), new ExtractValue (GetAsCharArray)); extractValues.Add(GetExtractDictionaryKey(typeof(char[])), new ExtractValue (GetAsCharArray));
extractValues.Add(GetExtractDictionaryKey(typeof(LuaFunction)), new ExtractValue(GetAsFunction)); extractValues.Add(GetExtractDictionaryKey(typeof(LuaFunction)), new ExtractValue(GetAsFunction));
extractValues.Add(GetExtractDictionaryKey(typeof(LuaTable)), new ExtractValue(GetAsTable)); extractValues.Add(GetExtractDictionaryKey(typeof(LuaTable)), new ExtractValue(GetAsTable));
extractValues.Add(GetExtractDictionaryKey(typeof(LuaUserData)), new ExtractValue(GetAsUserdata)); extractValues.Add(GetExtractDictionaryKey(typeof(LuaUserData)), new ExtractValue(GetAsUserdata));
extractNetObject = new ExtractValue (GetAsNetObject); extractNetObject = new ExtractValue (GetAsNetObject);
} }
...@@ -93,8 +93,8 @@ namespace NLua ...@@ -93,8 +93,8 @@ namespace NLua
{ {
if (paramType.IsByRef) if (paramType.IsByRef)
paramType = paramType.GetElementType (); paramType = paramType.GetElementType ();
var extractKey = GetExtractDictionaryKey(paramType); var extractKey = GetExtractDictionaryKey(paramType);
return extractValues.ContainsKey(extractKey) ? extractValues[extractKey] : extractNetObject; return extractValues.ContainsKey(extractKey) ? extractValues[extractKey] : extractNetObject;
} }
...@@ -109,7 +109,7 @@ namespace NLua ...@@ -109,7 +109,7 @@ namespace NLua
if (underlyingType != null) if (underlyingType != null)
paramType = underlyingType; // Silently convert nullable types to their non null requics paramType = underlyingType; // Silently convert nullable types to their non null requics
var extractKey = GetExtractDictionaryKey (paramType); var extractKey = GetExtractDictionaryKey (paramType);
if (paramType.Equals (typeof(object))) if (paramType.Equals (typeof(object)))
...@@ -119,7 +119,7 @@ namespace NLua ...@@ -119,7 +119,7 @@ namespace NLua
if (paramType.IsGenericParameter) { if (paramType.IsGenericParameter) {
if (luatype == LuaTypes.Boolean) if (luatype == LuaTypes.Boolean)
return extractValues [GetExtractDictionaryKey (typeof(bool))]; return extractValues [GetExtractDictionaryKey (typeof(bool))];
else if (luatype == LuaTypes.String) else if (luatype == LuaTypes.String)
return extractValues[GetExtractDictionaryKey (typeof(string))]; return extractValues[GetExtractDictionaryKey (typeof(string))];
else if (luatype == LuaTypes.Table) else if (luatype == LuaTypes.Table)
return extractValues [GetExtractDictionaryKey (typeof(LuaTable))]; return extractValues [GetExtractDictionaryKey (typeof(LuaTable))];
...@@ -130,23 +130,23 @@ namespace NLua ...@@ -130,23 +130,23 @@ namespace NLua
else if (luatype == LuaTypes.Number) else if (luatype == LuaTypes.Number)
return extractValues [GetExtractDictionaryKey (typeof(double))]; return extractValues [GetExtractDictionaryKey (typeof(double))];
} }
bool netParamIsString = paramType == typeof (string) || paramType == typeof (char []); bool netParamIsString = paramType == typeof (string) || paramType == typeof (char []);
bool netParamIsNumeric = paramType == typeof (int) || bool netParamIsNumeric = paramType == typeof (int) ||
paramType == typeof (uint) || paramType == typeof (uint) ||
paramType == typeof (long) || paramType == typeof (long) ||
paramType == typeof (ulong) || paramType == typeof (ulong) ||
paramType == typeof (short) || paramType == typeof (short) ||
paramType == typeof (float) || paramType == typeof (float) ||
paramType == typeof (double) || paramType == typeof (double) ||
paramType == typeof (decimal) || paramType == typeof (decimal) ||
paramType == typeof (byte); paramType == typeof (byte);
if (netParamIsNumeric) { if (netParamIsNumeric) {
if (LuaLib.LuaIsNumber (luaState, stackPos) && !netParamIsString) if (LuaLib.LuaIsNumber (luaState, stackPos) && !netParamIsString)
return extractValues [extractKey]; return extractValues [extractKey];
} else if (paramType == typeof(bool)) { } else if (paramType == typeof(bool)) {
if (LuaLib.LuaIsBoolean (luaState, stackPos)) if (LuaLib.LuaIsBoolean (luaState, stackPos))
return extractValues [extractKey]; return extractValues [extractKey];
} else if (netParamIsString) { } else if (netParamIsString) {
if (LuaLib.LuaNetIsStringStrict (luaState, stackPos)) if (LuaLib.LuaNetIsStringStrict (luaState, stackPos))
return extractValues [extractKey]; return extractValues [extractKey];
...@@ -183,17 +183,17 @@ namespace NLua ...@@ -183,17 +183,17 @@ namespace NLua
} }
return null; return null;
} }
#if SILVERLIGHT #if SILVERLIGHT
private Type GetExtractDictionaryKey(Type targetType) private Type GetExtractDictionaryKey(Type targetType)
{ {
return targetType; return targetType;
} }
#else #else
private long GetExtractDictionaryKey(Type targetType) private long GetExtractDictionaryKey(Type targetType)
{ {
return targetType.TypeHandle.Value.ToInt64(); return targetType.TypeHandle.Value.ToInt64();
} }
#endif #endif
...@@ -313,10 +313,10 @@ namespace NLua ...@@ -313,10 +313,10 @@ namespace NLua
private object GetAsBoolean (LuaState luaState, int stackPos) private object GetAsBoolean (LuaState luaState, int stackPos)
{ {
return LuaLib.LuaToBoolean (luaState, stackPos); return LuaLib.LuaToBoolean (luaState, stackPos);
} }
private object GetAsCharArray (LuaState luaState, int stackPos) private object GetAsCharArray (LuaState luaState, int stackPos)
{ {
if (!LuaLib.LuaNetIsStringStrict (luaState, stackPos)) if (!LuaLib.LuaNetIsStringStrict (luaState, stackPos))
...@@ -326,7 +326,7 @@ namespace NLua ...@@ -326,7 +326,7 @@ namespace NLua
} }
private object GetAsString (LuaState luaState, int stackPos) private object GetAsString (LuaState luaState, int stackPos)
{ {
if (!LuaLib.LuaNetIsStringStrict (luaState, stackPos)) if (!LuaLib.LuaNetIsStringStrict (luaState, stackPos))
return null; return null;
string retVal = LuaLib.LuaToString (luaState, stackPos).ToString (); string retVal = LuaLib.LuaToString (luaState, stackPos).ToString ();
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
using System; using System;
namespace NLua.Event namespace NLua.Event
......
...@@ -21,11 +21,11 @@ ...@@ -21,11 +21,11 @@
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
using System; using System;
using System.Linq; using System.Linq;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
namespace NLua.Extensions namespace NLua.Extensions
...@@ -42,7 +42,7 @@ namespace NLua.Extensions ...@@ -42,7 +42,7 @@ namespace NLua.Extensions
/// <returns> /// <returns>
/// <c>true</c> if the specified obj is null; otherwise, <c>false</c>. /// <c>true</c> if the specified obj is null; otherwise, <c>false</c>.
/// </returns> /// </returns>
/// ///
#if USE_KOPILUA #if USE_KOPILUA
public static bool IsNull (object obj) public static bool IsNull (object obj)
...@@ -58,152 +58,152 @@ namespace NLua.Extensions ...@@ -58,152 +58,152 @@ namespace NLua.Extensions
#endif #endif
} }
static class TypeExtensions static class TypeExtensions
{ {
public static bool HasMethod (this Type t, string name) public static bool HasMethod (this Type t, string name)
{ {
var op = t.GetMethods (BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); var op = t.GetMethods (BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
return op.Count (m => m.Name == name) > 0; return op.Count (m => m.Name == name) > 0;
} }
public static bool HasAdditionOpertator (this Type t) public static bool HasAdditionOpertator (this Type t)
{ {
if (t.IsPrimitive) if (t.IsPrimitive)
return true; return true;
return t.HasMethod ("op_Addition"); return t.HasMethod ("op_Addition");
} }
public static bool HasSubtractionOpertator (this Type t) public static bool HasSubtractionOpertator (this Type t)
{ {
if (t.IsPrimitive) if (t.IsPrimitive)
return true; return true;
return t.HasMethod ("op_Subtraction"); return t.HasMethod ("op_Subtraction");
} }
public static bool HasMultiplyOpertator (this Type t) public static bool HasMultiplyOpertator (this Type t)
{ {
if (t.IsPrimitive) if (t.IsPrimitive)
return true; return true;
return t.HasMethod ("op_Multiply"); return t.HasMethod ("op_Multiply");
} }
public static bool HasDivisionOpertator (this Type t) public static bool HasDivisionOpertator (this Type t)
{ {
if (t.IsPrimitive) if (t.IsPrimitive)
return true; return true;
return t.HasMethod ("op_Division"); return t.HasMethod ("op_Division");
} }
public static bool HasModulusOpertator (this Type t) public static bool HasModulusOpertator (this Type t)
{ {
if (t.IsPrimitive) if (t.IsPrimitive)
return true; return true;
return t.HasMethod ("op_Modulus"); return t.HasMethod ("op_Modulus");
} }
public static bool HasUnaryNegationOpertator (this Type t) public static bool HasUnaryNegationOpertator (this Type t)
{ {
if (t.IsPrimitive) if (t.IsPrimitive)
return true; return true;
// Unary - will always have only one version. // Unary - will always have only one version.
var op = t.GetMethod ("op_UnaryNegation",BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); var op = t.GetMethod ("op_UnaryNegation",BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
return op != null; return op != null;
} }
public static bool HasEqualityOpertator (this Type t) public static bool HasEqualityOpertator (this Type t)
{ {
if (t.IsPrimitive) if (t.IsPrimitive)
return true; return true;
return t.HasMethod ("op_Equality"); return t.HasMethod ("op_Equality");
} }
public static bool HasLessThanOpertator (this Type t) public static bool HasLessThanOpertator (this Type t)
{ {
if (t.IsPrimitive) if (t.IsPrimitive)
return true; return true;
return t.HasMethod ("op_LessThan"); return t.HasMethod ("op_LessThan");
} }
public static bool HasLessThanOrEqualOpertator (this Type t) public static bool HasLessThanOrEqualOpertator (this Type t)
{ {
if (t.IsPrimitive) if (t.IsPrimitive)
return true; return true;
return t.HasMethod ("op_LessThanOrEqual"); return t.HasMethod ("op_LessThanOrEqual");
} }
public static IEnumerable<MethodInfo> GetMethods (this Type t, string name, BindingFlags flags) public static IEnumerable<MethodInfo> GetMethods (this Type t, string name, BindingFlags flags)
{ {
return t.GetMethods (flags).Where (m => m.Name == name); return t.GetMethods (flags).Where (m => m.Name == name);
} }
public static MethodInfo [] GetExtensionMethods (this Type type, IEnumerable<Assembly> assemblies = null) public static MethodInfo [] GetExtensionMethods (this Type type, IEnumerable<Assembly> assemblies = null)
{ {
List<Type> types = new List<Type> (); List<Type> types = new List<Type> ();
types.AddRange (type.Assembly.GetTypes ().Where (t => t.IsPublic)); types.AddRange (type.Assembly.GetTypes ().Where (t => t.IsPublic));
if (assemblies != null) { if (assemblies != null) {
foreach (Assembly item in assemblies) { foreach (Assembly item in assemblies) {
if (item == type.Assembly) if (item == type.Assembly)
continue; continue;
types.AddRange (item.GetTypes ().Where (t => t.IsPublic)); types.AddRange (item.GetTypes ().Where (t => t.IsPublic));
} }
} }
var query = from extensionType in types var query = from extensionType in types
where extensionType.IsSealed && !extensionType.IsGenericType && !extensionType.IsNested where extensionType.IsSealed && !extensionType.IsGenericType && !extensionType.IsNested
from method in extensionType.GetMethods (BindingFlags.Static | BindingFlags.Public) from method in extensionType.GetMethods (BindingFlags.Static | BindingFlags.Public)
where method.IsDefined (typeof (ExtensionAttribute), false) where method.IsDefined (typeof (ExtensionAttribute), false)
where method.GetParameters () [0].ParameterType == type where method.GetParameters () [0].ParameterType == type
select method; select method;
return query.ToArray<MethodInfo> (); return query.ToArray<MethodInfo> ();
} }
/// <summary> /// <summary>
/// Extends the System.Type-type to search for a given extended MethodeName. /// Extends the System.Type-type to search for a given extended MethodeName.
/// </summary> /// </summary>
/// <param name="MethodeName">Name of the Methode</param> /// <param name="MethodeName">Name of the Methode</param>
/// <returns>the found Methode or null</returns> /// <returns>the found Methode or null</returns>
public static MethodInfo GetExtensionMethod (this Type t, string name, IEnumerable<Assembly> assemblies = null) public static MethodInfo GetExtensionMethod (this Type t, string name, IEnumerable<Assembly> assemblies = null)
{ {
var mi = from methode in t.GetExtensionMethods (assemblies) var mi = from methode in t.GetExtensionMethods (assemblies)
where methode.Name == name where methode.Name == name
select methode; select methode;
if (!mi.Any<MethodInfo> ()) if (!mi.Any<MethodInfo> ())
return null; return null;
else else
return mi.First<MethodInfo> (); return mi.First<MethodInfo> ();
} }
} }
static class StringExtensions static class StringExtensions
{ {
public static IEnumerable<string> SplitWithEscape (this string input, char separator, char escapeCharacter) public static IEnumerable<string> SplitWithEscape (this string input, char separator, char escapeCharacter)
{ {
int start = 0; int start = 0;
int index = 0; int index = 0;
while (index < input.Length) { while (index < input.Length) {
index = input.IndexOf (separator, index); index = input.IndexOf (separator, index);
if (index == -1) if (index == -1)
break; break;
if (input [index - 1] == escapeCharacter) { if (input [index - 1] == escapeCharacter) {
input = input.Remove (index - 1, 1); input = input.Remove (index - 1, 1);
continue; continue;
} }
yield return input.Substring (start, index - start); yield return input.Substring (start, index - start);
index++; index++;
start = index; start = index;
} }
yield return input.Substring (start); yield return input.Substring (start);
} }
} }
} }
\ No newline at end of file
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
using System; using System;
namespace NLua namespace NLua
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
using System; using System;
namespace NLua namespace NLua
......
...@@ -22,9 +22,9 @@ ...@@ -22,9 +22,9 @@
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
using System; using System;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Reflection; using System.Reflection;
...@@ -101,45 +101,45 @@ namespace NLua ...@@ -101,45 +101,45 @@ namespace NLua
//private object luaLock = new object(); //private object luaLock = new object();
private bool _StatePassed; private bool _StatePassed;
private bool executing; private bool executing;
static string initLuanet = static string initLuanet =
@"local metatable = {} @"local metatable = {}
local rawget = rawget local rawget = rawget
local import_type = luanet.import_type local import_type = luanet.import_type
local load_assembly = luanet.load_assembly local load_assembly = luanet.load_assembly
luanet.error, luanet.type = error, type luanet.error, luanet.type = error, type
-- Lookup a .NET identifier component. -- Lookup a .NET identifier component.
function metatable:__index(key) -- key is e.g. 'Form' function metatable:__index(key) -- key is e.g. 'Form'
-- Get the fully-qualified name, e.g. 'System.Windows.Forms.Form' -- Get the fully-qualified name, e.g. 'System.Windows.Forms.Form'
local fqn = rawget(self,'.fqn') local fqn = rawget(self,'.fqn')
fqn = ((fqn and fqn .. '.') or '') .. key fqn = ((fqn and fqn .. '.') or '') .. key
-- Try to find either a luanet function or a CLR type -- Try to find either a luanet function or a CLR type
local obj = rawget(luanet,key) or import_type(fqn) local obj = rawget(luanet,key) or import_type(fqn)
-- If key is neither a luanet function or a CLR type, then it is simply -- If key is neither a luanet function or a CLR type, then it is simply
-- an identifier component. -- an identifier component.
if obj == nil then if obj == nil then
-- It might be an assembly, so we load it too. -- It might be an assembly, so we load it too.
pcall(load_assembly,fqn) pcall(load_assembly,fqn)
obj = { ['.fqn'] = fqn } obj = { ['.fqn'] = fqn }
setmetatable(obj, metatable) setmetatable(obj, metatable)
end end
-- Cache this lookup -- Cache this lookup
rawset(self, key, obj) rawset(self, key, obj)
return obj return obj
end end
-- A non-type has been called; e.g. foo = System.Foo() -- A non-type has been called; e.g. foo = System.Foo()
function metatable:__call(...) function metatable:__call(...)
error('No such type: ' .. rawget(self,'.fqn'), 2) error('No such type: ' .. rawget(self,'.fqn'), 2)
end end
-- This is the root of the .NET namespace -- This is the root of the .NET namespace
luanet['.fqn'] = false luanet['.fqn'] = false
setmetatable(luanet, metatable) setmetatable(luanet, metatable)
-- Preload the mscorlib assembly -- Preload the mscorlib assembly
luanet.load_assembly('mscorlib')"; luanet.load_assembly('mscorlib')";
static string clr_package = @"--- static string clr_package = @"---
...@@ -267,56 +267,56 @@ end ...@@ -267,56 +267,56 @@ end
return globals; return globals;
} }
} }
#endregion #endregion
public Lua () public Lua ()
{ {
luaState = LuaLib.LuaLNewState (); luaState = LuaLib.LuaLNewState ();
LuaLib.LuaLOpenLibs (luaState); LuaLib.LuaLOpenLibs (luaState);
Init (); Init ();
// We need to keep this in a managed reference so the delegate doesn't get garbage collected // We need to keep this in a managed reference so the delegate doesn't get garbage collected
panicCallback = new LuaNativeFunction (PanicCallback); panicCallback = new LuaNativeFunction (PanicCallback);
LuaLib.LuaAtPanic (luaState, panicCallback); LuaLib.LuaAtPanic (luaState, panicCallback);
} }
/* /*
* CAUTION: NLua.Lua instances can't share the same lua state! * CAUTION: NLua.Lua instances can't share the same lua state!
*/ */
public Lua (LuaState lState) public Lua (LuaState lState)
{ {
LuaLib.LuaPushString (lState, "LUAINTERFACE LOADED"); LuaLib.LuaPushString (lState, "LUAINTERFACE LOADED");
LuaLib.LuaGetTable (lState, (int)LuaIndexes.Registry); LuaLib.LuaGetTable (lState, (int)LuaIndexes.Registry);
if (LuaLib.LuaToBoolean (lState, -1)) { if (LuaLib.LuaToBoolean (lState, -1)) {
LuaLib.LuaSetTop (lState, -2); LuaLib.LuaSetTop (lState, -2);
throw new LuaException ("There is already a NLua.Lua instance associated with this Lua state"); throw new LuaException ("There is already a NLua.Lua instance associated with this Lua state");
} else { } else {
luaState = lState; luaState = lState;
_StatePassed = true; _StatePassed = true;
LuaLib.LuaSetTop (luaState, -2); LuaLib.LuaSetTop (luaState, -2);
Init (); Init ();
} }
} }
void Init () void Init ()
{ {
LuaLib.LuaPushString (luaState, "LUAINTERFACE LOADED"); LuaLib.LuaPushString (luaState, "LUAINTERFACE LOADED");
LuaLib.LuaPushBoolean (luaState, true); LuaLib.LuaPushBoolean (luaState, true);
LuaLib.LuaSetTable (luaState, (int)LuaIndexes.Registry); LuaLib.LuaSetTable (luaState, (int)LuaIndexes.Registry);
if (_StatePassed == false) { if (_StatePassed == false) {
LuaLib.LuaNewTable (luaState); LuaLib.LuaNewTable (luaState);
LuaLib.LuaSetGlobal (luaState, "luanet"); LuaLib.LuaSetGlobal (luaState, "luanet");
} }
LuaLib.LuaNetPushGlobalTable (luaState); LuaLib.LuaNetPushGlobalTable (luaState);
LuaLib.LuaGetGlobal (luaState, "luanet"); LuaLib.LuaGetGlobal (luaState, "luanet");
LuaLib.LuaPushString (luaState, "getmetatable"); LuaLib.LuaPushString (luaState, "getmetatable");
LuaLib.LuaGetGlobal (luaState, "getmetatable"); LuaLib.LuaGetGlobal (luaState, "getmetatable");
LuaLib.LuaSetTable (luaState, -3); LuaLib.LuaSetTable (luaState, -3);
LuaLib.LuaNetPopGlobalTable (luaState); LuaLib.LuaNetPopGlobalTable (luaState);
translator = new ObjectTranslator (this, luaState); translator = new ObjectTranslator (this, luaState);
ObjectTranslatorPool.Instance.Add (luaState, translator); ObjectTranslatorPool.Instance.Add (luaState, translator);
LuaLib.LuaNetPopGlobalTable (luaState); LuaLib.LuaNetPopGlobalTable (luaState);
LuaLib.LuaLDoString (luaState, Lua.initLuanet); LuaLib.LuaLDoString (luaState, Lua.initLuanet);
} }
public void Close () public void Close ()
...@@ -440,68 +440,68 @@ end ...@@ -440,68 +440,68 @@ end
var result = translator.GetFunction (luaState, -1); var result = translator.GetFunction (luaState, -1);
translator.PopValues (luaState, oldTop); translator.PopValues (luaState, oldTop);
return result; return result;
} }
/// <summary> /// <summary>
/// Executes a Lua chunk and returns all the chunk's return values in an array. /// Executes a Lua chunk and returns all the chunk's return values in an array.
/// </summary> /// </summary>
/// <param name = "chunk">Chunk to execute</param> /// <param name = "chunk">Chunk to execute</param>
/// <param name = "chunkName">Name to associate with the chunk. Defaults to "chunk".</param> /// <param name = "chunkName">Name to associate with the chunk. Defaults to "chunk".</param>
/// <returns></returns> /// <returns></returns>
public object[] DoString (byte[] chunk, string chunkName = "chunk") public object[] DoString (byte[] chunk, string chunkName = "chunk")
{ {
int oldTop = LuaLib.LuaGetTop(luaState); int oldTop = LuaLib.LuaGetTop(luaState);
executing = true; executing = true;
if (LuaLib.LuaLLoadBuffer(luaState, chunk, chunkName) == 0) if (LuaLib.LuaLLoadBuffer(luaState, chunk, chunkName) == 0)
{ {
try try
{ {
if (LuaLib.LuaPCall(luaState, 0, -1, 0) == 0) if (LuaLib.LuaPCall(luaState, 0, -1, 0) == 0)
return translator.PopValues(luaState, oldTop); return translator.PopValues(luaState, oldTop);
else else
ThrowExceptionFromError(oldTop); ThrowExceptionFromError(oldTop);
} }
finally finally
{ {
executing = false; executing = false;
} }
} }
else else
ThrowExceptionFromError(oldTop); ThrowExceptionFromError(oldTop);
return null; // Never reached - keeps compiler happy return null; // Never reached - keeps compiler happy
} }
/// <summary> /// <summary>
/// Executes a Lua chunk and returns all the chunk's return values in an array. /// Executes a Lua chunk and returns all the chunk's return values in an array.
/// </summary> /// </summary>
/// <param name = "chunk">Chunk to execute</param> /// <param name = "chunk">Chunk to execute</param>
/// <param name = "chunkName">Name to associate with the chunk. Defaults to "chunk".</param> /// <param name = "chunkName">Name to associate with the chunk. Defaults to "chunk".</param>
/// <returns></returns> /// <returns></returns>
public object[] DoString (string chunk, string chunkName = "chunk") public object[] DoString (string chunk, string chunkName = "chunk")
{ {
int oldTop = LuaLib.LuaGetTop(luaState); int oldTop = LuaLib.LuaGetTop(luaState);
executing = true; executing = true;
if (LuaLib.LuaLLoadBuffer(luaState, chunk, chunkName) == 0) if (LuaLib.LuaLLoadBuffer(luaState, chunk, chunkName) == 0)
{ {
try try
{ {
if (LuaLib.LuaPCall(luaState, 0, -1, 0) == 0) if (LuaLib.LuaPCall(luaState, 0, -1, 0) == 0)
return translator.PopValues(luaState, oldTop); return translator.PopValues(luaState, oldTop);
else else
ThrowExceptionFromError(oldTop); ThrowExceptionFromError(oldTop);
} }
finally finally
{ {
executing = false; executing = false;
} }
} }
else else
ThrowExceptionFromError(oldTop); ThrowExceptionFromError(oldTop);
return null; // Never reached - keeps compiler happy return null; // Never reached - keeps compiler happy
} }
/* /*
...@@ -537,18 +537,18 @@ end ...@@ -537,18 +537,18 @@ end
public object this [string fullPath] { public object this [string fullPath] {
get { get {
object returnValue = null; object returnValue = null;
int oldTop = LuaLib.LuaGetTop (luaState); int oldTop = LuaLib.LuaGetTop (luaState);
string [] path = FullPathToArray (fullPath); string [] path = FullPathToArray (fullPath);
LuaLib.LuaGetGlobal (luaState, path [0]); LuaLib.LuaGetGlobal (luaState, path [0]);
returnValue = translator.GetObject (luaState, -1); returnValue = translator.GetObject (luaState, -1);
LuaBase dispose = null; LuaBase dispose = null;
if (path.Length > 1) { if (path.Length > 1) {
dispose = returnValue as LuaBase; dispose = returnValue as LuaBase;
string[] remainingPath = new string[path.Length - 1]; string[] remainingPath = new string[path.Length - 1];
Array.Copy (path, 1, remainingPath, 0, path.Length - 1); Array.Copy (path, 1, remainingPath, 0, path.Length - 1);
returnValue = GetObject (remainingPath); returnValue = GetObject (remainingPath);
if (dispose != null) if (dispose != null)
dispose.Dispose (); dispose.Dispose ();
} }
...@@ -556,7 +556,7 @@ end ...@@ -556,7 +556,7 @@ end
return returnValue; return returnValue;
} }
set { set {
int oldTop = LuaLib.LuaGetTop (luaState); int oldTop = LuaLib.LuaGetTop (luaState);
string [] path = FullPathToArray (fullPath); string [] path = FullPathToArray (fullPath);
if (path.Length == 1) { if (path.Length == 1) {
translator.Push (luaState, value); translator.Push (luaState, value);
...@@ -804,16 +804,16 @@ end ...@@ -804,16 +804,16 @@ end
LuaLib.LuaSetTable (luaState, -3); LuaLib.LuaSetTable (luaState, -3);
} }
string [] FullPathToArray (string fullPath) string [] FullPathToArray (string fullPath)
{ {
return fullPath.SplitWithEscape ('.', '\\').ToArray (); return fullPath.SplitWithEscape ('.', '\\').ToArray ();
} }
/* /*
* Creates a new table as a global variable or as a field * Creates a new table as a global variable or as a field
* inside an existing table * inside an existing table
*/ */
public void NewTable (string fullPath) public void NewTable (string fullPath)
{ {
string [] path = FullPathToArray (fullPath); string [] path = FullPathToArray (fullPath);
int oldTop = LuaLib.LuaGetTop (luaState); int oldTop = LuaLib.LuaGetTop (luaState);
...@@ -924,14 +924,14 @@ end ...@@ -924,14 +924,14 @@ end
return LuaCore.LuaSetLocal (luaState, luaDebug, n).ToString (); return LuaCore.LuaSetLocal (luaState, luaDebug, n).ToString ();
} }
public int GetStack (int level, ref LuaDebug ar) public int GetStack (int level, ref LuaDebug ar)
{ {
return LuaCore.LuaGetStack (luaState, level,ref ar); return LuaCore.LuaGetStack (luaState, level,ref ar);
} }
public int GetInfo (string what, ref LuaDebug ar) public int GetInfo (string what, ref LuaDebug ar)
{ {
return LuaCore.LuaGetInfo (luaState, what, ref ar); return LuaCore.LuaGetInfo (luaState, what, ref ar);
} }
/// <summary> /// <summary>
...@@ -966,16 +966,16 @@ end ...@@ -966,16 +966,16 @@ end
[MonoTouch.MonoPInvokeCallback (typeof (LuaHook))] [MonoTouch.MonoPInvokeCallback (typeof (LuaHook))]
#endif #endif
[System.Runtime.InteropServices.AllowReversePInvokeCalls] [System.Runtime.InteropServices.AllowReversePInvokeCalls]
#if USE_KOPILUA #if USE_KOPILUA
static void DebugHookCallback (LuaState luaState, LuaDebug debug) static void DebugHookCallback (LuaState luaState, LuaDebug debug)
{ {
#else #else
static void DebugHookCallback (LuaState luaState, IntPtr luaDebug) static void DebugHookCallback (LuaState luaState, IntPtr luaDebug)
{ {
LuaDebug debug = (LuaDebug)System.Runtime.InteropServices.Marshal.PtrToStructure (luaDebug, typeof (LuaDebug)); LuaDebug debug = (LuaDebug)System.Runtime.InteropServices.Marshal.PtrToStructure (luaDebug, typeof (LuaDebug));
#endif #endif
ObjectTranslator translator = ObjectTranslatorPool.Instance.Find (luaState); ObjectTranslator translator = ObjectTranslatorPool.Instance.Find (luaState);
Lua lua = translator.Interpreter; Lua lua = translator.Interpreter;
lua.DebugHookCallbackInternal (luaState, debug); lua.DebugHookCallbackInternal (luaState, debug);
} }
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
using System; using System;
using System.Text; using System.Text;
using System.Collections.Generic; using System.Collections.Generic;
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
using System; using System;
using System.IO; using System.IO;
using NLua.Extensions; using NLua.Extensions;
...@@ -130,12 +130,12 @@ namespace NLua ...@@ -130,12 +130,12 @@ namespace NLua
} }
public static void LuaGetGlobal (LuaState luaState, string name) public static void LuaGetGlobal (LuaState luaState, string name)
{ {
LuaCore.LuaNetGetGlobal (luaState, name); LuaCore.LuaNetGetGlobal (luaState, name);
} }
public static void LuaSetGlobal (LuaState luaState, string name) public static void LuaSetGlobal (LuaState luaState, string name)
{ {
LuaCore.LuaNetSetGlobal (luaState, name); LuaCore.LuaNetSetGlobal (luaState, name);
} }
...@@ -272,11 +272,11 @@ namespace NLua ...@@ -272,11 +272,11 @@ namespace NLua
public static bool LuaIsString (LuaState luaState, int index) public static bool LuaIsString (LuaState luaState, int index)
{ {
return LuaCore.LuaIsString (luaState, index) != 0; return LuaCore.LuaIsString (luaState, index) != 0;
} }
public static bool LuaNetIsStringStrict (LuaState luaState, int index) public static bool LuaNetIsStringStrict (LuaState luaState, int index)
{ {
return LuaCore.LuaNetIsStringStrict (luaState, index) != 0; return LuaCore.LuaNetIsStringStrict (luaState, index) != 0;
} }
public static bool LuaIsCFunction (LuaState luaState, int index) public static bool LuaIsCFunction (LuaState luaState, int index)
...@@ -383,7 +383,7 @@ namespace NLua ...@@ -383,7 +383,7 @@ namespace NLua
} }
public static int LuaLLoadBuffer (LuaState luaState, string buff, string name) public static int LuaLLoadBuffer (LuaState luaState, string buff, string name)
{ {
return LuaCore.LuaNetLoadBuffer (luaState, buff, (uint)0, name); return LuaCore.LuaNetLoadBuffer (luaState, buff, (uint)0, name);
} }
...@@ -400,12 +400,12 @@ namespace NLua ...@@ -400,12 +400,12 @@ namespace NLua
public static bool LuaLCheckMetatable (LuaState luaState, int index) public static bool LuaLCheckMetatable (LuaState luaState, int index)
{ {
return LuaCore.LuaLCheckMetatable (luaState, index); return LuaCore.LuaLCheckMetatable (luaState, index);
} }
public static int LuaNetRegistryIndex () public static int LuaNetRegistryIndex ()
{ {
return LuaCore.LuaNetRegistryIndex (); return LuaCore.LuaNetRegistryIndex ();
} }
public static int LuaNetToNetObject (LuaState luaState, int index) public static int LuaNetToNetObject (LuaState luaState, int index)
{ {
...@@ -452,14 +452,14 @@ namespace NLua ...@@ -452,14 +452,14 @@ namespace NLua
return LuaCore.LuaNetGetTag (); return LuaCore.LuaNetGetTag ();
} }
public static void LuaNetPushGlobalTable (LuaState luaState) public static void LuaNetPushGlobalTable (LuaState luaState)
{ {
LuaCore.LuaNetPushGlobalTable (luaState); LuaCore.LuaNetPushGlobalTable (luaState);
} }
public static void LuaNetPopGlobalTable (LuaState luaState) public static void LuaNetPopGlobalTable (LuaState luaState)
{ {
LuaCore.LuaNetPopGlobalTable (luaState); LuaCore.LuaNetPopGlobalTable (luaState);
} }
} }
} }
\ No newline at end of file
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
using System; using System;
using System.Text; using System.Text;
using System.Collections; using System.Collections;
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
using System; using System;
using System.Text; using System.Text;
using System.Collections.Generic; using System.Collections.Generic;
......
This diff is collapsed.
...@@ -136,31 +136,31 @@ namespace NLua.Method ...@@ -136,31 +136,31 @@ namespace NLua.Method
if (_LastCalledMethod.cachedMethod != null) { // Cached? if (_LastCalledMethod.cachedMethod != null) { // Cached?
int numStackToSkip = isStatic ? 0 : 1; // If this is an instance invoe we will have an extra arg on the stack for the targetObject int numStackToSkip = isStatic ? 0 : 1; // If this is an instance invoe we will have an extra arg on the stack for the targetObject
int numArgsPassed = LuaLib.LuaGetTop (luaState) - numStackToSkip; int numArgsPassed = LuaLib.LuaGetTop (luaState) - numStackToSkip;
MethodBase method = _LastCalledMethod.cachedMethod; MethodBase method = _LastCalledMethod.cachedMethod;
if (numArgsPassed == _LastCalledMethod.argTypes.Length) { // No. of args match? if (numArgsPassed == _LastCalledMethod.argTypes.Length) { // No. of args match?
if (!LuaLib.LuaCheckStack (luaState, _LastCalledMethod.outList.Length + 6)) if (!LuaLib.LuaCheckStack (luaState, _LastCalledMethod.outList.Length + 6))
throw new LuaException ("Lua stack overflow"); throw new LuaException ("Lua stack overflow");
object [] args = _LastCalledMethod.args; object [] args = _LastCalledMethod.args;
try { try {
for (int i = 0; i < _LastCalledMethod.argTypes.Length; i++) { for (int i = 0; i < _LastCalledMethod.argTypes.Length; i++) {
MethodArgs type = _LastCalledMethod.argTypes [i]; MethodArgs type = _LastCalledMethod.argTypes [i];
int index = i + 1 + numStackToSkip; int index = i + 1 + numStackToSkip;
Func<int, object> valueExtractor = (currentParam) => { Func<int, object> valueExtractor = (currentParam) => {
return type.extractValue (luaState, currentParam); return type.extractValue (luaState, currentParam);
}; };
if (_LastCalledMethod.argTypes [i].isParamsArray) { if (_LastCalledMethod.argTypes [i].isParamsArray) {
int count = index - _LastCalledMethod.argTypes.Length; int count = index - _LastCalledMethod.argTypes.Length;
Array paramArray = _Translator.TableToArray (valueExtractor, type.paramsArrayType, index, count); Array paramArray = _Translator.TableToArray (valueExtractor, type.paramsArrayType, index, count);
args [_LastCalledMethod.argTypes [i].index] = paramArray; args [_LastCalledMethod.argTypes [i].index] = paramArray;
} else { } else {
args [type.index] = valueExtractor (index); args [type.index] = valueExtractor (index);
} }
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
using System; using System;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
...@@ -94,8 +94,8 @@ namespace NLua ...@@ -94,8 +94,8 @@ namespace NLua
registerTableFunction = new LuaNativeFunction (ObjectTranslator.RegisterTable); registerTableFunction = new LuaNativeFunction (ObjectTranslator.RegisterTable);
unregisterTableFunction = new LuaNativeFunction (ObjectTranslator.UnregisterTable); unregisterTableFunction = new LuaNativeFunction (ObjectTranslator.UnregisterTable);
getMethodSigFunction = new LuaNativeFunction (ObjectTranslator.GetMethodSignature); getMethodSigFunction = new LuaNativeFunction (ObjectTranslator.GetMethodSignature);
getConstructorSigFunction = new LuaNativeFunction (ObjectTranslator.GetConstructorSignature); getConstructorSigFunction = new LuaNativeFunction (ObjectTranslator.GetConstructorSignature);
ctypeFunction = new LuaNativeFunction (ObjectTranslator.CType); ctypeFunction = new LuaNativeFunction (ObjectTranslator.CType);
enumFromIntFunction = new LuaNativeFunction (ObjectTranslator.EnumFromInt); enumFromIntFunction = new LuaNativeFunction (ObjectTranslator.EnumFromInt);
CreateLuaObjectList (luaState); CreateLuaObjectList (luaState);
...@@ -127,7 +127,7 @@ namespace NLua ...@@ -127,7 +127,7 @@ namespace NLua
*/ */
private void CreateIndexingMetaFunction (LuaState luaState) private void CreateIndexingMetaFunction (LuaState luaState)
{ {
LuaLib.LuaPushString (luaState, "luaNet_indexfunction"); LuaLib.LuaPushString (luaState, "luaNet_indexfunction");
LuaLib.LuaLDoString (luaState, MetaFunctions.LuaIndexFunction); LuaLib.LuaLDoString (luaState, MetaFunctions.LuaIndexFunction);
LuaLib.LuaRawSet (luaState, (int)LuaIndexes.Registry); LuaLib.LuaRawSet (luaState, (int)LuaIndexes.Registry);
} }
...@@ -197,9 +197,9 @@ namespace NLua ...@@ -197,9 +197,9 @@ namespace NLua
LuaLib.LuaSetGlobal (luaState, "get_method_bysig"); LuaLib.LuaSetGlobal (luaState, "get_method_bysig");
LuaLib.LuaPushStdCallCFunction (luaState, getConstructorSigFunction); LuaLib.LuaPushStdCallCFunction (luaState, getConstructorSigFunction);
LuaLib.LuaSetGlobal (luaState, "get_constructor_bysig"); LuaLib.LuaSetGlobal (luaState, "get_constructor_bysig");
LuaLib.LuaPushStdCallCFunction (luaState,ctypeFunction); LuaLib.LuaPushStdCallCFunction (luaState,ctypeFunction);
LuaLib.LuaSetGlobal (luaState,"ctype"); LuaLib.LuaSetGlobal (luaState,"ctype");
LuaLib.LuaPushStdCallCFunction (luaState,enumFromIntFunction); LuaLib.LuaPushStdCallCFunction (luaState,enumFromIntFunction);
LuaLib.LuaSetGlobal(luaState,"enum"); LuaLib.LuaSetGlobal(luaState,"enum");
} }
...@@ -273,40 +273,40 @@ namespace NLua ...@@ -273,40 +273,40 @@ namespace NLua
{ {
try { try {
string assemblyName = LuaLib.LuaToString (luaState, 1).ToString (); string assemblyName = LuaLib.LuaToString (luaState, 1).ToString ();
Assembly assembly = null; Assembly assembly = null;
Exception exception = null; Exception exception = null;
try { try {
assembly = Assembly.Load (assemblyName); assembly = Assembly.Load (assemblyName);
} catch (BadImageFormatException) { } catch (BadImageFormatException) {
// The assemblyName was invalid. It is most likely a path. // The assemblyName was invalid. It is most likely a path.
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
exception = e; exception = e;
} }
#if !SILVERLIGHT #if !SILVERLIGHT
if (assembly == null) { if (assembly == null) {
try { try {
assembly = Assembly.Load (AssemblyName.GetAssemblyName (assemblyName)); assembly = Assembly.Load (AssemblyName.GetAssemblyName (assemblyName));
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
exception = e; exception = e;
} }
if (assembly == null) { if (assembly == null) {
AssemblyName mscor = assemblies [0].GetName (); AssemblyName mscor = assemblies [0].GetName ();
AssemblyName name = new AssemblyName (); AssemblyName name = new AssemblyName ();
name.Name = assemblyName; name.Name = assemblyName;
name.CultureInfo = mscor.CultureInfo; name.CultureInfo = mscor.CultureInfo;
name.Version = mscor.Version; name.Version = mscor.Version;
name.SetPublicKeyToken (mscor.GetPublicKeyToken ()); name.SetPublicKeyToken (mscor.GetPublicKeyToken ());
name.SetPublicKey (mscor.GetPublicKey ()); name.SetPublicKey (mscor.GetPublicKey ());
assembly = Assembly.Load (name); assembly = Assembly.Load (name);
if (assembly != null) if (assembly != null)
exception = null; exception = null;
} }
if (exception != null) if (exception != null)
ThrowError (luaState, exception); ThrowError (luaState, exception);
} }
#endif #endif
if (assembly != null && !assemblies.Contains (assembly)) if (assembly != null && !assemblies.Contains (assembly))
...@@ -327,16 +327,16 @@ namespace NLua ...@@ -327,16 +327,16 @@ namespace NLua
return klass; return klass;
} }
return null; return null;
}
public bool IsExtensionMethodPresent (Type type, string name)
{
return GetExtensionMethod (type, name) != null;
} }
public MethodInfo GetExtensionMethod (Type type, string name) public bool IsExtensionMethodPresent (Type type, string name)
{ {
return type.GetExtensionMethod (name, assemblies); return GetExtensionMethod (type, name) != null;
}
public MethodInfo GetExtensionMethod (Type type, string name)
{
return type.GetExtensionMethod (name, assemblies);
} }
/* /*
...@@ -588,7 +588,7 @@ namespace NLua ...@@ -588,7 +588,7 @@ namespace NLua
return; return;
} }
// Object already in the list of Lua objects? Push the stored reference. // Object already in the list of Lua objects? Push the stored reference.
bool found = (!o.GetType().IsValueType) && objectsBackMap.TryGetValue (o, out index); bool found = (!o.GetType().IsValueType) && objectsBackMap.TryGetValue (o, out index);
if (found) { if (found) {
...@@ -647,8 +647,8 @@ namespace NLua ...@@ -647,8 +647,8 @@ namespace NLua
LuaLib.LuaRawSet (luaState, -3); LuaLib.LuaRawSet (luaState, -3);
LuaLib.LuaPushString (luaState, "__newindex"); LuaLib.LuaPushString (luaState, "__newindex");
LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.NewIndexFunction); LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.NewIndexFunction);
LuaLib.LuaRawSet (luaState, -3); LuaLib.LuaRawSet (luaState, -3);
// Bind C# operator with Lua metamethods (__add, __sub, __mul) // Bind C# operator with Lua metamethods (__add, __sub, __mul)
RegisterOperatorsFunctions (luaState, o.GetType ()); RegisterOperatorsFunctions (luaState, o.GetType ());
} }
} else } else
...@@ -667,52 +667,52 @@ namespace NLua ...@@ -667,52 +667,52 @@ namespace NLua
} }
void RegisterOperatorsFunctions (LuaState luaState, Type type) void RegisterOperatorsFunctions (LuaState luaState, Type type)
{ {
if (type.HasAdditionOpertator ()) { if (type.HasAdditionOpertator ()) {
LuaLib.LuaPushString (luaState, "__add"); LuaLib.LuaPushString (luaState, "__add");
LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.AddFunction); LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.AddFunction);
LuaLib.LuaRawSet (luaState, -3); LuaLib.LuaRawSet (luaState, -3);
} }
if (type.HasSubtractionOpertator ()) { if (type.HasSubtractionOpertator ()) {
LuaLib.LuaPushString (luaState, "__sub"); LuaLib.LuaPushString (luaState, "__sub");
LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.SubtractFunction); LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.SubtractFunction);
LuaLib.LuaRawSet (luaState, -3); LuaLib.LuaRawSet (luaState, -3);
} }
if (type.HasMultiplyOpertator ()) { if (type.HasMultiplyOpertator ()) {
LuaLib.LuaPushString (luaState, "__mul"); LuaLib.LuaPushString (luaState, "__mul");
LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.MultiplyFunction); LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.MultiplyFunction);
LuaLib.LuaRawSet (luaState, -3); LuaLib.LuaRawSet (luaState, -3);
} }
if (type.HasDivisionOpertator ()) { if (type.HasDivisionOpertator ()) {
LuaLib.LuaPushString (luaState, "__div"); LuaLib.LuaPushString (luaState, "__div");
LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.DivisionFunction); LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.DivisionFunction);
LuaLib.LuaRawSet (luaState, -3); LuaLib.LuaRawSet (luaState, -3);
} }
if (type.HasModulusOpertator ()) { if (type.HasModulusOpertator ()) {
LuaLib.LuaPushString (luaState, "__mod"); LuaLib.LuaPushString (luaState, "__mod");
LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.ModulosFunction); LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.ModulosFunction);
LuaLib.LuaRawSet (luaState, -3); LuaLib.LuaRawSet (luaState, -3);
} }
if (type.HasUnaryNegationOpertator ()) { if (type.HasUnaryNegationOpertator ()) {
LuaLib.LuaPushString (luaState, "__unm"); LuaLib.LuaPushString (luaState, "__unm");
LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.UnaryNegationFunction); LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.UnaryNegationFunction);
LuaLib.LuaRawSet (luaState, -3); LuaLib.LuaRawSet (luaState, -3);
} }
if (type.HasEqualityOpertator ()) { if (type.HasEqualityOpertator ()) {
LuaLib.LuaPushString (luaState, "__eq"); LuaLib.LuaPushString (luaState, "__eq");
LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.EqualFunction); LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.EqualFunction);
LuaLib.LuaRawSet (luaState, -3); LuaLib.LuaRawSet (luaState, -3);
} }
if (type.HasLessThanOpertator ()) { if (type.HasLessThanOpertator ()) {
LuaLib.LuaPushString (luaState, "__lt"); LuaLib.LuaPushString (luaState, "__lt");
LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.LessThanFunction); LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.LessThanFunction);
LuaLib.LuaRawSet (luaState, -3); LuaLib.LuaRawSet (luaState, -3);
} }
if (type.HasLessThanOrEqualOpertator ()) { if (type.HasLessThanOrEqualOpertator ()) {
LuaLib.LuaPushString (luaState, "__le"); LuaLib.LuaPushString (luaState, "__le");
LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.LessThanOrEqualFunction); LuaLib.LuaPushStdCallCFunction (luaState, metaFunctions.LessThanOrEqualFunction);
LuaLib.LuaRawSet (luaState, -3); LuaLib.LuaRawSet (luaState, -3);
} }
} }
/* /*
...@@ -735,7 +735,7 @@ namespace NLua ...@@ -735,7 +735,7 @@ namespace NLua
bool found = objects.TryGetValue (udata, out o); bool found = objects.TryGetValue (udata, out o);
// The other variant of collectObject might have gotten here first, in that case we will silently ignore the missing entry // The other variant of collectObject might have gotten here first, in that case we will silently ignore the missing entry
if (found) if (found)
CollectObject (o, udata); CollectObject (o, udata);
} }
...@@ -954,80 +954,80 @@ namespace NLua ...@@ -954,80 +954,80 @@ namespace NLua
return metaFunctions.TableToArray(luaParamValue,paramArrayType, startIndex, count); return metaFunctions.TableToArray(luaParamValue,paramArrayType, startIndex, count);
} }
private Type TypeOf (LuaState luaState, int idx) private Type TypeOf (LuaState luaState, int idx)
{ {
int udata = LuaLib.LuaNetCheckUData (luaState, 1, "luaNet_class"); int udata = LuaLib.LuaNetCheckUData (luaState, 1, "luaNet_class");
if (udata == -1) if (udata == -1)
return null; return null;
ProxyType pt = (ProxyType)objects [udata]; ProxyType pt = (ProxyType)objects [udata];
return pt.UnderlyingSystemType; return pt.UnderlyingSystemType;
} }
static int PushError (LuaState luaState, string msg) static int PushError (LuaState luaState, string msg)
{ {
LuaLib.LuaPushNil (luaState); LuaLib.LuaPushNil (luaState);
LuaLib.LuaPushString (luaState, msg); LuaLib.LuaPushString (luaState, msg);
return 2; return 2;
} }
#if MONOTOUCH #if MONOTOUCH
[MonoTouch.MonoPInvokeCallback (typeof (LuaNativeFunction))] [MonoTouch.MonoPInvokeCallback (typeof (LuaNativeFunction))]
#endif #endif
[System.Runtime.InteropServices.AllowReversePInvokeCalls] [System.Runtime.InteropServices.AllowReversePInvokeCalls]
private static int CType (LuaState luaState) private static int CType (LuaState luaState)
{ {
var translator = ObjectTranslatorPool.Instance.Find (luaState); var translator = ObjectTranslatorPool.Instance.Find (luaState);
return translator.CTypeInternal (luaState); return translator.CTypeInternal (luaState);
} }
int CTypeInternal (LuaState luaState) int CTypeInternal (LuaState luaState)
{ {
Type t = TypeOf (luaState, 1); Type t = TypeOf (luaState, 1);
if (t == null) if (t == null)
return PushError (luaState, "Not a CLR Class"); return PushError (luaState, "Not a CLR Class");
PushObject (luaState, t, "luaNet_metatable"); PushObject (luaState, t, "luaNet_metatable");
return 1; return 1;
} }
#if MONOTOUCH #if MONOTOUCH
[MonoTouch.MonoPInvokeCallback (typeof (LuaNativeFunction))] [MonoTouch.MonoPInvokeCallback (typeof (LuaNativeFunction))]
#endif #endif
[System.Runtime.InteropServices.AllowReversePInvokeCalls] [System.Runtime.InteropServices.AllowReversePInvokeCalls]
private static int EnumFromInt (LuaState luaState) private static int EnumFromInt (LuaState luaState)
{ {
var translator = ObjectTranslatorPool.Instance.Find (luaState); var translator = ObjectTranslatorPool.Instance.Find (luaState);
return translator.EnumFromIntInternal (luaState); return translator.EnumFromIntInternal (luaState);
} }
int EnumFromIntInternal (LuaState luaState) int EnumFromIntInternal (LuaState luaState)
{ {
Type t = TypeOf (luaState, 1); Type t = TypeOf (luaState, 1);
if (t == null || !t.IsEnum) if (t == null || !t.IsEnum)
return PushError (luaState, "Not an Enum."); return PushError (luaState, "Not an Enum.");
object res = null; object res = null;
LuaTypes lt = LuaLib.LuaType (luaState, 2); LuaTypes lt = LuaLib.LuaType (luaState, 2);
if (lt == LuaTypes.Number) { if (lt == LuaTypes.Number) {
int ival = (int)LuaLib.LuaToNumber (luaState, 2); int ival = (int)LuaLib.LuaToNumber (luaState, 2);
res = Enum.ToObject (t, ival); res = Enum.ToObject (t, ival);
} else } else
if (lt == LuaTypes.String) { if (lt == LuaTypes.String) {
string sflags = LuaLib.LuaToString (luaState, 2); string sflags = LuaLib.LuaToString (luaState, 2);
string err = null; string err = null;
try { try {
res = Enum.Parse (t, sflags, true); res = Enum.Parse (t, sflags, true);
} catch (ArgumentException e) { } catch (ArgumentException e) {
err = e.Message; err = e.Message;
} }
if (err != null) if (err != null)
return PushError (luaState, err); return PushError (luaState, err);
} else { } else {
return PushError (luaState, "Second argument must be a integer or a string."); return PushError (luaState, "Second argument must be a integer or a string.");
} }
PushObject (luaState, res, "luaNet_metatable"); PushObject (luaState, res, "luaNet_metatable");
return 1; return 1;
} }
} }
} }
\ No newline at end of file
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
/* /*
* This file is part of NLua. * This file is part of NLua.
* *
...@@ -58,13 +58,13 @@ namespace NLua ...@@ -58,13 +58,13 @@ namespace NLua
} }
public ObjectTranslator Find (LuaState luaState) public ObjectTranslator Find (LuaState luaState)
{ {
if (translators.ContainsKey (luaState)) if (translators.ContainsKey (luaState))
return translators [luaState]; return translators [luaState];
LuaState main = LuaCore.LuaNetGetMainState (luaState); LuaState main = LuaCore.LuaNetGetMainState (luaState);
if (translators.ContainsKey (main)) if (translators.ContainsKey (main))
return translators [main]; return translators [main];
return null; return null;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment