Commit f6a8c49d authored by dpull's avatar dpull
Browse files

test targetObject equals null.(some class override operator ==.)

parent 8bb11599
...@@ -141,10 +141,16 @@ namespace NLua.Method ...@@ -141,10 +141,16 @@ namespace NLua.Method
SetPendingException (null); SetPendingException (null);
if (methodToCall == null) { // Method from name if (methodToCall == null) { // Method from name
if (isStatic) if (isStatic) {
targetObject = null; targetObject = null;
else } else {
targetObject = _ExtractTarget (luaState, 1); targetObject = _ExtractTarget (luaState, 1);
if (targetObject == null || targetObject.Equals(null)) {
_Translator.ThrowError (luaState, String.Format ("instance method '{0}' requires a non null target object", _MethodName));
LuaLib.LuaPushNil (luaState);
return 1;
}
}
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
...@@ -207,12 +213,6 @@ namespace NLua.Method ...@@ -207,12 +213,6 @@ namespace NLua.Method
// System.Diagnostics.Debug.WriteLine("cache miss on " + methodName); // System.Diagnostics.Debug.WriteLine("cache miss on " + methodName);
// If we are running an instance variable, we can now pop the targetObject from the stack // If we are running an instance variable, we can now pop the targetObject from the stack
if (!isStatic) { if (!isStatic) {
if (targetObject == null) {
_Translator.ThrowError (luaState, String.Format ("instance method '{0}' requires a non null target object", _MethodName));
LuaLib.LuaPushNil (luaState);
return 1;
}
LuaLib.LuaRemove (luaState, 1); // Pops the receiver LuaLib.LuaRemove (luaState, 1); // Pops the receiver
} }
...@@ -264,6 +264,11 @@ namespace NLua.Method ...@@ -264,6 +264,11 @@ namespace NLua.Method
} else { } else {
if (!methodToCall.IsStatic && !methodToCall.IsConstructor && targetObject == null) { if (!methodToCall.IsStatic && !methodToCall.IsConstructor && targetObject == null) {
targetObject = _ExtractTarget (luaState, 1); targetObject = _ExtractTarget (luaState, 1);
if (targetObject == null || targetObject.Equals(null)) {
_Translator.ThrowError (luaState, String.Format ("instance method '{0}' requires a non null target object", _MethodName));
LuaLib.LuaPushNil (luaState);
return 1;
}
LuaLib.LuaRemove (luaState, 1); // Pops the receiver LuaLib.LuaRemove (luaState, 1); // Pops the receiver
} }
......
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