Skip to content

Commit 243c840

Browse files
committed
fix ValueType PropertyField not __clone__
1 parent 744b6cc commit 243c840

File tree

3 files changed

+74
-62
lines changed

3 files changed

+74
-62
lines changed

CSharp.lua/LuaSyntaxNodeTransform.Helper.cs

Lines changed: 66 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,81 +1116,91 @@ private static IParameterSymbol GetParameterSymbol(IMethodSymbol symbol, Argumen
11161116
return parameter;
11171117
}
11181118

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)) {
11211121
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;
11431128
}
1144-
1145-
need = true;
1146-
break;
1147-
}
1148-
case SyntaxKind.ReturnStatement: {
1149-
need = true;
1150-
break;
11511129
}
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+
}
11581140
}
11591141

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+
}
11621152
}
11631153

11641154
need = true;
1155+
break;
11651156
}
1166-
break;
1167-
}
1168-
case SyntaxKind.EqualsValueClause: {
1169-
var equalsValueClause = (EqualsValueClauseSyntax)node.Parent;
1170-
if (equalsValueClause.Value == node) {
1157+
case SyntaxKind.ReturnStatement: {
11711158
need = true;
1159+
break;
11721160
}
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()) {
11811166
break;
11821167
}
11831168

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: {
11871189
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;
11881199
}
1189-
break;
11901200
}
11911201
}
1202+
break;
11921203
}
1193-
break;
11941204
}
11951205
}
11961206

CSharp.lua/LuaSyntaxNodeTransform.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2393,8 +2393,8 @@ private bool IsEventAddOrRemoveIdentifierName(IdentifierNameSyntax node) {
23932393
return false;
23942394
}
23952395

2396-
private LuaExpressionSyntax VisitPropertyOrEventIdentifierName(IdentifierNameSyntax node, ISymbol symbol, bool isProperty) {
2397-
bool isField, isReadOnly;
2396+
private LuaExpressionSyntax VisitPropertyOrEventIdentifierName(IdentifierNameSyntax node, ISymbol symbol, bool isProperty, out bool isField) {
2397+
bool isReadOnly;
23982398
if (isProperty) {
23992399
var propertySymbol = (IPropertySymbol)symbol;
24002400
isField = IsPropertyField(propertySymbol);
@@ -2793,11 +2793,15 @@ LuaIdentifierNameSyntax GetSampleName(ISymbol nodeSymbol) {
27932793
break;
27942794
}
27952795
case SymbolKind.Property: {
2796-
identifier = VisitPropertyOrEventIdentifierName(node, symbol, true);
2796+
var propertyField = (IPropertySymbol)symbol;
2797+
identifier = VisitPropertyOrEventIdentifierName(node, propertyField, true, out bool isField);
2798+
if (isField) {
2799+
CheckValueTypeClone(propertyField.Type, node, ref identifier, true);
2800+
}
27972801
break;
27982802
}
27992803
case SymbolKind.Event: {
2800-
identifier = VisitPropertyOrEventIdentifierName(node, symbol, false);
2804+
identifier = VisitPropertyOrEventIdentifierName(node, symbol, false, out _);
28012805
break;
28022806
}
28032807
case SymbolKind.Discard: {

test/BridgeNetTests/compile-config.bat

Lines changed: 0 additions & 2 deletions
This file was deleted.

0 commit comments

Comments
 (0)