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
d898c805
Commit
d898c805
authored
Sep 15, 2013
by
Vinicius Jarina
Browse files
Fixed vargs method call (params).
parent
0893940d
Changes
3
Show whitespace changes
Inline
Side-by-side
Core/NLua/Metatables.cs
View file @
d898c805
...
...
@@ -828,10 +828,12 @@ namespace NLua
}
internal
Array
TableToArray
(
object
luaParamValue
,
Type
paramArrayType
)
internal
Array
TableToArray
(
Func
<
int
,
object
>
luaParamValue
Extractor
,
Type
paramArrayType
,
int
startIndex
,
int
count
)
{
Array
paramArray
;
var
luaParamValue
=
luaParamValueExtractor
(
startIndex
);
if
(
luaParamValue
is
LuaTable
)
{
LuaTable
table
=
(
LuaTable
)
luaParamValue
;
IDictionaryEnumerator
tableEnumerator
=
table
.
GetEnumerator
();
...
...
@@ -856,8 +858,15 @@ namespace NLua
paramArrayIndex
++;
}
}
else
{
paramArray
=
Array
.
CreateInstance
(
paramArrayType
,
1
);
paramArray
=
Array
.
CreateInstance
(
paramArrayType
,
count
);
paramArray
.
SetValue
(
luaParamValue
,
0
);
for
(
int
i
=
1
;
i
<
count
;
i
++)
{
startIndex
++;
var
value
=
luaParamValueExtractor
(
startIndex
);
paramArray
.
SetValue
(
value
,
i
);
}
}
return
paramArray
;
...
...
@@ -912,9 +921,14 @@ namespace NLua
}
// Type does not match, ignore if the parameter is optional
else
if
(
IsParamsArray
(
luaState
,
currentLuaParam
,
currentNetParam
,
out
extractValue
))
{
object
luaParamValue
=
extractValue
(
luaState
,
currentLuaParam
);
var
paramArrayType
=
currentNetParam
.
ParameterType
.
GetElementType
();
Array
paramArray
=
TableToArray
(
luaParamValue
,
paramArrayType
);
Func
<
int
,
object
>
extractDelegate
=
(
currentParam
)
=>
{
currentLuaParam
++;
return
extractValue
(
luaState
,
currentParam
);
};
int
count
=
(
nLuaParams
-
currentLuaParam
)
+
1
;
Array
paramArray
=
TableToArray
(
extractDelegate
,
paramArrayType
,
currentLuaParam
,
count
);
paramList
.
Add
(
paramArray
);
int
index
=
paramList
.
LastIndexOf
(
paramArray
);
...
...
@@ -924,7 +938,7 @@ namespace NLua
methodArg
.
isParamsArray
=
true
;
methodArg
.
paramsArrayType
=
paramArrayType
;
argTypes
.
Add
(
methodArg
);
currentLuaParam
++;
}
else
if
(
currentNetParam
.
IsOptional
)
paramList
.
Add
(
currentNetParam
.
DefaultValue
);
else
{
// No match
...
...
Core/NLua/Method/LuaMethodWrapper.cs
View file @
d898c805
...
...
@@ -150,13 +150,19 @@ namespace NLua.Method
for
(
int
i
=
0
;
i
<
_LastCalledMethod
.
argTypes
.
Length
;
i
++)
{
MethodArgs
type
=
_LastCalledMethod
.
argTypes
[
i
];
object
luaParamValue
=
type
.
extractValue
(
luaState
,
i
+
1
+
numStackToSkip
);
int
index
=
i
+
1
+
numStackToSkip
;
Func
<
int
,
object
>
valueExtractor
=
(
currentParam
)
=>
{
return
type
.
extractValue
(
luaState
,
currentParam
);
};
if
(
_LastCalledMethod
.
argTypes
[
i
].
isParamsArray
)
{
Array
paramArray
=
_Translator
.
TableToArray
(
luaParamValue
,
type
.
paramsArrayType
);
int
count
=
_LastCalledMethod
.
argTypes
.
Length
-
index
;
Array
paramArray
=
_Translator
.
TableToArray
(
valueExtractor
,
type
.
paramsArrayType
,
index
,
count
);
args
[
_LastCalledMethod
.
argTypes
[
i
].
index
]
=
paramArray
;
}
else
{
args
[
type
.
index
]
=
luaParamValue
;
args
[
type
.
index
]
=
valueExtractor
(
index
)
;
}
if
(
_LastCalledMethod
.
args
[
_LastCalledMethod
.
argTypes
[
i
].
index
]
==
null
&&
...
...
Core/NLua/ObjectTranslator.cs
View file @
d898c805
...
...
@@ -862,8 +862,8 @@ namespace NLua
return
metaFunctions
.
MatchParameters
(
luaState
,
method
,
ref
methodCache
);
}
internal
Array
TableToArray
(
object
luaParamValue
,
Type
paramArrayType
)
{
return
metaFunctions
.
TableToArray
(
luaParamValue
,
paramArrayType
);
internal
Array
TableToArray
(
Func
<
int
,
object
>
luaParamValue
,
Type
paramArrayType
,
int
startIndex
,
int
count
)
{
return
metaFunctions
.
TableToArray
(
luaParamValue
,
paramArrayType
,
startIndex
,
count
);
}
}
}
\ No newline at end of file
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