示例#1
0
            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));
            }
示例#2
0
                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);
                    }
                }