mirror of
https://github.com/twiglet/cs2j.git
synced 2025-01-18 13:15:17 +01:00
Handle any 'params' parameter
This commit is contained in:
parent
dc3d4691e4
commit
985368b2e5
@ -3218,11 +3218,14 @@ namespace Twiglet.CS2J.Translator.TypeRep
|
|||||||
paramsTypeStr = paramsTypeStr + "[]";
|
paramsTypeStr = paramsTypeStr + "[]";
|
||||||
|
|
||||||
TypeRepTemplate paramsType = BuildType(paramsTypeStr, AppEnv, new UnknownRepTemplate(paramsTypeStr));
|
TypeRepTemplate paramsType = BuildType(paramsTypeStr, AppEnv, new UnknownRepTemplate(paramsTypeStr));
|
||||||
|
|
||||||
if (argsLength == paramsLength + 1 && args[argsLength - 1].IsA(paramsType,AppEnv))
|
if (argsLength == paramsLength + 1)
|
||||||
{
|
{
|
||||||
// Can pass an array as final argument
|
if (args[argsLength - 1].IsA(paramsType, AppEnv))
|
||||||
return true;
|
{
|
||||||
|
// Can pass an array as final argument
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check additional args against params element type
|
// Check additional args against params element type
|
||||||
|
@ -656,7 +656,7 @@ scope MkNonGeneric {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected CommonTree boxTypesAsRequired(CommonTree fpTree, IList<ParamRepTemplate> fpTemps, IList<CommonTree> boxedTypeTrees, IToken tok) {
|
protected CommonTree boxTypesAsRequired(CommonTree fpTree, IList<ParamRepTemplate> fpTemps, ParamRepTemplate fpTempArray, IList<CommonTree> boxedTypeTrees, IToken tok) {
|
||||||
|
|
||||||
if (fpTree == null) {
|
if (fpTree == null) {
|
||||||
return fpTree;
|
return fpTree;
|
||||||
@ -670,7 +670,9 @@ scope MkNonGeneric {
|
|||||||
// modifying it if necessary
|
// modifying it if necessary
|
||||||
CommonTree child = (CommonTree)adaptor.GetChild(fpTree,i);
|
CommonTree child = (CommonTree)adaptor.GetChild(fpTree,i);
|
||||||
if (adaptor.GetType(child) == TYPE) {
|
if (adaptor.GetType(child) == TYPE) {
|
||||||
if (fpTemps[typeIdx].Type.ForceBoxed && boxedTypeTrees[typeIdx] != null) {
|
if (((typeIdx < fpTemps.Count && fpTemps[typeIdx].Type.ForceBoxed) ||
|
||||||
|
(typeIdx == fpTemps.Count && fpTempArray != null && fpTempArray.Type.ForceBoxed))
|
||||||
|
&& boxedTypeTrees[typeIdx] != null) {
|
||||||
child = boxedTypeTrees[typeIdx];
|
child = boxedTypeTrees[typeIdx];
|
||||||
}
|
}
|
||||||
typeIdx++;
|
typeIdx++;
|
||||||
@ -1117,7 +1119,7 @@ class_member_declaration
|
|||||||
}
|
}
|
||||||
-> ^(METHOD attributes? modifiers? { dupTree(methodTemplate != null && methodTemplate.Return.ForceBoxed && $type.boxedTree != null ? $type.boxedTree : $type.tree) }
|
-> ^(METHOD attributes? modifiers? { dupTree(methodTemplate != null && methodTemplate.Return.ForceBoxed && $type.boxedTree != null ? $type.boxedTree : $type.tree) }
|
||||||
identifier type_parameter_constraints_clauses? type_parameter_list?
|
identifier type_parameter_constraints_clauses? type_parameter_list?
|
||||||
{ methodTemplate != null ? boxTypesAsRequired($formal_parameter_list.tree, methodTemplate.Params, $formal_parameter_list.boxedTypeTrees, $identifier.tree.Token) : dupTree($formal_parameter_list.tree) }
|
{ methodTemplate != null ? boxTypesAsRequired($formal_parameter_list.tree, methodTemplate.Params, methodTemplate.ParamArray, $formal_parameter_list.boxedTypeTrees, $identifier.tree.Token) : dupTree($formal_parameter_list.tree) }
|
||||||
method_body exception*)
|
method_body exception*)
|
||||||
|
|
||||||
| interface_declaration
|
| interface_declaration
|
||||||
@ -2761,7 +2763,7 @@ formal_parameter[ParamRepTemplate pInfo, ParamArrayRepTemplate paInfo] returns [
|
|||||||
}
|
}
|
||||||
:
|
:
|
||||||
attributes? (fixed_parameter[$pInfo] {$paramType = $fixed_parameter.paramType; $boxedTypeTree = $fixed_parameter.boxedTypeTree; }
|
attributes? (fixed_parameter[$pInfo] {$paramType = $fixed_parameter.paramType; $boxedTypeTree = $fixed_parameter.boxedTypeTree; }
|
||||||
| parameter_array[$paInfo] { $boxedTypeTree = $parameter_array.boxedTypeTree; } )
|
| parameter_array[$paInfo] { $paramType = $parameter_array.paramType; $boxedTypeTree = $parameter_array.boxedTypeTree; } )
|
||||||
| '__arglist'; // __arglist is undocumented, see google
|
| '__arglist'; // __arglist is undocumented, see google
|
||||||
|
|
||||||
//fixed_parameters:
|
//fixed_parameters:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user