@@ -111,6 +111,13 @@ public virtual void GenerateTranslationUnitRegistrationFunctionBody(TranslationU
111
111
{
112
112
variable . Visit ( this ) ;
113
113
}
114
+
115
+ var methods = translationUnit . Functions . Where ( method => ! ( method . IsOperator ) ) ;
116
+ var overloads = methods . GroupBy ( m => m . Name ) ;
117
+ foreach ( var overload in overloads )
118
+ {
119
+ GenerateFunctions ( translationUnit , overload . ToList ( ) ) ;
120
+ }
114
121
} ) ;
115
122
}
116
123
@@ -191,6 +198,13 @@ public virtual void GenerateNamespaceDeclarationList(Namespace @namespace, Detac
191
198
{
192
199
GenerateNamespaceFunctions ( @namespace ) ;
193
200
GenerateNamespaceVariables ( @namespace ) ;
201
+
202
+ var methods = @namespace . Functions . Where ( method => ! ( method . IsOperator ) ) ;
203
+ var overloads = methods . GroupBy ( m => m . Name ) ;
204
+ foreach ( var overload in overloads )
205
+ {
206
+ GenerateFunctions ( @namespace , overload . ToList ( ) ) ;
207
+ }
194
208
} ) ;
195
209
}
196
210
@@ -522,9 +536,11 @@ public virtual void GenerateClassDeclDeclarationList(Class @class, DetachmentOpt
522
536
GenerateConstructors ( @class , @class . Constructors ) ;
523
537
524
538
var methods = @class . Methods . Where ( method => ! ( method . IsConstructor || method . IsDestructor || method . IsOperator ) ) ;
525
- var uniqueMethods = methods . GroupBy ( m => m . Name ) ;
526
- foreach ( var group in uniqueMethods )
527
- GenerateMethods ( @class , group . ToList ( ) ) ;
539
+ var overloads = methods . GroupBy ( m => m . Name ) ;
540
+ foreach ( var overload in overloads )
541
+ {
542
+ GenerateMethods ( @class , overload . ToList ( ) ) ;
543
+ }
528
544
529
545
GenerateClassDeclFunctions ( @class ) ;
530
546
GenerateClassDeclVariables ( @class ) ;
@@ -966,6 +982,122 @@ public virtual void GenerateConstructor(Class @class, Method constructor, bool d
966
982
967
983
#endregion
968
984
985
+ #region Function
986
+
987
+ public virtual bool NeedExpansionForFunctions ( Declaration declaration , IEnumerable < Function > functions )
988
+ {
989
+ return false ;
990
+ }
991
+
992
+ public virtual void GenerateFunctions ( Declaration declaration , IEnumerable < Function > functions )
993
+ {
994
+ var isDetach = GenerationContext . PeekIsDetach ( ) ;
995
+
996
+ List < Function > filteredFunctions = functions . Where ( ( function ) => CanGenerateFunction ( function ) ) . ToList ( ) ;
997
+ if ( filteredFunctions . Any ( ) )
998
+ {
999
+ Function function = filteredFunctions . First ( ) ;
1000
+ string functionName = function . Name ;
1001
+ string functionNameQuoted = $ "\" { functionName } \" ";
1002
+ string functionBindingContext = NamingStrategy . GetBindingContext ( function , GenerationContext ) ;
1003
+ string functionContextualName = NamingStrategy . GetContextualName ( function , GenerationContext , FQNOption . IgnoreNone ) ;
1004
+
1005
+ if ( isDetach == DetachmentOption . Forced || isDetach == Utils . FindDetachmentOption ( function ) )
1006
+ {
1007
+
1008
+ if ( isDetach != DetachmentOption . Off )
1009
+ {
1010
+ Write ( $ "{ functionBindingContext } [{ functionNameQuoted } ] = ") ;
1011
+ }
1012
+ else
1013
+ {
1014
+ WriteLine ( "," ) ;
1015
+ Write ( $ "{ functionNameQuoted } , ") ;
1016
+ }
1017
+ if ( filteredFunctions . Count == 1 )
1018
+ {
1019
+ GenerateFunction ( declaration , filteredFunctions . First ( ) ) ;
1020
+ }
1021
+ else
1022
+ {
1023
+ Write ( "::sol::overload(" ) ;
1024
+ Indent ( ) ;
1025
+ for ( int i = 0 ; i < filteredFunctions . Count ; i ++ )
1026
+ {
1027
+ if ( i > 0 )
1028
+ {
1029
+ Write ( "," ) ;
1030
+ }
1031
+ NewLine ( ) ;
1032
+ GenerateFunction ( declaration , filteredFunctions [ i ] ) ;
1033
+ }
1034
+ Unindent ( ) ;
1035
+ NewLine ( ) ;
1036
+ Write ( ")" ) ;
1037
+ }
1038
+ if ( isDetach != DetachmentOption . Off )
1039
+ {
1040
+ WriteLine ( ";" ) ;
1041
+ }
1042
+ }
1043
+ }
1044
+ }
1045
+
1046
+ public virtual bool CanGenerateFunction ( Function function )
1047
+ {
1048
+ if ( AlreadyVisited ( function ) )
1049
+ {
1050
+ return false ;
1051
+ }
1052
+ else if ( function . Access != AccessSpecifier . Public )
1053
+ {
1054
+ return false ;
1055
+ }
1056
+ else if ( ! NonTemplateAllowed )
1057
+ {
1058
+ return false ;
1059
+ }
1060
+ return function . IsGenerated ;
1061
+ }
1062
+
1063
+ public virtual void GenerateFunction ( Declaration declaration , Function function )
1064
+ {
1065
+ {
1066
+ Write ( "static_cast<" ) ;
1067
+ Write ( function . ReturnType . Visit ( new CppTypePrinter ( Context ) ) ) ;
1068
+ Write ( "(" ) ;
1069
+ Write ( "*)" ) ;
1070
+ Write ( "(" ) ;
1071
+ var needsComma = false ;
1072
+ foreach ( var parameter in function . Parameters )
1073
+ {
1074
+ if ( needsComma )
1075
+ {
1076
+ Write ( ", " ) ;
1077
+ }
1078
+ else
1079
+ {
1080
+ needsComma = true ;
1081
+ }
1082
+ Write ( parameter . Type . Visit ( new CppTypePrinter ( Context ) ) ) ;
1083
+ }
1084
+ if ( function . IsVariadic )
1085
+ {
1086
+ if ( needsComma )
1087
+ {
1088
+ Write ( ", " ) ;
1089
+ }
1090
+ Write ( "..." ) ;
1091
+ }
1092
+ Write ( ")" ) ;
1093
+ Write ( ">(&" ) ;
1094
+ Write ( NamingStrategy . GetContextualName ( function , GenerationContext , FQNOption . IgnoreNone ) ) ;
1095
+ Write ( ")" ) ;
1096
+ }
1097
+ }
1098
+
1099
+ #endregion
1100
+
969
1101
#region Method
970
1102
971
1103
public virtual bool NeedExpansionForMethods ( Class @class , IEnumerable < Method > methods )
0 commit comments