Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
NLua
Commits
b239449e
Commit
b239449e
authored
Dec 29, 2014
by
Isaac Brodsky
Browse files
Fix passing null into LuaFunction
parent
c1b3a950
Changes
4
Show whitespace changes
Inline
Side-by-side
Core/NLua/CheckType.cs
View file @
b239449e
...
...
@@ -154,13 +154,13 @@ namespace NLua
else
if
(
luatype
==
LuaTypes
.
Nil
)
return
extractNetObject
;
// kevinh - silently convert nil to a null string pointer
}
else
if
(
paramType
==
typeof
(
LuaTable
))
{
if
(
luatype
==
LuaTypes
.
Table
)
if
(
luatype
==
LuaTypes
.
Table
||
luatype
==
LuaTypes
.
Nil
)
return
extractValues
[
extractKey
];
}
else
if
(
paramType
==
typeof
(
LuaUserData
))
{
if
(
luatype
==
LuaTypes
.
UserData
)
if
(
luatype
==
LuaTypes
.
UserData
||
luatype
==
LuaTypes
.
Nil
)
return
extractValues
[
extractKey
];
}
else
if
(
paramType
==
typeof
(
LuaFunction
))
{
if
(
luatype
==
LuaTypes
.
Function
)
if
(
luatype
==
LuaTypes
.
Function
||
luatype
==
LuaTypes
.
Nil
)
return
extractValues
[
extractKey
];
}
else
if
(
typeof
(
Delegate
).
IsAssignableFrom
(
paramType
)
&&
luatype
==
LuaTypes
.
Function
)
return
new
ExtractValue
(
new
DelegateGenerator
(
translator
,
paramType
).
ExtractGenerated
);
...
...
Core/NLua/ObjectTranslator.cs
View file @
b239449e
...
...
@@ -830,7 +830,10 @@ namespace NLua
internal
LuaTable
GetTable
(
LuaState
luaState
,
int
index
)
{
LuaLib
.
LuaPushValue
(
luaState
,
index
);
return
new
LuaTable
(
LuaLib
.
LuaRef
(
luaState
,
1
),
interpreter
);
int
reference
=
LuaLib
.
LuaRef
(
luaState
,
1
);
if
(
reference
==
-
1
)
return
null
;
return
new
LuaTable
(
reference
,
interpreter
);
}
/*
...
...
@@ -839,7 +842,10 @@ namespace NLua
internal
LuaUserData
GetUserData
(
LuaState
luaState
,
int
index
)
{
LuaLib
.
LuaPushValue
(
luaState
,
index
);
return
new
LuaUserData
(
LuaLib
.
LuaRef
(
luaState
,
1
),
interpreter
);
int
reference
=
LuaLib
.
LuaRef
(
luaState
,
1
);
if
(
reference
==
-
1
)
return
null
;
return
new
LuaUserData
(
reference
,
interpreter
);
}
/*
...
...
@@ -848,7 +854,10 @@ namespace NLua
internal
LuaFunction
GetFunction
(
LuaState
luaState
,
int
index
)
{
LuaLib
.
LuaPushValue
(
luaState
,
index
);
return
new
LuaFunction
(
LuaLib
.
LuaRef
(
luaState
,
1
),
interpreter
);
int
reference
=
LuaLib
.
LuaRef
(
luaState
,
1
);
if
(
reference
==
-
1
)
return
null
;
return
new
LuaFunction
(
reference
,
interpreter
);
}
/*
...
...
tests/LuaTests.cs
View file @
b239449e
...
...
@@ -153,6 +153,26 @@ namespace NLuaTest
}
}
/*
* Tests passing a LuaFunction
*/
[
Test
]
public
void
CallLuaFunction
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
DoString
(
"function someFunc(v1,v2) return v1 + v2 end"
);
lua
[
"funcObject"
]
=
lua
.
GetFunction
(
"someFunc"
);
lua
.
DoString
(
"luanet.load_assembly('mscorlib')"
);
lua
.
DoString
(
"luanet.load_assembly('NLuaTest')"
);
lua
.
DoString
(
"TestClass=luanet.import_type('NLuaTest.Mock.TestClass')"
);
lua
.
DoString
(
"b = TestClass():TestLuaFunction(funcObject)[0]"
);
Assert
.
AreEqual
(
3
,
lua
[
"b"
]);
lua
.
DoString
(
"a = TestClass():TestLuaFunction(nil)"
);
Assert
.
AreEqual
(
null
,
lua
[
"a"
]);
}
}
/*
* Tests capturing an exception
*/
...
...
tests/TestLua.cs
View file @
b239449e
...
...
@@ -374,11 +374,19 @@ namespace NLuaTest.Mock
set
{
}
}
public
TimeSpan
?
NullableMethod
(
TimeSpan
?
input
)
public
TimeSpan
?
NullableMethod
(
TimeSpan
?
input
)
{
return
input
;
}
public
object
[]
TestLuaFunction
(
LuaFunction
func
)
{
if
(
func
!=
null
)
{
return
func
.
Call
(
1
,
2
);
}
return
null
;
}
public
int
sum
(
int
x
,
int
y
)
{
return
x
+
y
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment