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
Hide whitespace changes
Inline
Side-by-side
Core/NLua/CheckType.cs
View file @
b239449e
...
@@ -154,13 +154,13 @@ namespace NLua
...
@@ -154,13 +154,13 @@ namespace NLua
else
if
(
luatype
==
LuaTypes
.
Nil
)
else
if
(
luatype
==
LuaTypes
.
Nil
)
return
extractNetObject
;
// kevinh - silently convert nil to a null string pointer
return
extractNetObject
;
// kevinh - silently convert nil to a null string pointer
}
else
if
(
paramType
==
typeof
(
LuaTable
))
{
}
else
if
(
paramType
==
typeof
(
LuaTable
))
{
if
(
luatype
==
LuaTypes
.
Table
)
if
(
luatype
==
LuaTypes
.
Table
||
luatype
==
LuaTypes
.
Nil
)
return
extractValues
[
extractKey
];
return
extractValues
[
extractKey
];
}
else
if
(
paramType
==
typeof
(
LuaUserData
))
{
}
else
if
(
paramType
==
typeof
(
LuaUserData
))
{
if
(
luatype
==
LuaTypes
.
UserData
)
if
(
luatype
==
LuaTypes
.
UserData
||
luatype
==
LuaTypes
.
Nil
)
return
extractValues
[
extractKey
];
return
extractValues
[
extractKey
];
}
else
if
(
paramType
==
typeof
(
LuaFunction
))
{
}
else
if
(
paramType
==
typeof
(
LuaFunction
))
{
if
(
luatype
==
LuaTypes
.
Function
)
if
(
luatype
==
LuaTypes
.
Function
||
luatype
==
LuaTypes
.
Nil
)
return
extractValues
[
extractKey
];
return
extractValues
[
extractKey
];
}
else
if
(
typeof
(
Delegate
).
IsAssignableFrom
(
paramType
)
&&
luatype
==
LuaTypes
.
Function
)
}
else
if
(
typeof
(
Delegate
).
IsAssignableFrom
(
paramType
)
&&
luatype
==
LuaTypes
.
Function
)
return
new
ExtractValue
(
new
DelegateGenerator
(
translator
,
paramType
).
ExtractGenerated
);
return
new
ExtractValue
(
new
DelegateGenerator
(
translator
,
paramType
).
ExtractGenerated
);
...
...
Core/NLua/ObjectTranslator.cs
View file @
b239449e
...
@@ -829,8 +829,11 @@ namespace NLua
...
@@ -829,8 +829,11 @@ namespace NLua
*/
*/
internal
LuaTable
GetTable
(
LuaState
luaState
,
int
index
)
internal
LuaTable
GetTable
(
LuaState
luaState
,
int
index
)
{
{
LuaLib
.
LuaPushValue
(
luaState
,
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
);
}
}
/*
/*
...
@@ -838,8 +841,11 @@ namespace NLua
...
@@ -838,8 +841,11 @@ namespace NLua
*/
*/
internal
LuaUserData
GetUserData
(
LuaState
luaState
,
int
index
)
internal
LuaUserData
GetUserData
(
LuaState
luaState
,
int
index
)
{
{
LuaLib
.
LuaPushValue
(
luaState
,
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
);
}
}
/*
/*
...
@@ -847,8 +853,11 @@ namespace NLua
...
@@ -847,8 +853,11 @@ namespace NLua
*/
*/
internal
LuaFunction
GetFunction
(
LuaState
luaState
,
int
index
)
internal
LuaFunction
GetFunction
(
LuaState
luaState
,
int
index
)
{
{
LuaLib
.
LuaPushValue
(
luaState
,
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
...
@@ -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 capturing an exception
*/
*/
...
...
tests/TestLua.cs
View file @
b239449e
...
@@ -374,11 +374,19 @@ namespace NLuaTest.Mock
...
@@ -374,11 +374,19 @@ namespace NLuaTest.Mock
set
{
}
set
{
}
}
}
public
TimeSpan
?
NullableMethod
(
TimeSpan
?
input
)
public
TimeSpan
?
NullableMethod
(
TimeSpan
?
input
)
{
{
return
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
)
public
int
sum
(
int
x
,
int
y
)
{
{
return
x
+
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