BoundNodeClassWriter.cs (52)
41_typeMap = tree.Types.Where(t => t is not (EnumType or ValueType)).ToDictionary(n => n.Name, n => n.Base);
51_valueTypes.Add(t.Name);
258WriteLine("{0},", FixKeyword(StripBound(node.Name)));
266WriteLine("{0}", FixKeyword(StripBound(node.Name)));
288return !_typeMap.Values.Contains(node.Name);
302WriteLine("internal {2}partial class {0} : {1}", node.Name, node.Base, abstr);
314WriteLine("Partial Friend {1}Class {0}", node.Name, abstr);
422Write("{0} {1}", isPublic ? "public" : "protected", node.Name);
440Write(string.Format("BoundKind.{0}", StripBound(node.Name)));
508Write(string.Format("BoundKind.{0}", StripBound(node.Name)));
568Write("{0} {1}", isPublic ? "public" : "protected", node.Name);
580Write(string.Format("BoundKind.{0}", StripBound(node.Name)));
622Write(string.Format("BoundKind.{0}", StripBound(node.Name)));
721string name = _typeMap[node.Name];
724return _tree.Types.Single(t => t.Name == name);
790throw 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");
830throw new InvalidOperationException($"Field {fieldName} not found in type {node.Name}");
930WriteAccept(node.Name);
961Write("public{1} {0} Update", node.Name, emitNew ? " new" : "");
975Write("var result = new {0}", node.Name);
1014WriteLine(" As {0}", node.Name);
1023Write("Dim result = New {0}", node.Name);
1088WriteLine("case BoundKind.{0}:", FixKeyword(StripBound(node.Name)));
1090WriteLine("return Visit{0}(({1})node, arg);", StripBound(node.Name), node.Name);
1104WriteLine($"public virtual R Visit{StripBound(node.Name)}({node.Name} node, A arg) => this.DefaultVisit(node, arg);");
1113WriteLine($"public virtual BoundNode? Visit{StripBound(node.Name)}({node.Name} node) => this.DefaultVisit(node);");
1131WriteLine("Case BoundKind.{0}", FixKeyword(StripBound(node.Name)));
1133WriteLine("Return Visit{0}(CType(node, {1}), arg)", StripBound(node.Name), node.Name);
1151WriteLine("Public Overridable Function Visit{0}(node As {1}, arg As A) As R", StripBound(node.Name), node.Name);
1166WriteLine(GetVisitFunctionDeclaration(node.Name, isOverride: false));
1195WriteLine($"{GetVisitFunctionDeclaration(node.Name, isOverride: true)} => null;");
1198WriteLine(GetVisitFunctionDeclaration(node.Name, isOverride: true));
1220WriteLine(GetVisitFunctionDeclaration(node.Name, isOverride: true));
1254Write("public override TreeDumperNode Visit{0}({1} node, object? arg) => new TreeDumperNode(\"{2}\", null, ", StripBound(node.Name), node.Name, ToCamelCase(StripBound(node.Name)));
1288if (IsDerivedType("BoundExpression", node.Name))
1325WriteLine("Public Overrides Function Visit{0}(node As {1}, arg As Object) As TreeDumperNode", StripBound(node.Name), node.Name);
1327Write("Return New TreeDumperNode(\"{0}\", Nothing, ", ToCamelCase(StripBound(node.Name)));
1381WriteLine($"{GetVisitFunctionDeclaration(node.Name, isOverride: true)} => node;");
1384WriteLine(GetVisitFunctionDeclaration(node.Name, isOverride: true));
1454WriteLine(GetVisitFunctionDeclaration(node.Name, isOverride: true));
1529var isExpression = IsDerivedType("BoundExpression", node.Name);
1537WriteLine(GetVisitFunctionDeclaration(node.Name, isOverride: true));
1565WriteLine($"{node.Name} updatedNode;");
1604Write($"{(decl ? $"{node.Name} " : "")}updatedNode = ");