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
ad9dc280
"build/vscode:/vscode.git/clone" did not exist on "dc0a0618ab2724325db742c0b6180e495a6ce4d0"
Commit
ad9dc280
authored
Mar 29, 2019
by
Vinicius Jarina
Browse files
Fixed integer parameters conversion to method arguments.
* Release 1.4.12
parent
f8d21ae9
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/CheckType.cs
View file @
ad9dc280
using
System
;
using
System
;
using
System.Collections.Generic
;
using
KeraLua
;
using
NLua.Method
;
...
...
@@ -186,38 +186,46 @@ namespace NLua
*/
private
object
GetAsSbyte
(
LuaState
luaState
,
int
stackPos
)
{
sbyte
retVal
=
(
sbyte
)
luaState
.
ToNumber
(
stackPos
);
if
(
retVal
==
0
&&
!
luaState
.
IsNumber
(
stackPos
))
if
(!
luaState
.
IsNumericType
(
stackPos
))
return
null
;
return
retVal
;
if
(
luaState
.
IsInteger
(
stackPos
))
return
(
sbyte
)
luaState
.
ToInteger
(
stackPos
);
return
(
sbyte
)
luaState
.
ToNumber
(
stackPos
);
}
private
object
GetAsByte
(
LuaState
luaState
,
int
stackPos
)
{
byte
retVal
=
(
byte
)
luaState
.
ToNumber
(
stackPos
);
if
(
retVal
==
0
&&
!
luaState
.
IsNumber
(
stackPos
))
if
(!
luaState
.
IsNumericType
(
stackPos
))
return
null
;
return
retVal
;
if
(
luaState
.
IsInteger
(
stackPos
))
return
(
byte
)
luaState
.
ToInteger
(
stackPos
);
return
(
byte
)
luaState
.
ToNumber
(
stackPos
);
}
private
object
GetAsShort
(
LuaState
luaState
,
int
stackPos
)
{
short
retVal
=
(
short
)
luaState
.
ToNumber
(
stackPos
);
if
(
retVal
==
0
&&
!
luaState
.
IsNumber
(
stackPos
))
if
(!
luaState
.
IsNumericType
(
stackPos
))
return
null
;
return
retVal
;
if
(
luaState
.
IsInteger
(
stackPos
))
return
(
short
)
luaState
.
ToInteger
(
stackPos
);
return
(
short
)
luaState
.
ToNumber
(
stackPos
);
}
private
object
GetAsUshort
(
LuaState
luaState
,
int
stackPos
)
{
ushort
retVal
=
(
ushort
)
luaState
.
ToNumber
(
stackPos
);
if
(
retVal
==
0
&&
!
luaState
.
IsNumericType
(
stackPos
))
if
(!
luaState
.
IsNumericType
(
stackPos
))
return
null
;
return
retVal
;
if
(
luaState
.
IsInteger
(
stackPos
))
return
(
ushort
)
luaState
.
ToInteger
(
stackPos
);
return
(
ushort
)
luaState
.
ToNumber
(
stackPos
);
}
private
object
GetAsInt
(
LuaState
luaState
,
int
stackPos
)
...
...
@@ -225,71 +233,87 @@ namespace NLua
if
(!
luaState
.
IsNumericType
(
stackPos
))
return
null
;
int
retVal
=
(
int
)
luaState
.
ToNumber
(
stackPos
);
return
retVal
;
if
(
luaState
.
IsInteger
(
stackPos
))
return
(
int
)
luaState
.
ToInteger
(
stackPos
);
return
(
int
)
luaState
.
ToNumber
(
stackPos
);
}
private
object
GetAsUint
(
LuaState
luaState
,
int
stackPos
)
{
uint
retVal
=
(
uint
)
luaState
.
ToNumber
(
stackPos
);
if
(
retVal
==
0
&&
!
luaState
.
IsNumericType
(
stackPos
))
if
(!
luaState
.
IsNumericType
(
stackPos
))
return
null
;
return
retVal
;
if
(
luaState
.
IsInteger
(
stackPos
))
return
(
uint
)
luaState
.
ToInteger
(
stackPos
);
return
(
uint
)
luaState
.
ToNumber
(
stackPos
);
}
private
object
GetAsLong
(
LuaState
luaState
,
int
stackPos
)
{
long
retVal
=
(
long
)
luaState
.
ToNumber
(
stackPos
);
if
(
retVal
==
0
&&
!
luaState
.
IsNumericType
(
stackPos
))
if
(!
luaState
.
IsNumericType
(
stackPos
))
return
null
;
return
retVal
;
if
(
luaState
.
IsInteger
(
stackPos
))
return
luaState
.
ToInteger
(
stackPos
);
return
(
long
)
luaState
.
ToNumber
(
stackPos
);
}
private
object
GetAsUlong
(
LuaState
luaState
,
int
stackPos
)
{
ulong
retVal
=
(
ulong
)
luaState
.
ToNumber
(
stackPos
);
if
(
retVal
==
0
&&
!
luaState
.
IsNumericType
(
stackPos
))
if
(!
luaState
.
IsNumericType
(
stackPos
))
return
null
;
return
retVal
;
if
(
luaState
.
IsInteger
(
stackPos
))
return
(
ulong
)
luaState
.
ToInteger
(
stackPos
);
return
(
ulong
)
luaState
.
ToNumber
(
stackPos
);
}
private
object
GetAsDouble
(
LuaState
luaState
,
int
stackPos
)
{
double
retVal
=
luaState
.
ToNumber
(
stackPos
);
if
(
retVal
==
0
&&
!
luaState
.
IsNumericType
(
stackPos
))
if
(!
luaState
.
IsNumericType
(
stackPos
))
return
null
;
return
retVal
;
if
(
luaState
.
IsInteger
(
stackPos
))
return
(
double
)
luaState
.
ToInteger
(
stackPos
);
return
luaState
.
ToNumber
(
stackPos
);
}
private
object
GetAsChar
(
LuaState
luaState
,
int
stackPos
)
{
char
retVal
=
(
char
)
luaState
.
ToNumber
(
stackPos
);
if
(
retVal
==
0
&&
!
luaState
.
IsNumericType
(
stackPos
))
if
(!
luaState
.
IsNumericType
(
stackPos
))
return
null
;
return
retVal
;
if
(
luaState
.
IsInteger
(
stackPos
))
return
(
char
)
luaState
.
ToInteger
(
stackPos
);
return
(
char
)
luaState
.
ToNumber
(
stackPos
);
}
private
object
GetAsFloat
(
LuaState
luaState
,
int
stackPos
)
{
float
retVal
=
(
float
)
luaState
.
ToNumber
(
stackPos
);
if
(
retVal
==
0
&&
!
luaState
.
IsNumericType
(
stackPos
))
if
(!
luaState
.
IsNumericType
(
stackPos
))
return
null
;
return
retVal
;
if
(
luaState
.
IsInteger
(
stackPos
))
return
(
float
)
luaState
.
ToInteger
(
stackPos
);
return
(
float
)
luaState
.
ToNumber
(
stackPos
);
}
private
object
GetAsDecimal
(
LuaState
luaState
,
int
stackPos
)
{
decimal
retVal
=
(
decimal
)
luaState
.
ToNumber
(
stackPos
);
if
(
retVal
==
0
&&
!
luaState
.
IsNumericType
(
stackPos
))
if
(!
luaState
.
IsNumericType
(
stackPos
))
return
null
;
return
retVal
;
if
(
luaState
.
IsInteger
(
stackPos
))
return
(
decimal
)
luaState
.
ToInteger
(
stackPos
);
return
(
decimal
)
luaState
.
ToNumber
(
stackPos
);
}
private
object
GetAsBoolean
(
LuaState
luaState
,
int
stackPos
)
...
...
@@ -369,4 +393,4 @@ namespace NLua
return
obj
;
}
}
}
\ No newline at end of file
}
tests/src/LuaTests.cs
View file @
ad9dc280
...
...
@@ -2428,7 +2428,7 @@ namespace NLuaTest
[
Test
]
public
void
PassIntegerToLua
()
{
long
x
=
0x7
0DE
C0DEC0DEC0DE
;
long
x
=
0x7
FFF
C0DEC0DEC0DE
;
using
(
var
lua
=
new
Lua
())
{
...
...
@@ -2436,10 +2436,35 @@ namespace NLuaTest
long
l
=
lua
.
GetLong
(
"x"
);
Assert
.
AreEqual
(
x
,
l
);
Assert
.
AreEqual
(
x
,
l
,
"#1"
);
lua
.
DoString
(
"y = x"
);
l
=
lua
.
GetLong
(
"y"
);
Assert
.
AreEqual
(
x
,
l
,
"#1.1"
);
var
testObj
=
new
TestClass
();
lua
[
"test"
]
=
testObj
;
lua
.
DoString
(
"test:MethodWithLong(x)"
);
Assert
.
AreEqual
(
x
,
testObj
.
LongValue
,
"#2"
);
lua
.
DoString
(
"test:MethodWithLong(0x7FFFC0DEC0DECAFF)"
);
Assert
.
AreEqual
(
0x7FFFC0DEC0DECAFF
,
testObj
.
LongValue
,
"#2.2"
);
lua
.
DoString
(
"y = test:MethodWithLong(0x7FFFC0DECADECAFF)"
);
Assert
.
AreEqual
(
0x7FFFC0DECADECAFF
,
lua
.
GetLong
(
"y"
),
"#2.3"
);
}
}
static
Lua
m_lua
;
...
...
tests/src/TestTypes/TestClass.cs
View file @
ad9dc280
...
...
@@ -8,6 +8,8 @@ namespace NLuaTest.TestTypes
public
int
val
;
private
string
strVal
;
public
long
LongValue
{
get
;
set
;
}
public
TestClass
()
{
val
=
0
;
...
...
@@ -312,7 +314,7 @@ namespace NLuaTest.TestTypes
Console
.
WriteLine
(
output
);
}
static
publ
ic
int
MethodWithParams
(
int
a
,
params
int
[]
others
)
public
stat
ic
int
MethodWithParams
(
int
a
,
params
int
[]
others
)
{
Console
.
WriteLine
(
a
);
int
i
=
0
;
...
...
@@ -324,7 +326,7 @@ namespace NLuaTest.TestTypes
return
i
;
}
static
publ
ic
int
MethodWithObjectParams
(
params
object
[]
others
)
public
stat
ic
int
MethodWithObjectParams
(
params
object
[]
others
)
{
int
i
=
0
;
foreach
(
var
val
in
others
)
...
...
@@ -334,5 +336,12 @@ namespace NLuaTest.TestTypes
}
return
i
;
}
public
long
MethodWithLong
(
long
param
)
{
LongValue
=
param
;
return
param
;
}
}
}
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