Skip to content

Commit

Permalink
fix #50
Browse files Browse the repository at this point in the history
  • Loading branch information
yanghuan committed Jul 9, 2018
1 parent 6621be8 commit af9850a
Showing 1 changed file with 19 additions and 12 deletions.
31 changes: 19 additions & 12 deletions CSharp.lua/LuaSyntaxNodeTransform.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1263,7 +1263,7 @@ private sealed class BlockCommonNode : IComparable<BlockCommonNode> {
}
}

public override LuaSyntaxNode VisitAssignmentExpression(AssignmentExpressionSyntax node) {
private LuaExpressionSyntax InternalVisitAssignmentExpression(AssignmentExpressionSyntax node) {
List<LuaExpressionSyntax> assignments = new List<LuaExpressionSyntax>();

while (true) {
Expand All @@ -1290,6 +1290,22 @@ private sealed class BlockCommonNode : IComparable<BlockCommonNode> {
}
}

public override LuaSyntaxNode VisitAssignmentExpression(AssignmentExpressionSyntax node) {
var assignment = InternalVisitAssignmentExpression(node);
if (node.Parent.IsKind(SyntaxKind.ParenthesizedExpression) || !node.Parent.IsKind(SyntaxKind.ExpressionStatement)) {
CurBlock.Statements.Add(assignment.ToStatement());
if (assignment is LuaLineMultipleExpressionSyntax lineMultipleExpression) {
assignment = lineMultipleExpression.Assignments.Last();
}
if (assignment is LuaAssignmentExpressionSyntax assignmentExpression) {
assignment = assignmentExpression.Left;
} else {
assignment = (LuaExpressionSyntax)node.Left.Accept(this);
}
}
return assignment;
}

private LuaExpressionSyntax BuildInvokeRefOrOut(InvocationExpressionSyntax node, LuaExpressionSyntax invocation, IEnumerable<LuaExpressionSyntax> refOrOutArguments) {
if (node.Parent.IsKind(SyntaxKind.ExpressionStatement)) {
LuaMultipleAssignmentExpressionSyntax multipleAssignment = new LuaMultipleAssignmentExpressionSyntax();
Expand Down Expand Up @@ -2057,16 +2073,7 @@ private sealed class BlockCommonNode : IComparable<BlockCommonNode> {
}

public override LuaSyntaxNode VisitEqualsValueClause(EqualsValueClauseSyntax node) {
ExpressionSyntax value;
if (node.Value.Kind().IsAssignment()) {
var assignmentExpression = (AssignmentExpressionSyntax)node.Value;
var assignment = (LuaExpressionSyntax)VisitAssignmentExpression(assignmentExpression);
CurBlock.Statements.Add(new LuaExpressionStatementSyntax(assignment));
value = assignmentExpression.Left;
} else {
value = node.Value;
}
var expression = (LuaExpressionSyntax)value.Accept(this);
var expression = (LuaExpressionSyntax)node.Value.Accept(this);
return new LuaEqualsValueClauseSyntax(expression);
}

Expand Down Expand Up @@ -2651,8 +2658,8 @@ private sealed class BlockCommonNode : IComparable<BlockCommonNode> {
}

public override LuaSyntaxNode VisitParenthesizedExpression(ParenthesizedExpressionSyntax node) {
CheckPrevIsInvokeStatement();
var expression = (LuaExpressionSyntax)node.Expression.Accept(this);
CheckPrevIsInvokeStatement();
return new LuaParenthesizedExpressionSyntax(expression);
}

Expand Down

0 comments on commit af9850a

Please sign in to comment.