@@ -1116,81 +1116,91 @@ private static IParameterSymbol GetParameterSymbol(IMethodSymbol symbol, Argumen
1116
1116
return parameter ;
1117
1117
}
1118
1118
1119
- private void CheckValueTypeClone ( ITypeSymbol typeSymbol , IdentifierNameSyntax node , ref LuaExpressionSyntax expression ) {
1120
- if ( typeSymbol . IsCustomValueType ( ) /*&& !typeSymbol.IsNullableType()*/ && ! generator_ . IsReadOnlyStruct ( typeSymbol ) ) {
1119
+ private void CheckValueTypeClone ( ITypeSymbol typeSymbol , IdentifierNameSyntax node , ref LuaExpressionSyntax expression , bool isPropertyField = false ) {
1120
+ if ( typeSymbol . IsCustomValueType ( ) && ! generator_ . IsReadOnlyStruct ( typeSymbol ) ) {
1121
1121
bool need = false ;
1122
- switch ( node . Parent . Kind ( ) ) {
1123
- case SyntaxKind . Argument : {
1124
- var argument = ( ArgumentSyntax ) node . Parent ;
1125
- switch ( argument . RefKindKeyword . Kind ( ) ) {
1126
- case SyntaxKind . RefKeyword :
1127
- case SyntaxKind . OutKeyword :
1128
- case SyntaxKind . InKeyword : {
1129
- return ;
1130
- }
1131
- }
1132
-
1133
- var symbol = ( IMethodSymbol ) semanticModel_ . GetSymbolInfo ( argument . Parent . Parent ) . Symbol ;
1134
- if ( symbol != null ) {
1135
- if ( symbol . IsFromAssembly ( ) && ! symbol . ContainingType . IsCollectionType ( ) ) {
1136
- break ;
1137
- }
1138
-
1139
- var parameter = GetParameterSymbol ( symbol , argument ) ;
1140
- if ( parameter . RefKind == RefKind . In ) {
1141
- break ;
1142
- }
1122
+ if ( isPropertyField ) {
1123
+ need = true ;
1124
+ if ( node . Parent . IsKind ( SyntaxKind . SimpleAssignmentExpression ) ) {
1125
+ var assignment = ( AssignmentExpressionSyntax ) node . Parent ;
1126
+ if ( assignment . Left == node ) {
1127
+ need = false ;
1143
1128
}
1144
-
1145
- need = true ;
1146
- break ;
1147
- }
1148
- case SyntaxKind . ReturnStatement : {
1149
- need = true ;
1150
- break ;
1151
1129
}
1152
- case SyntaxKind . SimpleAssignmentExpression : {
1153
- var assignment = ( AssignmentExpressionSyntax ) node . Parent ;
1154
- if ( assignment . Right == node ) {
1155
- var symbol = semanticModel_ . GetSymbolInfo ( assignment . Left ) . Symbol ;
1156
- if ( symbol != null && symbol . IsFromAssembly ( ) ) {
1157
- break ;
1130
+ } else {
1131
+ switch ( node . Parent . Kind ( ) ) {
1132
+ case SyntaxKind . Argument : {
1133
+ var argument = ( ArgumentSyntax ) node . Parent ;
1134
+ switch ( argument . RefKindKeyword . Kind ( ) ) {
1135
+ case SyntaxKind . RefKeyword :
1136
+ case SyntaxKind . OutKeyword :
1137
+ case SyntaxKind . InKeyword : {
1138
+ return ;
1139
+ }
1158
1140
}
1159
1141
1160
- if ( assignment . Left . Kind ( ) . IsTupleDeclaration ( ) ) {
1161
- break ;
1142
+ var symbol = ( IMethodSymbol ) semanticModel_ . GetSymbolInfo ( argument . Parent . Parent ) . Symbol ;
1143
+ if ( symbol != null ) {
1144
+ if ( symbol . IsFromAssembly ( ) && ! symbol . ContainingType . IsCollectionType ( ) ) {
1145
+ break ;
1146
+ }
1147
+
1148
+ var parameter = GetParameterSymbol ( symbol , argument ) ;
1149
+ if ( parameter . RefKind == RefKind . In ) {
1150
+ break ;
1151
+ }
1162
1152
}
1163
1153
1164
1154
need = true ;
1155
+ break ;
1165
1156
}
1166
- break ;
1167
- }
1168
- case SyntaxKind . EqualsValueClause : {
1169
- var equalsValueClause = ( EqualsValueClauseSyntax ) node . Parent ;
1170
- if ( equalsValueClause . Value == node ) {
1157
+ case SyntaxKind . ReturnStatement : {
1171
1158
need = true ;
1159
+ break ;
1172
1160
}
1173
- break ;
1174
- }
1175
- case SyntaxKind . SimpleMemberAccessExpression : {
1176
- var memberAccess = ( MemberAccessExpressionSyntax ) node . Parent ;
1177
- if ( memberAccess . Name == node ) {
1178
- switch ( memberAccess . Parent . Kind ( ) ) {
1179
- case SyntaxKind . EqualsValueClause : {
1180
- need = true ;
1161
+ case SyntaxKind . SimpleAssignmentExpression : {
1162
+ var assignment = ( AssignmentExpressionSyntax ) node . Parent ;
1163
+ if ( assignment . Right == node ) {
1164
+ var symbol = semanticModel_ . GetSymbolInfo ( assignment . Left ) . Symbol ;
1165
+ if ( symbol != null && symbol . IsFromAssembly ( ) ) {
1181
1166
break ;
1182
1167
}
1183
1168
1184
- case SyntaxKind . SimpleAssignmentExpression : {
1185
- var assignment = ( AssignmentExpressionSyntax ) memberAccess . Parent ;
1186
- if ( assignment . Right == memberAccess ) {
1169
+ if ( assignment . Left . Kind ( ) . IsTupleDeclaration ( ) ) {
1170
+ break ;
1171
+ }
1172
+
1173
+ need = true ;
1174
+ }
1175
+ break ;
1176
+ }
1177
+ case SyntaxKind . EqualsValueClause : {
1178
+ var equalsValueClause = ( EqualsValueClauseSyntax ) node . Parent ;
1179
+ if ( equalsValueClause . Value == node ) {
1180
+ need = true ;
1181
+ }
1182
+ break ;
1183
+ }
1184
+ case SyntaxKind . SimpleMemberAccessExpression : {
1185
+ var memberAccess = ( MemberAccessExpressionSyntax ) node . Parent ;
1186
+ if ( memberAccess . Name == node ) {
1187
+ switch ( memberAccess . Parent . Kind ( ) ) {
1188
+ case SyntaxKind . EqualsValueClause : {
1187
1189
need = true ;
1190
+ break ;
1191
+ }
1192
+
1193
+ case SyntaxKind . SimpleAssignmentExpression : {
1194
+ var assignment = ( AssignmentExpressionSyntax ) memberAccess . Parent ;
1195
+ if ( assignment . Right == memberAccess ) {
1196
+ need = true ;
1197
+ }
1198
+ break ;
1188
1199
}
1189
- break ;
1190
1200
}
1191
1201
}
1202
+ break ;
1192
1203
}
1193
- break ;
1194
1204
}
1195
1205
}
1196
1206
0 commit comments