public override TreePattern Visit(ExceptionPatternNode node, TreePattern state) { var fields = ImmutableArray <TreeRecordPatternField> .Empty; foreach (var field in node.Fields.Nodes) { fields = fields.Add(new TreeRecordPatternField(field.NameToken.Text, Visit(field.Pattern))); } return(new TreeExceptionPattern(CreateAlias(node), node.NameToken.Text, fields)); }
public override void Visit(ExceptionPatternNode node) { foreach (var field in node.Fields.Nodes) { var name = field.NameToken; if (name.IsMissing) { continue; } var duplicate = false; foreach (var field2 in node.Fields.Nodes) { if (field2 != field && field2.NameToken.Text == name.Text) { duplicate = true; break; } } if (!duplicate) { continue; } Error(field, SyntaxDiagnosticKind.DuplicatePatternField, name.Location, $"Exception field '{name}' is matched multiple times"); } base.Visit(node); var alias = node.Alias; if (alias != null && !alias.NameToken.IsMissing) { _scope.Define(alias.MutKeywordToken != null ? SyntaxSymbolKind.Mutable : SyntaxSymbolKind.Immutable, null, alias, alias.NameToken.Text); } }