BoundNodeClassWriter.cs (53)
41_typeMap = tree.Types.Where(t => t is not (EnumType or ValueType)).ToDictionary(n => n.Name, n => n.Base);
51_valueTypes.Add(t.Name);
259WriteLine("{0},", FixKeyword(StripBound(node.Name)));
267WriteLine("{0}", FixKeyword(StripBound(node.Name)));
289return !_typeMap.Values.Contains(node.Name);
303WriteLine("internal {2}partial class {0} : {1}", node.Name, node.Base, abstr);
315WriteLine("Partial Friend {1}Class {0}", node.Name, abstr);
423Write("{0} {1}", isPublic ? "public" : "protected", node.Name);
441Write(string.Format("BoundKind.{0}", StripBound(node.Name)));
509Write(string.Format("BoundKind.{0}", StripBound(node.Name)));
569Write("{0} {1}", isPublic ? "public" : "protected", node.Name);
581Write(string.Format("BoundKind.{0}", StripBound(node.Name)));
623Write(string.Format("BoundKind.{0}", StripBound(node.Name)));
722string name = _typeMap[node.Name];
725return _tree.Types.Single(t => t.Name == name);
791throw new ArgumentException($"Field '{fieldName}' on node '{node.Name}' should have a nullable type, since it isn't a value type and it is marked null=allow or null=always");
831throw new InvalidOperationException($"Field {fieldName} not found in type {node.Name}");
929WriteAccept(node.Name);
960Write("public{1} {0} Update", node.Name, emitNew ? " new" : "");
974Write("var result = new {0}", node.Name);
1013WriteLine(" As {0}", node.Name);
1022Write("Dim result = New {0}", node.Name);
1087WriteLine("case BoundKind.{0}:", FixKeyword(StripBound(node.Name)));
1089WriteLine("return Visit{0}(({1})node, arg);", StripBound(node.Name), node.Name);
1103WriteLine($"public virtual R Visit{StripBound(node.Name)}({node.Name} node, A arg) => this.DefaultVisit(node, arg);");
1112WriteLine($"public virtual BoundNode? Visit{StripBound(node.Name)}({node.Name} node) => this.DefaultVisit(node);");
1130WriteLine("Case BoundKind.{0}", FixKeyword(StripBound(node.Name)));
1132WriteLine("Return Visit{0}(CType(node, {1}), arg)", StripBound(node.Name), node.Name);
1150WriteLine("Public Overridable Function Visit{0}(node As {1}, arg As A) As R", StripBound(node.Name), node.Name);
1165WriteLine(GetVisitFunctionDeclaration(node.Name, isOverride: false));
1194WriteLine($"{GetVisitFunctionDeclaration(node.Name, isOverride: true)} => null;");
1197WriteLine(GetVisitFunctionDeclaration(node.Name, isOverride: true));
1219WriteLine(GetVisitFunctionDeclaration(node.Name, isOverride: true));
1253Write("public override TreeDumperNode Visit{0}({1} node, object? arg) => new TreeDumperNode(\"{2}\", null, ", StripBound(node.Name), node.Name, ToCamelCase(StripBound(node.Name)));
1287if (IsDerivedType("BoundExpression", node.Name))
1324WriteLine("Public Overrides Function Visit{0}(node As {1}, arg As Object) As TreeDumperNode", StripBound(node.Name), node.Name);
1326Write("Return New TreeDumperNode(\"{0}\", Nothing, ", ToCamelCase(StripBound(node.Name)));
1387WriteLine($"BoundKind.{StripBound(node.Name)} => PipelinePhase.{doesNotSurvive},");
1413WriteLine($"{GetVisitFunctionDeclaration(node.Name, isOverride: true)} => node;");
1416WriteLine(GetVisitFunctionDeclaration(node.Name, isOverride: true));
1486WriteLine(GetVisitFunctionDeclaration(node.Name, isOverride: true));
1561var isExpression = IsDerivedType("BoundExpression", node.Name);
1569WriteLine(GetVisitFunctionDeclaration(node.Name, isOverride: true));
1597WriteLine($"{node.Name} updatedNode;");
1636Write($"{(decl ? $"{node.Name} " : "")}updatedNode = ");