diff --git a/Tsu.Trees.RedGreen/sample/Generated/Tsu.Trees.RedGreen/Tsu.Trees.RedGreen.SourceGenerator.Generator/Sample.Internal.g.cs b/Tsu.Trees.RedGreen/sample/Generated/Tsu.Trees.RedGreen/Tsu.Trees.RedGreen.SourceGenerator.Generator/Sample.Internal.g.cs index b95107f..95b2904 100644 --- a/Tsu.Trees.RedGreen/sample/Generated/Tsu.Trees.RedGreen/Tsu.Trees.RedGreen.SourceGenerator.Generator/Sample.Internal.g.cs +++ b/Tsu.Trees.RedGreen/sample/Generated/Tsu.Trees.RedGreen/Tsu.Trees.RedGreen.SourceGenerator.Generator/Sample.Internal.g.cs @@ -1,4 +1,4 @@ -// +// #nullable enable @@ -182,34 +182,6 @@ internal partial class SampleVisitor protected virtual TResult? DefaultVisit(global::Tsu.Trees.RedGreen.Sample.Internal.GreenNode node, T1 arg1, T2 arg2, T3 arg3) => default; } - internal abstract class SampleWalker : global::Tsu.Trees.RedGreen.Sample.Internal.SampleVisitor - { - private int _recursionDepth; - - public override void Visit(global::Tsu.Trees.RedGreen.Sample.Internal.GreenNode? node) - { - if (node != null) - { - _recursionDepth++; - if (_recursionDepth > 30) - { - global::System.Runtime.CompilerServices.RuntimeHelpers.EnsureSufficientExecutionStack(); - } - - node.Accept(this); - - _recursionDepth--; - } - } - - protected override void DefaultVisit(global::Tsu.Trees.RedGreen.Sample.Internal.GreenNode node) - { - foreach (var child in node.ChildNodes()) - { - Visit(child); - } - } - } public partial class SampleRewriter : Tsu.Trees.RedGreen.Sample.SampleVisitor { diff --git a/Tsu.Trees.RedGreen/sample/Generated/Tsu.Trees.RedGreen/Tsu.Trees.RedGreen.SourceGenerator.Generator/Sample.Main.g.cs b/Tsu.Trees.RedGreen/sample/Generated/Tsu.Trees.RedGreen/Tsu.Trees.RedGreen.SourceGenerator.Generator/Sample.Main.g.cs index ee40b99..ee9d0a2 100644 --- a/Tsu.Trees.RedGreen/sample/Generated/Tsu.Trees.RedGreen/Tsu.Trees.RedGreen.SourceGenerator.Generator/Sample.Main.g.cs +++ b/Tsu.Trees.RedGreen/sample/Generated/Tsu.Trees.RedGreen/Tsu.Trees.RedGreen.SourceGenerator.Generator/Sample.Main.g.cs @@ -84,34 +84,6 @@ public partial class SampleVisitor protected virtual TResult? DefaultVisit(global::Tsu.Trees.RedGreen.Sample.SampleNode node, T1 arg1, T2 arg2, T3 arg3) => default; } - public abstract class SampleWalker : global::Tsu.Trees.RedGreen.Sample.SampleVisitor - { - private int _recursionDepth; - - public override void Visit(global::Tsu.Trees.RedGreen.Sample.SampleNode? node) - { - if (node != null) - { - _recursionDepth++; - if (_recursionDepth > 30) - { - global::System.Runtime.CompilerServices.RuntimeHelpers.EnsureSufficientExecutionStack(); - } - - node.Accept(this); - - _recursionDepth--; - } - } - - protected override void DefaultVisit(global::Tsu.Trees.RedGreen.Sample.SampleNode node) - { - foreach (var child in node.ChildNodes()) - { - Visit(child); - } - } - } public partial class SampleRewriter : Tsu.Trees.RedGreen.Sample.SampleVisitor diff --git a/Tsu.Trees.RedGreen/sample/Generated/Tsu.Trees.RedGreen/Tsu.Trees.RedGreen.SourceGenerator.Generator/Sample/Internal/GreenWalker.g.cs b/Tsu.Trees.RedGreen/sample/Generated/Tsu.Trees.RedGreen/Tsu.Trees.RedGreen.SourceGenerator.Generator/Sample/Internal/GreenWalker.g.cs new file mode 100644 index 0000000..581a274 --- /dev/null +++ b/Tsu.Trees.RedGreen/sample/Generated/Tsu.Trees.RedGreen/Tsu.Trees.RedGreen.SourceGenerator.Generator/Sample/Internal/GreenWalker.g.cs @@ -0,0 +1,35 @@ +// + +#nullable enable + +namespace Tsu.Trees.RedGreen.Sample.Internal +{ + internal abstract class SampleWalker : global::Tsu.Trees.RedGreen.Sample.Internal.SampleVisitor + { + private int _recursionDepth; + + public override void Visit(global::Tsu.Trees.RedGreen.Sample.Internal.GreenNode? node) + { + if (node != null) + { + _recursionDepth++; + if (_recursionDepth > 30) + { + global::System.Runtime.CompilerServices.RuntimeHelpers.EnsureSufficientExecutionStack(); + } + + node.Accept(this); + + _recursionDepth--; + } + } + + protected override void DefaultVisit(global::Tsu.Trees.RedGreen.Sample.Internal.GreenNode node) + { + foreach (var child in node.ChildNodes()) + { + Visit(child); + } + } + } +} \ No newline at end of file diff --git a/Tsu.Trees.RedGreen/sample/Generated/Tsu.Trees.RedGreen/Tsu.Trees.RedGreen.SourceGenerator.Generator/Sample/RedWalker.g.cs b/Tsu.Trees.RedGreen/sample/Generated/Tsu.Trees.RedGreen/Tsu.Trees.RedGreen.SourceGenerator.Generator/Sample/RedWalker.g.cs new file mode 100644 index 0000000..03a6383 --- /dev/null +++ b/Tsu.Trees.RedGreen/sample/Generated/Tsu.Trees.RedGreen/Tsu.Trees.RedGreen.SourceGenerator.Generator/Sample/RedWalker.g.cs @@ -0,0 +1,35 @@ +// + +#nullable enable + +namespace Tsu.Trees.RedGreen.Sample +{ + public abstract class SampleWalker : global::Tsu.Trees.RedGreen.Sample.SampleVisitor + { + private int _recursionDepth; + + public override void Visit(global::Tsu.Trees.RedGreen.Sample.SampleNode? node) + { + if (node != null) + { + _recursionDepth++; + if (_recursionDepth > 30) + { + global::System.Runtime.CompilerServices.RuntimeHelpers.EnsureSufficientExecutionStack(); + } + + node.Accept(this); + + _recursionDepth--; + } + } + + protected override void DefaultVisit(global::Tsu.Trees.RedGreen.Sample.SampleNode node) + { + foreach (var child in node.ChildNodes()) + { + Visit(child); + } + } + } +} \ No newline at end of file diff --git a/Tsu.Trees.RedGreen/src/Templates/Internal/GreenWalker.sbn-cs b/Tsu.Trees.RedGreen/src/Templates/Internal/GreenWalker.sbn-cs new file mode 100644 index 0000000..b21316e --- /dev/null +++ b/Tsu.Trees.RedGreen/src/Templates/Internal/GreenWalker.sbn-cs @@ -0,0 +1,35 @@ +// + +#nullable enable + +namespace {{ green_base.namespace_no_global }} +{ + {{ green_base.accessibility }} abstract class {{ suffix }}Walker : {{ green_base.namespace }}.{{ suffix }}Visitor + { + private int _recursionDepth; + + public override void Visit({{ green_base.csharp_no_nullable }}? node) + { + if (node != null) + { + _recursionDepth++; + if (_recursionDepth > 30) + { + global::System.Runtime.CompilerServices.RuntimeHelpers.EnsureSufficientExecutionStack(); + } + + node.Accept(this); + + _recursionDepth--; + } + } + + protected override void DefaultVisit({{ green_base.csharp_no_nullable }} node) + { + foreach (var child in node.ChildNodes()) + { + Visit(child); + } + } + } +} \ No newline at end of file diff --git a/Tsu.Trees.RedGreen/src/Templates/RedWalker.sbn-cs b/Tsu.Trees.RedGreen/src/Templates/RedWalker.sbn-cs new file mode 100644 index 0000000..52fbe8a --- /dev/null +++ b/Tsu.Trees.RedGreen/src/Templates/RedWalker.sbn-cs @@ -0,0 +1,35 @@ +// + +#nullable enable + +namespace {{ red_base.namespace_no_global }} +{ + {{ red_base.accessibility }} abstract class {{ suffix }}Walker : {{ red_base.namespace }}.{{ suffix }}Visitor + { + private int _recursionDepth; + + public override void Visit({{ red_base.csharp_no_nullable }}? node) + { + if (node != null) + { + _recursionDepth++; + if (_recursionDepth > 30) + { + global::System.Runtime.CompilerServices.RuntimeHelpers.EnsureSufficientExecutionStack(); + } + + node.Accept(this); + + _recursionDepth--; + } + } + + protected override void DefaultVisit({{ red_base.csharp_no_nullable }} node) + { + foreach (var child in node.ChildNodes()) + { + Visit(child); + } + } + } +} \ No newline at end of file diff --git a/Tsu.Trees.RedGreen/src/Tsu.Trees.RedGreen.csproj b/Tsu.Trees.RedGreen/src/Tsu.Trees.RedGreen.csproj index 62be549..f7f3755 100644 --- a/Tsu.Trees.RedGreen/src/Tsu.Trees.RedGreen.csproj +++ b/Tsu.Trees.RedGreen/src/Tsu.Trees.RedGreen.csproj @@ -29,6 +29,8 @@ + + diff --git a/Tsu.Trees.RedGreen/src/VisitorGenerator.cs b/Tsu.Trees.RedGreen/src/VisitorGenerator.cs index dff3723..b58dcdd 100644 --- a/Tsu.Trees.RedGreen/src/VisitorGenerator.cs +++ b/Tsu.Trees.RedGreen/src/VisitorGenerator.cs @@ -199,39 +199,7 @@ public static void WriteWalker(this IndentedTextWriter writer, Tree tree, INamed if (!tree.CreateVisitors) { writer.WriteVisitor(tree, baseType, 0); - writer.WriteLineNoTabs(""); } - - writer.WriteLines($$""" - {{baseType.DeclaredAccessibility.ToCSharpString()}} abstract class {{tree.Suffix}}Walker : {{baseType.ContainingNamespace.ToCSharpString(false)}}.{{tree.Suffix}}Visitor - { - private int _recursionDepth; - - public override void Visit({{baseType.ToCSharpString()}}? node) - { - if (node != null) - { - _recursionDepth++; - if (_recursionDepth > 30) - { - global::System.Runtime.CompilerServices.RuntimeHelpers.EnsureSufficientExecutionStack(); - } - - node.Accept(this); - - _recursionDepth--; - } - } - - protected override void DefaultVisit({{baseType.ToCSharpString()}} node) - { - foreach (var child in node.ChildNodes()) - { - Visit(child); - } - } - } - """); } public static void WriteRewriter(this IndentedTextWriter writer, Tree tree, INamedTypeSymbol baseType)