Skip to content

Commit

Permalink
fix #438
Browse files Browse the repository at this point in the history
  • Loading branch information
yanghuan committed Dec 1, 2023
1 parent 8b0f027 commit a66bd9f
Showing 1 changed file with 19 additions and 12 deletions.
31 changes: 19 additions & 12 deletions CSharp.lua/LuaSyntaxNodeTransform.Object.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ private LuaExpressionSyntax GetObjectCreationInitializer(LuaExpressionSyntax cre
}

public override LuaSyntaxNode VisitObjectCreationExpression(ObjectCreationExpressionSyntax node) {
return VisitObjectCreationExpression(node, node.Type);
}

private LuaSyntaxNode VisitObjectCreationExpression(BaseObjectCreationExpressionSyntax node, TypeSyntax nodeType) {
var constExpression = GetConstExpression(node);
if (constExpression != null) {
return constExpression;
Expand All @@ -85,18 +89,23 @@ public override LuaSyntaxNode VisitObjectCreationExpression(ObjectCreationExpres
string codeTemplate = XmlMetaProvider.GetMethodCodeTemplate(symbol);
if (codeTemplate != null) {
creationExpression = BuildCodeTemplateExpression(codeTemplate, node, FillCodeTemplateInvocationArguments(symbol, node.ArgumentList, null), symbol.TypeArguments);
} else if (node.Type.IsKind(SyntaxKind.NullableType)) {
} else if (nodeType != null && nodeType.IsKind(SyntaxKind.NullableType)) {
Contract.Assert(node.ArgumentList!.Arguments.Count == 1);
var argument = node.ArgumentList.Arguments.First();
return argument.Expression.Accept(this);
} else if (symbol.ContainingType.IsTupleType) {
var expressions = node.ArgumentList!.Arguments.Select(i => i.Expression.AcceptExpression(this));
creationExpression = BuildValueTupleCreateExpression(expressions);
var arguments = node.ArgumentList!.Arguments;
if (arguments.Count == 0) {
creationExpression = GetValueTupleDefaultExpression(symbol.ContainingType);
} else {
var expressions = arguments.Select(i => i.Expression.AcceptExpression(this));
creationExpression = BuildValueTupleCreateExpression(expressions);
}
} else {
creationExpression = GetObjectCreationExpression(symbol, node);
}
} else {
var type = semanticModel_.GetSymbolInfo(node.Type).Symbol;
} else if (nodeType != null) {
var type = semanticModel_.GetSymbolInfo(nodeType).Symbol;
if (type?.Kind == SymbolKind.NamedType) {
var nameType = (INamedTypeSymbol)type;
if (nameType.IsDelegateType()) {
Expand All @@ -107,8 +116,11 @@ public override LuaSyntaxNode VisitObjectCreationExpression(ObjectCreationExpres
}

Contract.Assert(!node.ArgumentList!.Arguments.Any());
var expression = node.Type.AcceptExpression(this);
var expression = nodeType.AcceptExpression(this);
creationExpression = new LuaInvocationExpressionSyntax(expression);
} else {
Contract.Assert(false);
creationExpression = null;
}

return GetObjectCreationInitializer(creationExpression, node);
Expand Down Expand Up @@ -185,12 +197,7 @@ public override LuaSyntaxNode VisitAnonymousObjectCreationExpression(AnonymousOb
}

public override LuaSyntaxNode VisitImplicitObjectCreationExpression(ImplicitObjectCreationExpressionSyntax node) {
var symbol = (IMethodSymbol)semanticModel_.GetSymbolInfo(node).Symbol;
string codeTemplate = XmlMetaProvider.GetMethodCodeTemplate(symbol);
var creationExpression = codeTemplate != null
? BuildCodeTemplateExpression(codeTemplate, node, FillCodeTemplateInvocationArguments(symbol, node.ArgumentList, null), symbol.TypeArguments)
: GetObjectCreationExpression(symbol, node);
return GetObjectCreationInitializer(creationExpression, node);
return VisitObjectCreationExpression(node, null);
}

public override LuaSyntaxNode VisitInitializerExpression(InitializerExpressionSyntax node) {
Expand Down

0 comments on commit a66bd9f

Please sign in to comment.