Skip to content

Commit 8c20f3d

Browse files
committed
support nested lambda
1 parent 190578e commit 8c20f3d

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

ExpressionTranslator/ExpressionTranslator.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class ExpressionTranslator : ExpressionVisitor
1717
private const int _tabsize = 4;
1818
private StringWriter _writer;
1919
private int _indentLevel;
20-
private StringWriter _appendWriter;
20+
private List<StringWriter> _appendWriters;
2121

2222
private Dictionary<Type, string> _typeNames;
2323
private HashSet<string> _usings;
@@ -1147,6 +1147,7 @@ private Expression VisitLambda(LambdaExpression node, LambdaType type)
11471147
}
11481148

11491149
private HashSet<LambdaExpression> _visitedLambda;
1150+
private int _writerLevel;
11501151
protected override Expression VisitLambda<T>(Expression<T> node)
11511152
{
11521153
Write(GetName(node));
@@ -1158,14 +1159,17 @@ protected override Expression VisitLambda<T>(Expression<T> node)
11581159
_visitedLambda.Add(node);
11591160

11601161
//switch writer to append writer
1161-
if (_appendWriter == null)
1162-
_appendWriter = new StringWriter();
1162+
if (_appendWriters == null)
1163+
_appendWriters = new List<StringWriter>();
1164+
if (_writerLevel == _appendWriters.Count)
1165+
_appendWriters.Add(new StringWriter());
11631166

11641167
var temp = _writer;
11651168
var oldIndent = _indentLevel;
11661169
try
11671170
{
1168-
_writer = _appendWriter;
1171+
_writer = _appendWriters[_writerLevel];
1172+
_writerLevel++;
11691173
ResetIndentLevel();
11701174

11711175
WriteLine();
@@ -1176,6 +1180,7 @@ protected override Expression VisitLambda<T>(Expression<T> node)
11761180
//switch back
11771181
_writer = temp;
11781182
_indentLevel = oldIndent;
1183+
_writerLevel--;
11791184
}
11801185
}
11811186

@@ -1819,8 +1824,13 @@ public override string ToString()
18191824
WriteLine();
18201825
}
18211826
_writer.Write(temp);
1822-
if (_appendWriter != null)
1823-
_writer.Write(_appendWriter);
1827+
if (_appendWriters != null)
1828+
{
1829+
foreach (var item in _appendWriters)
1830+
{
1831+
_writer.Write(item);
1832+
}
1833+
}
18241834
if (Definitions?.TypeName != null)
18251835
{
18261836
Outdent();

0 commit comments

Comments
 (0)