LCOV - code coverage report
Current view: top level - gcc/rust/ast - rust-ast-visitor.cc (source / functions) Coverage Total Hit
Test: gcc.info Lines: 92.6 % 935 866
Test Date: 2026-04-20 14:57:17 Functions: 93.7 % 190 178
Legend: Lines:     hit not hit

            Line data    Source code
       1              : // Copyright (C) 2020-2026 Free Software Foundation, Inc.
       2              : 
       3              : // This file is part of GCC.
       4              : 
       5              : // GCC is free software; you can redistribute it and/or modify it under
       6              : // the terms of the GNU General Public License as published by the Free
       7              : // Software Foundation; either version 3, or (at your option) any later
       8              : // version.
       9              : 
      10              : // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      11              : // WARRANTY; without even the implied warranty of MERCHANTABILITY or
      12              : // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      13              : // for more details.
      14              : 
      15              : // You should have received a copy of the GNU General Public License
      16              : // along with GCC; see the file COPYING3.  If not see
      17              : // <http://www.gnu.org/licenses/>.
      18              : 
      19              : #include "rust-ast-visitor.h"
      20              : #include "rust-ast-full-decls.h"
      21              : #include "rust-ast.h"
      22              : #include "rust-builtin-ast-nodes.h"
      23              : #include "rust-path.h"
      24              : #include "rust-token.h"
      25              : #include "rust-expr.h"
      26              : #include "rust-macro.h"
      27              : #include "rust-pattern.h"
      28              : #include "rust-stmt.h"
      29              : #include "rust-type.h"
      30              : 
      31              : namespace Rust {
      32              : namespace AST {
      33              : 
      34              : void
      35        74445 : DefaultASTVisitor::visit (AST::Crate &crate)
      36              : {
      37        74445 :   visit_inner_attrs (crate);
      38       389303 :   for (auto &item : crate.items)
      39       314859 :     visit (item);
      40        74444 : }
      41              : 
      42              : void
      43      1435051 : DefaultASTVisitor::visit (AST::Token &tok)
      44      1435051 : {}
      45              : 
      46              : void
      47       291510 : DefaultASTVisitor::visit (AST::DelimTokenTree &delim_tok_tree)
      48              : {
      49      1811785 :   for (auto &token : delim_tok_tree.get_token_trees ())
      50      1520275 :     visit (token);
      51       291510 : }
      52              : 
      53              : void
      54         6469 : DefaultASTVisitor::visit (AST::AttrInputMetaItemContainer &input)
      55              : {
      56        13095 :   for (auto &item : input.get_items ())
      57         6626 :     visit (item);
      58         6469 : }
      59              : 
      60              : void
      61       455637 : DefaultASTVisitor::visit (AST::IdentifierExpr &ident_expr)
      62              : {
      63       455637 :   visit_outer_attrs (ident_expr);
      64       455637 : }
      65              : 
      66              : void
      67       209238 : DefaultASTVisitor::visit (AST::Lifetime &lifetime)
      68       209238 : {}
      69              : 
      70              : void
      71         3687 : DefaultASTVisitor::visit (AST::LifetimeParam &lifetime_param)
      72              : {
      73         3687 :   visit_outer_attrs (lifetime_param);
      74         3687 :   visit (lifetime_param.get_lifetime ());
      75         3701 :   for (auto &lifetime_bound : lifetime_param.get_lifetime_bounds ())
      76           14 :     visit (lifetime_bound);
      77         3687 : }
      78              : 
      79              : void
      80         1391 : DefaultASTVisitor::visit (AST::ConstGenericParam &const_param)
      81              : {
      82         1391 :   visit_outer_attrs (const_param);
      83         1391 :   if (const_param.has_type ())
      84         1391 :     visit (const_param.get_type ());
      85         1391 :   if (const_param.has_default_value ())
      86          251 :     visit (const_param.get_default_value_unchecked ());
      87         1391 : }
      88              : 
      89              : void
      90       298104 : DefaultASTVisitor::visit (AST::PathInExpression &path)
      91              : {
      92       298104 :   visit_outer_attrs (path);
      93              : 
      94       298104 :   if (!path.is_lang_item ())
      95       702252 :     for (auto &segment : path.get_segments ())
      96       405290 :       visit (segment);
      97       298104 : }
      98              : 
      99              : void
     100      1222481 : DefaultASTVisitor::visit (AST::TypePathSegment &segment)
     101      1222481 : {}
     102              : 
     103              : void
     104          924 : DefaultASTVisitor::visit (GenericArgsBinding &binding)
     105              : {
     106          924 :   visit (binding.get_type ());
     107          924 : }
     108              : 
     109              : void
     110        34775 : DefaultASTVisitor::visit (AST::TypePathSegmentGeneric &segment)
     111              : {
     112        34775 :   if (segment.has_generic_args ())
     113        34763 :     visit (segment.get_generic_args ());
     114        34775 : }
     115              : 
     116              : void
     117          409 : DefaultASTVisitor::visit (AST::TypePathFunction &tpf)
     118              : {
     119          844 :   for (auto &input : tpf.get_params ())
     120          435 :     visit (input);
     121          409 :   if (tpf.has_return_type ())
     122          383 :     visit (tpf.get_return_type ());
     123          409 : }
     124              : 
     125              : void
     126       584860 : DefaultASTVisitor::visit (AST::PathIdentSegment &segment)
     127       584860 : {}
     128              : 
     129              : void
     130          409 : DefaultASTVisitor::visit (AST::TypePathSegmentFunction &segment)
     131              : {
     132          409 :   visit (segment.get_type_path_function ());
     133          409 :   visit (segment.get_ident_segment ());
     134          409 : }
     135              : 
     136              : void
     137        41565 : DefaultASTVisitor::visit (AST::GenericArgs &args)
     138              : {
     139        42009 :   for (auto &lifetime : args.get_lifetime_args ())
     140          444 :     visit (lifetime);
     141              : 
     142        85078 :   for (auto &generic : args.get_generic_args ())
     143        43513 :     visit (generic);
     144              : 
     145        42417 :   for (auto &binding : args.get_binding_args ())
     146          852 :     visit (binding);
     147        41565 : }
     148              : 
     149              : void
     150       459399 : DefaultASTVisitor::visit (AST::PathExprSegment &segment)
     151              : {
     152       459399 :   visit (segment.get_ident_segment ());
     153       459399 :   if (segment.has_generic_args ())
     154        10475 :     visit (segment.get_generic_args ());
     155       459399 : }
     156              : void
     157       933560 : DefaultASTVisitor::visit (AST::TypePath &path)
     158              : {
     159      1897307 :   for (auto &segment : path.get_segments ())
     160       963747 :     visit (segment);
     161       933560 : }
     162              : 
     163              : void
     164         1816 : DefaultASTVisitor::visit (AST::QualifiedPathInExpression &path)
     165              : {
     166         1816 :   visit_outer_attrs (path);
     167         1816 :   visit (path.get_qualified_path_type ());
     168              : 
     169         3632 :   for (auto &segment : path.get_segments ())
     170         1816 :     visit (segment);
     171         1816 : }
     172              : 
     173              : void
     174         6645 : DefaultASTVisitor::visit (AST::QualifiedPathType &path)
     175              : {
     176         6645 :   visit (path.get_type ());
     177         6645 :   if (path.has_as_clause ())
     178         6045 :     visit (path.get_as_type_path ());
     179         6645 : }
     180              : 
     181              : void
     182         5867 : DefaultASTVisitor::visit (AST::QualifiedPathInType &path)
     183              : {
     184         5867 :   visit (path.get_qualified_path_type ());
     185         5867 :   visit (path.get_associated_segment ());
     186              : 
     187         5867 :   for (auto &segment : path.get_segments ())
     188            0 :     visit (segment);
     189         5867 : }
     190              : 
     191              : void
     192      2056493 : DefaultASTVisitor::visit (AST::LiteralExpr &expr)
     193              : {
     194      2056493 :   visit_outer_attrs (expr);
     195      2056493 : }
     196              : 
     197              : void
     198       585537 : DefaultASTVisitor::visit (AST::Attribute &attribute)
     199              : {
     200       585537 :   visit (attribute.get_path ());
     201       585537 :   if (attribute.has_attr_input ())
     202       462555 :     visit (attribute.get_attr_input ());
     203       585537 : }
     204              : 
     205              : void
     206       243238 : DefaultASTVisitor::visit (AST::AttrInputLiteral &attr_input)
     207              : {
     208       243238 :   visit (attr_input.get_literal ());
     209       243238 : }
     210              : 
     211              : void
     212           52 : DefaultASTVisitor::visit (AST::AttrInputExpr &attr_input)
     213              : {
     214           52 :   visit (attr_input.get_expr ());
     215           52 : }
     216              : 
     217              : void
     218            0 : DefaultASTVisitor::visit (AST::MetaItemLitExpr &meta_item)
     219              : {
     220            0 :   visit (meta_item.get_literal ());
     221            0 : }
     222              : 
     223              : void
     224       617422 : DefaultASTVisitor::visit (AST::SimplePathSegment &segment)
     225       617422 : {}
     226              : 
     227              : void
     228       603844 : DefaultASTVisitor::visit (AST::SimplePath &path)
     229              : {
     230      1221266 :   for (auto &segment : path.get_segments ())
     231       617422 :     visit (segment);
     232       603844 : }
     233              : 
     234              : void
     235            1 : DefaultASTVisitor::visit (AST::MetaItemPathExpr &meta_item)
     236              : {
     237            1 :   visit (meta_item.get_path ());
     238            1 :   visit (meta_item.get_expr ());
     239            1 : }
     240              : 
     241              : void
     242        37337 : DefaultASTVisitor::visit (AST::BorrowExpr &expr)
     243              : {
     244        37337 :   visit_outer_attrs (expr);
     245        37337 :   visit (expr.get_borrowed_expr ());
     246        37337 : }
     247              : 
     248              : void
     249        46321 : DefaultASTVisitor::visit (AST::DereferenceExpr &expr)
     250              : {
     251        46321 :   visit_outer_attrs (expr);
     252        46321 :   visit (expr.get_dereferenced_expr ());
     253        46321 : }
     254              : 
     255              : void
     256            9 : DefaultASTVisitor::visit (AST::ErrorPropagationExpr &expr)
     257              : {
     258            9 :   visit_outer_attrs (expr);
     259            9 :   visit (expr.get_propagating_expr ());
     260            9 : }
     261              : 
     262              : void
     263        11782 : DefaultASTVisitor::visit (AST::NegationExpr &expr)
     264              : {
     265        11782 :   visit_outer_attrs (expr);
     266        11782 :   visit (expr.get_negated_expr ());
     267        11782 : }
     268              : 
     269              : void
     270      1631930 : DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr &expr)
     271              : {
     272      1631930 :   visit_outer_attrs (expr);
     273      1631930 :   visit (expr.get_left_expr ());
     274      1631930 :   visit (expr.get_right_expr ());
     275      1631930 : }
     276              : 
     277              : void
     278        57628 : DefaultASTVisitor::visit (AST::ComparisonExpr &expr)
     279              : {
     280        57628 :   visit_outer_attrs (expr);
     281        57628 :   visit (expr.get_left_expr ());
     282        57628 :   visit (expr.get_right_expr ());
     283        57628 : }
     284              : 
     285              : void
     286         5761 : DefaultASTVisitor::visit (AST::LazyBooleanExpr &expr)
     287              : {
     288         5761 :   visit_outer_attrs (expr);
     289         5761 :   visit (expr.get_left_expr ());
     290         5761 :   visit (expr.get_right_expr ());
     291         5761 : }
     292              : 
     293              : void
     294       110836 : DefaultASTVisitor::visit (AST::TypeCastExpr &expr)
     295              : {
     296       110836 :   visit_outer_attrs (expr);
     297       110836 :   visit (expr.get_casted_expr ());
     298       110836 :   visit (expr.get_type_to_cast_to ());
     299       110836 : }
     300              : 
     301              : void
     302        41794 : DefaultASTVisitor::visit (AST::AssignmentExpr &expr)
     303              : {
     304        41794 :   visit_outer_attrs (expr);
     305        41794 :   visit (expr.get_left_expr ());
     306        41794 :   visit (expr.get_right_expr ());
     307        41794 : }
     308              : 
     309              : void
     310        13360 : DefaultASTVisitor::visit (AST::CompoundAssignmentExpr &expr)
     311              : {
     312        13360 :   visit_outer_attrs (expr);
     313        13360 :   visit (expr.get_left_expr ());
     314        13360 :   visit (expr.get_right_expr ());
     315        13360 : }
     316              : 
     317              : void
     318         5835 : DefaultASTVisitor::visit (AST::GroupedExpr &expr)
     319              : {
     320         5835 :   visit_outer_attrs (expr);
     321         5835 :   visit_inner_attrs (expr);
     322         5835 :   visit (expr.get_expr_in_parens ());
     323         5835 : }
     324              : 
     325              : void
     326         3317 : DefaultASTVisitor::visit (AST::ArrayElemsValues &elems)
     327              : {
     328        18971 :   for (auto &value : elems.get_values ())
     329        15654 :     visit (value);
     330         3317 : }
     331              : 
     332              : void
     333         1817 : DefaultASTVisitor::visit (AST::ArrayElemsCopied &elems)
     334              : {
     335         1817 :   visit (elems.get_elem_to_copy ());
     336         1817 :   visit (elems.get_num_copies ());
     337         1817 : }
     338              : 
     339              : void
     340         6298 : DefaultASTVisitor::visit (AST::ArrayExpr &expr)
     341              : {
     342         6298 :   visit_outer_attrs (expr);
     343         6298 :   visit_inner_attrs (expr);
     344         6298 :   visit (expr.get_array_elems ());
     345         6298 : }
     346              : 
     347              : void
     348         4668 : DefaultASTVisitor::visit (AST::ArrayIndexExpr &expr)
     349              : {
     350         4668 :   visit_outer_attrs (expr);
     351         4668 :   visit (expr.get_array_expr ());
     352         4668 :   visit (expr.get_index_expr ());
     353         4668 : }
     354              : 
     355              : void
     356         6276 : DefaultASTVisitor::visit (AST::TupleExpr &expr)
     357              : {
     358         6276 :   visit_outer_attrs (expr);
     359         6276 :   visit_inner_attrs (expr);
     360        17176 :   for (auto &elem : expr.get_tuple_elems ())
     361        10900 :     visit (elem);
     362         6276 : }
     363              : 
     364              : void
     365        15573 : DefaultASTVisitor::visit (AST::TupleIndexExpr &expr)
     366              : {
     367        15573 :   visit_outer_attrs (expr);
     368        15573 :   visit (expr.get_tuple_expr ());
     369        15573 : }
     370              : 
     371              : void
     372         1054 : DefaultASTVisitor::visit (AST::StructExprStruct &expr)
     373              : {
     374         1054 :   visit_outer_attrs (expr);
     375         1054 :   visit_inner_attrs (expr);
     376         1054 :   visit (expr.get_struct_name ());
     377         1054 : }
     378              : 
     379              : void
     380         3905 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifier &field)
     381         3905 : {}
     382              : 
     383              : void
     384        32594 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue &field)
     385              : {
     386        32594 :   visit (field.get_value ());
     387        32594 : }
     388              : 
     389              : void
     390          660 : DefaultASTVisitor::visit (AST::StructExprFieldIndexValue &field)
     391              : {
     392          660 :   visit (field.get_value ());
     393          660 : }
     394              : 
     395              : void
     396          945 : DefaultASTVisitor::visit (AST::StructBase &base)
     397              : {
     398          945 :   visit (base.get_base_struct ());
     399          945 : }
     400              : 
     401              : void
     402        26665 : DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
     403              : {
     404        26665 :   visit_outer_attrs (expr);
     405        26665 :   visit_inner_attrs (expr);
     406        26665 :   visit (expr.get_struct_name ());
     407        26665 :   if (expr.has_struct_base ())
     408         1197 :     visit (expr.get_struct_base ());
     409        73004 :   for (auto &field : expr.get_fields ())
     410        46339 :     visit (field);
     411        26665 : }
     412              : 
     413              : void
     414            0 : DefaultASTVisitor::visit (AST::StructExprStructBase &expr)
     415              : {
     416            0 :   visit_outer_attrs (expr);
     417            0 :   visit_inner_attrs (expr);
     418            0 :   visit (expr.get_struct_name ());
     419            0 :   visit (expr.get_struct_base ());
     420            0 : }
     421              : 
     422              : void
     423       222900 : DefaultASTVisitor::visit (AST::CallExpr &expr)
     424              : {
     425       222900 :   visit_outer_attrs (expr);
     426       222900 :   visit (expr.get_function_expr ());
     427       469965 :   for (auto &param : expr.get_params ())
     428       247065 :     visit (param);
     429       222900 : }
     430              : 
     431              : void
     432        52293 : DefaultASTVisitor::visit (AST::MethodCallExpr &expr)
     433              : {
     434        52293 :   visit_outer_attrs (expr);
     435        52293 :   visit (expr.get_receiver_expr ());
     436        52293 :   visit (expr.get_method_name ());
     437        88442 :   for (auto &param : expr.get_params ())
     438        36149 :     visit (param);
     439        52293 : }
     440              : 
     441              : void
     442        88460 : DefaultASTVisitor::visit (AST::FieldAccessExpr &expr)
     443              : {
     444        88460 :   visit_outer_attrs (expr);
     445        88460 :   visit (expr.get_receiver_expr ());
     446        88460 : }
     447              : 
     448              : void
     449          316 : DefaultASTVisitor::visit (AST::ClosureExprInner &expr)
     450              : {
     451          316 :   visit_outer_attrs (expr);
     452          548 :   for (auto &param : expr.get_params ())
     453          232 :     visit (param);
     454          316 :   visit (expr.get_definition_expr ());
     455          316 : }
     456              : 
     457              : void
     458       374112 : DefaultASTVisitor::visit (AST::BlockExpr &expr)
     459              : {
     460       374112 :   visit_outer_attrs (expr);
     461       374112 :   visit_inner_attrs (expr);
     462              : 
     463       374112 :   if (expr.has_label ())
     464            0 :     visit (expr.get_label ());
     465              : 
     466       736160 :   for (auto &stmt : expr.get_statements ())
     467       362049 :     visit (stmt);
     468              : 
     469       374111 :   if (expr.has_tail_expr ())
     470       269406 :     visit (expr.get_tail_expr ());
     471       374111 : }
     472              : 
     473              : void
     474          257 : DefaultASTVisitor::visit (AST::ConstBlock &expr)
     475              : {
     476          257 :   visit (expr.get_const_expr ());
     477          257 : }
     478              : 
     479              : void
     480        12751 : DefaultASTVisitor::visit (AST::AnonConst &expr)
     481              : {
     482        12751 :   if (!expr.is_deferred ())
     483        12579 :     visit (expr.get_inner_expr ());
     484        12751 : }
     485              : 
     486              : void
     487          270 : DefaultASTVisitor::visit (AST::ClosureExprInnerTyped &expr)
     488              : {
     489          270 :   visit_outer_attrs (expr);
     490          603 :   for (auto &param : expr.get_params ())
     491          333 :     visit (param);
     492          270 :   visit (expr.get_return_type ());
     493          270 :   visit (expr.get_definition_expr ());
     494          270 : }
     495              : 
     496              : void
     497          943 : DefaultASTVisitor::visit (AST::ClosureParam &param)
     498              : {
     499          943 :   visit_outer_attrs (param);
     500          943 :   visit (param.get_pattern ());
     501          943 :   if (param.has_type_given ())
     502          870 :     visit (param.get_type ());
     503          943 : }
     504              : 
     505              : void
     506          187 : DefaultASTVisitor::visit (AST::ContinueExpr &expr)
     507              : {
     508          187 :   visit_outer_attrs (expr);
     509          187 :   if (expr.has_label ())
     510           33 :     visit (expr.get_label_unchecked ());
     511          187 : }
     512              : 
     513              : void
     514         1615 : DefaultASTVisitor::visit (AST::BreakExpr &expr)
     515              : {
     516         1615 :   visit_outer_attrs (expr);
     517         1615 :   if (expr.has_label ())
     518          353 :     visit (expr.get_label_unchecked ());
     519              : 
     520         1615 :   if (expr.has_break_expr ())
     521          490 :     visit (expr.get_break_expr_unchecked ());
     522         1614 : }
     523              : 
     524              : void
     525         1143 : DefaultASTVisitor::visit (AST::RangeFromToExpr &expr)
     526              : {
     527         1143 :   visit (expr.get_from_expr ());
     528         1143 :   visit (expr.get_to_expr ());
     529         1143 : }
     530              : 
     531              : void
     532          105 : DefaultASTVisitor::visit (AST::RangeFromExpr &expr)
     533              : {
     534          105 :   visit (expr.get_from_expr ());
     535          105 : }
     536              : 
     537              : void
     538          105 : DefaultASTVisitor::visit (AST::RangeToExpr &expr)
     539              : {
     540          105 :   visit (expr.get_to_expr ());
     541          105 : }
     542              : 
     543              : void
     544            0 : DefaultASTVisitor::visit (AST::RangeFullExpr &expr)
     545            0 : {}
     546              : 
     547              : void
     548          105 : DefaultASTVisitor::visit (AST::RangeFromToInclExpr &expr)
     549              : {
     550          105 :   visit (expr.get_from_expr ());
     551          105 :   visit (expr.get_to_expr ());
     552          105 : }
     553              : 
     554              : void
     555            0 : DefaultASTVisitor::visit (AST::RangeToInclExpr &expr)
     556              : {
     557            0 :   visit (expr.get_to_expr ());
     558            0 : }
     559              : 
     560              : void
     561         9119 : DefaultASTVisitor::visit (AST::ReturnExpr &expr)
     562              : {
     563         9119 :   visit_outer_attrs (expr);
     564         9119 :   if (expr.has_returned_expr ())
     565         8394 :     visit (expr.get_returned_expr ());
     566         9119 : }
     567              : 
     568              : void
     569            9 : DefaultASTVisitor::visit (AST::TryExpr &expr)
     570              : {
     571            9 :   visit_outer_attrs (expr);
     572            9 :   visit (expr.get_block_expr ());
     573            9 : }
     574              : 
     575              : void
     576           15 : DefaultASTVisitor::visit (AST::BoxExpr &expr)
     577              : {
     578           15 :   visit_outer_attrs (expr);
     579           15 :   visit (expr.get_boxed_expr ());
     580           15 : }
     581              : 
     582              : void
     583        58626 : DefaultASTVisitor::visit (AST::UnsafeBlockExpr &expr)
     584              : {
     585        58626 :   visit_outer_attrs (expr);
     586        58626 :   visit (expr.get_block_expr ());
     587        58626 : }
     588              : 
     589              : void
     590         1070 : DefaultASTVisitor::visit (AST::LoopLabel &label)
     591              : {
     592         1070 :   visit (label.get_lifetime ());
     593         1070 : }
     594              : 
     595              : void
     596         1716 : DefaultASTVisitor::visit (AST::LoopExpr &expr)
     597              : {
     598         1716 :   visit_outer_attrs (expr);
     599         1716 :   if (expr.has_loop_label ())
     600          500 :     visit (expr.get_loop_label ());
     601         1716 :   visit (expr.get_loop_block ());
     602         1716 : }
     603              : 
     604              : void
     605         1456 : DefaultASTVisitor::visit (AST::WhileLoopExpr &expr)
     606              : {
     607         1456 :   visit_outer_attrs (expr);
     608         1456 :   if (expr.has_loop_label ())
     609           28 :     visit (expr.get_loop_label ());
     610         1456 :   visit (expr.get_predicate_expr ());
     611         1456 :   visit (expr.get_loop_block ());
     612         1456 : }
     613              : 
     614              : void
     615           14 : DefaultASTVisitor::visit (AST::WhileLetLoopExpr &expr)
     616              : {
     617           14 :   visit_outer_attrs (expr);
     618           14 :   visit (expr.get_pattern ());
     619              : 
     620           14 :   if (expr.has_loop_label ())
     621            0 :     visit (expr.get_loop_label ());
     622              : 
     623           14 :   visit (expr.get_scrutinee_expr ());
     624           14 :   visit (expr.get_loop_block ());
     625           14 : }
     626              : 
     627              : void
     628          264 : DefaultASTVisitor::visit (AST::ForLoopExpr &expr)
     629              : {
     630          264 :   visit_outer_attrs (expr);
     631          264 :   visit (expr.get_pattern ());
     632          264 :   visit (expr.get_iterator_expr ());
     633          264 :   if (expr.has_loop_label ())
     634            0 :     visit (expr.get_loop_label ());
     635          264 :   visit (expr.get_loop_block ());
     636          264 : }
     637              : 
     638              : void
     639        40414 : DefaultASTVisitor::visit (AST::IfExpr &expr)
     640              : {
     641        40414 :   visit_outer_attrs (expr);
     642        40414 :   visit (expr.get_condition_expr ());
     643        40414 :   visit (expr.get_if_block ());
     644        40414 : }
     645              : 
     646              : void
     647        24953 : DefaultASTVisitor::visit (AST::IfExprConseqElse &expr)
     648              : {
     649        24953 :   visit (reinterpret_cast<AST::IfExpr &> (expr));
     650        24953 :   visit (expr.get_else_block ());
     651        24953 : }
     652              : 
     653              : void
     654          252 : DefaultASTVisitor::visit (AST::IfLetExpr &expr)
     655              : {
     656          252 :   visit_outer_attrs (expr);
     657          252 :   visit (expr.get_pattern ());
     658          252 :   visit (expr.get_value_expr ());
     659          252 :   visit (expr.get_if_block ());
     660          252 : }
     661              : 
     662              : void
     663          126 : DefaultASTVisitor::visit (AST::IfLetExprConseqElse &expr)
     664              : {
     665          126 :   visit (reinterpret_cast<AST::IfLetExpr &> (expr));
     666          126 :   visit (expr.get_else_block ());
     667          126 : }
     668              : 
     669              : void
     670        36039 : DefaultASTVisitor::visit (AST::MatchArm &arm)
     671              : {
     672        36039 :   visit_outer_attrs (arm);
     673        36039 :   visit (arm.get_pattern ());
     674        36039 :   if (arm.has_match_arm_guard ())
     675           12 :     visit (arm.get_guard_expr ());
     676        36039 : }
     677              : 
     678              : void
     679        38545 : DefaultASTVisitor::visit (AST::MatchCase &arm)
     680              : {
     681        38545 :   visit (arm.get_arm ());
     682        38545 :   visit (arm.get_expr ());
     683        38545 : }
     684              : 
     685              : void
     686        16627 : DefaultASTVisitor::visit (AST::MatchExpr &expr)
     687              : {
     688        16627 :   visit_outer_attrs (expr);
     689        16627 :   visit_inner_attrs (expr);
     690        16627 :   visit (expr.get_scrutinee_expr ());
     691        55172 :   for (auto &arm : expr.get_match_cases ())
     692        38545 :     visit (arm);
     693        16627 : }
     694              : 
     695              : void
     696            0 : DefaultASTVisitor::visit (AST::AwaitExpr &expr)
     697              : {
     698            0 :   visit_outer_attrs (expr);
     699            0 :   visit (expr.get_awaited_expr ());
     700            0 : }
     701              : 
     702              : void
     703            0 : DefaultASTVisitor::visit (AST::AsyncBlockExpr &expr)
     704              : {
     705            0 :   visit_outer_attrs (expr);
     706            0 :   visit (expr.get_block_expr ());
     707            0 : }
     708              : 
     709              : void
     710          318 : DefaultASTVisitor::visit (AST::InlineAsm &expr)
     711              : {
     712          318 :   visit_outer_attrs (expr);
     713          318 :   using RegisterType = AST::InlineAsmOperand::RegisterType;
     714          662 :   for (auto &operand : expr.get_operands ())
     715              :     {
     716          344 :       switch (operand.get_register_type ())
     717              :         {
     718          120 :         case RegisterType::In:
     719          120 :           {
     720          120 :             visit (operand.get_in ().expr);
     721          120 :             break;
     722              :           }
     723          200 :         case RegisterType::Out:
     724          200 :           {
     725          200 :             visit (operand.get_out ().expr);
     726          200 :             break;
     727              :           }
     728            0 :         case RegisterType::InOut:
     729            0 :           {
     730            0 :             visit (operand.get_in_out ().expr);
     731            0 :             break;
     732              :           }
     733           24 :         case RegisterType::SplitInOut:
     734           24 :           {
     735           24 :             auto split = operand.get_split_in_out ();
     736           24 :             visit (split.in_expr);
     737           24 :             visit (split.out_expr);
     738           24 :             break;
     739           24 :           }
     740            0 :         case RegisterType::Const:
     741            0 :           {
     742            0 :             visit (operand.get_const ().anon_const.get_inner_expr ());
     743            0 :             break;
     744              :           }
     745            0 :         case RegisterType::Sym:
     746            0 :           {
     747            0 :             visit (operand.get_sym ().expr);
     748            0 :             break;
     749              :           }
     750            0 :         case RegisterType::Label:
     751            0 :           {
     752            0 :             visit (operand.get_label ().expr);
     753            0 :             break;
     754              :           }
     755              :         }
     756          318 :     }
     757          318 : }
     758              : 
     759              : void
     760           24 : DefaultASTVisitor::visit (AST::LlvmInlineAsm &expr)
     761              : {
     762           24 :   for (auto &output : expr.get_outputs ())
     763            0 :     visit (output.expr);
     764              : 
     765           48 :   for (auto &input : expr.get_inputs ())
     766           24 :     visit (input.expr);
     767           24 : }
     768              : 
     769              : void
     770       126419 : DefaultASTVisitor::visit (AST::TypeParam &param)
     771              : {
     772       126419 :   visit_outer_attrs (param);
     773       138681 :   for (auto &bound : param.get_type_param_bounds ())
     774        12262 :     visit (bound);
     775       126419 :   if (param.has_type ())
     776         5648 :     visit (param.get_type ());
     777       126419 : }
     778              : 
     779              : void
     780           32 : DefaultASTVisitor::visit (AST::LifetimeWhereClauseItem &item)
     781              : {
     782           32 :   visit (item.get_lifetime ());
     783           64 :   for (auto &bound : item.get_lifetime_bounds ())
     784           32 :     visit (bound);
     785           32 : }
     786              : 
     787              : void
     788         5109 : DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
     789              : {
     790         5226 :   for (auto &lifetime : item.get_for_lifetimes ())
     791          117 :     visit (lifetime);
     792         5109 :   visit (item.get_type ());
     793        10218 :   for (auto &param : item.get_type_param_bounds ())
     794         5109 :     visit (param);
     795         5109 : }
     796              : 
     797              : void
     798       749834 : DefaultASTVisitor::visit (AST::Visibility &vis)
     799              : {
     800       749834 :   if (vis.has_path ())
     801         1269 :     visit (vis.get_path ());
     802       749834 : }
     803              : 
     804              : void
     805       350237 : DefaultASTVisitor::visit (AST::FunctionQualifiers &qualifiers)
     806       350237 : {}
     807              : 
     808              : void
     809         6079 : DefaultASTVisitor::visit (AST::WhereClause &where)
     810              : {
     811        12389 :   for (auto &item : where.get_items ())
     812         6310 :     visit (item);
     813         6079 : }
     814              : void
     815       172471 : DefaultASTVisitor::visit (AST::FunctionParam &param)
     816              : {
     817       172471 :   visit_outer_attrs (param);
     818       172471 :   if (param.has_name ())
     819       172471 :     visit (param.get_pattern ());
     820              : 
     821       172471 :   visit (param.get_type ());
     822       172471 : }
     823              : 
     824              : void
     825       132621 : DefaultASTVisitor::visit (AST::SelfParam &param)
     826              : {
     827       132621 :   visit_outer_attrs (param);
     828              : 
     829       132621 :   if (param.has_lifetime ())
     830        76579 :     visit (param.get_lifetime ());
     831              : 
     832       132621 :   if (param.has_type ())
     833           15 :     visit (param.get_type ());
     834       132621 : }
     835              : 
     836              : void
     837        18118 : DefaultASTVisitor::visit (AST::Module &module)
     838              : {
     839        18118 :   visit_outer_attrs (module);
     840        18118 :   visit (module.get_visibility ());
     841        18118 :   visit_inner_attrs (module);
     842        78182 :   for (auto &item : module.get_items ())
     843        60064 :     visit (item);
     844        18118 : }
     845              : 
     846              : void
     847          234 : DefaultASTVisitor::visit (AST::ExternCrate &crate)
     848              : {
     849          234 :   visit_outer_attrs (crate);
     850          234 :   visit (crate.get_visibility ());
     851          234 : }
     852              : 
     853              : void
     854          133 : DefaultASTVisitor::visit (AST::UseTreeGlob &use_tree)
     855              : {
     856          133 :   visit (use_tree.get_path ());
     857          133 : }
     858              : 
     859              : void
     860         2146 : DefaultASTVisitor::visit (AST::UseTreeList &use_tree)
     861              : {
     862         2146 :   visit (use_tree.get_path ());
     863         2146 : }
     864              : 
     865              : void
     866         6810 : DefaultASTVisitor::visit (AST::UseTreeRebind &use_tree)
     867              : {
     868         6810 :   visit (use_tree.get_path ());
     869         6810 : }
     870              : 
     871              : void
     872         9103 : DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
     873              : {
     874         9103 :   visit (use_decl.get_visibility ());
     875         9103 :   visit (use_decl.get_tree ());
     876         9103 : }
     877              : 
     878              : void
     879       266998 : DefaultASTVisitor::visit_function_params (AST::Function &function)
     880              : {
     881       563532 :   for (auto &param : function.get_function_params ())
     882       296534 :     visit (param);
     883       266998 : }
     884              : 
     885              : void
     886       285698 : DefaultASTVisitor::visit (AST::Function &function)
     887              : {
     888       285698 :   visit_outer_attrs (function);
     889       285698 :   visit (function.get_visibility ());
     890       285698 :   visit (function.get_qualifiers ());
     891       312623 :   for (auto &generic : function.get_generic_params ())
     892        26925 :     visit (generic);
     893              : 
     894       285698 :   visit_function_params (function);
     895              : 
     896       285698 :   if (function.has_return_type ())
     897       209329 :     visit (function.get_return_type ());
     898       285698 :   if (function.has_where_clause ())
     899         3471 :     visit (function.get_where_clause ());
     900       285698 :   if (function.has_body ())
     901       221060 :     visit (*function.get_definition ());
     902       285697 : }
     903              : 
     904              : void
     905        22355 : DefaultASTVisitor::visit (AST::TypeAlias &type_alias)
     906              : {
     907        22355 :   visit_outer_attrs (type_alias);
     908        22355 :   visit (type_alias.get_visibility ());
     909        22623 :   for (auto &generic : type_alias.get_generic_params ())
     910          268 :     visit (generic);
     911        22355 :   if (type_alias.has_where_clause ())
     912            0 :     visit (type_alias.get_where_clause ());
     913        22355 :   visit (type_alias.get_type_aliased ());
     914        22355 : }
     915              : 
     916              : void
     917        35274 : DefaultASTVisitor::visit (AST::StructField &field)
     918              : {
     919        35274 :   visit_outer_attrs (field);
     920        35274 :   visit (field.get_visibility ());
     921        35274 :   visit (field.get_field_type ());
     922        35274 : }
     923              : 
     924              : void
     925        30309 : DefaultASTVisitor::visit (AST::StructStruct &struct_item)
     926              : {
     927        30309 :   visit_outer_attrs (struct_item);
     928        30309 :   visit (struct_item.get_visibility ());
     929        40135 :   for (auto &generic : struct_item.get_generic_params ())
     930         9826 :     visit (generic);
     931        30309 :   if (struct_item.has_where_clause ())
     932           36 :     visit (struct_item.get_where_clause ());
     933        65048 :   for (auto &field : struct_item.get_fields ())
     934        34739 :     visit (field);
     935        30309 : }
     936              : 
     937              : void
     938        31308 : DefaultASTVisitor::visit (AST::TupleField &field)
     939              : {
     940        31308 :   visit_outer_attrs (field);
     941        31308 :   visit (field.get_visibility ());
     942        31308 :   visit (field.get_field_type ());
     943        31308 : }
     944              : 
     945              : void
     946        17347 : DefaultASTVisitor::visit (AST::TupleStruct &tuple_struct)
     947              : {
     948        17347 :   visit_outer_attrs (tuple_struct);
     949        17347 :   visit (tuple_struct.get_visibility ());
     950        23640 :   for (auto &generic : tuple_struct.get_generic_params ())
     951         6293 :     visit (generic);
     952        17347 :   if (tuple_struct.has_where_clause ())
     953            0 :     visit (tuple_struct.get_where_clause ());
     954        47912 :   for (auto &field : tuple_struct.get_fields ())
     955        30565 :     visit (field);
     956        17347 : }
     957              : 
     958              : void
     959        22060 : DefaultASTVisitor::visit (AST::EnumItem &item)
     960              : {
     961        22060 :   visit_outer_attrs (item);
     962        22060 :   visit (item.get_visibility ());
     963        22060 : }
     964              : 
     965              : void
     966         7306 : DefaultASTVisitor::visit (AST::EnumItemTuple &item)
     967              : {
     968         7306 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     969        15060 :   for (auto &field : item.get_tuple_fields ())
     970         7754 :     visit (field);
     971         7306 : }
     972              : 
     973              : void
     974         1476 : DefaultASTVisitor::visit (AST::EnumItemStruct &item)
     975              : {
     976         1476 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     977         3872 :   for (auto &field : item.get_struct_fields ())
     978         2396 :     visit (field);
     979         1476 : }
     980              : 
     981              : void
     982         5041 : DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
     983              : {
     984         5041 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     985         5041 :   visit (item.get_expr ());
     986         5041 : }
     987              : 
     988              : void
     989        11575 : DefaultASTVisitor::visit (AST::Enum &enum_item)
     990              : {
     991        11575 :   visit_outer_attrs (enum_item);
     992        11575 :   visit (enum_item.get_visibility ());
     993        17777 :   for (auto &generic : enum_item.get_generic_params ())
     994         6202 :     visit (generic);
     995        11575 :   if (enum_item.has_where_clause ())
     996            0 :     visit (enum_item.get_where_clause ());
     997        38408 :   for (auto &item : enum_item.get_variants ())
     998        26833 :     visit (item);
     999        11575 : }
    1000              : 
    1001              : void
    1002         1903 : DefaultASTVisitor::visit (AST::Union &union_item)
    1003              : {
    1004         1903 :   visit_outer_attrs (union_item);
    1005         1903 :   visit (union_item.get_visibility ());
    1006         3206 :   for (auto &generic : union_item.get_generic_params ())
    1007         1303 :     visit (generic);
    1008         1903 :   if (union_item.has_where_clause ())
    1009            0 :     visit (union_item.get_where_clause ());
    1010         7371 :   for (auto &variant : union_item.get_variants ())
    1011         5468 :     visit (variant);
    1012         1903 : }
    1013              : 
    1014              : void
    1015         8479 : DefaultASTVisitor::visit (AST::ConstantItem &const_item)
    1016              : {
    1017         8479 :   visit_outer_attrs (const_item);
    1018         8479 :   visit (const_item.get_visibility ());
    1019         8479 :   visit (const_item.get_type ());
    1020         8479 :   if (const_item.has_expr ())
    1021         7950 :     visit (const_item.get_expr ());
    1022         8479 : }
    1023              : 
    1024              : void
    1025          875 : DefaultASTVisitor::visit (AST::StaticItem &static_item)
    1026              : {
    1027          875 :   visit_outer_attrs (static_item);
    1028          875 :   visit (static_item.get_visibility ());
    1029          875 :   visit (static_item.get_type ());
    1030          875 :   visit (static_item.get_expr ());
    1031          875 : }
    1032              : 
    1033              : void
    1034        17709 : DefaultASTVisitor::visit (AST::TraitItemType &item)
    1035              : {
    1036        17709 :   visit_outer_attrs (item);
    1037        17898 :   for (auto &generic : item.get_generic_params ())
    1038          189 :     visit (generic);
    1039        18926 :   for (auto &bound : item.get_type_param_bounds ())
    1040         1217 :     visit (bound);
    1041        17709 : }
    1042              : 
    1043              : void
    1044        36234 : DefaultASTVisitor::visit (AST::Trait &trait)
    1045              : {
    1046        36234 :   visit_outer_attrs (trait);
    1047        36234 :   visit (trait.get_visibility ());
    1048              : 
    1049        36234 :   visit_inner_attrs (trait);
    1050              : 
    1051        36234 :   visit (trait.get_implicit_self ());
    1052              : 
    1053        42488 :   for (auto &generic : trait.get_generic_params ())
    1054         6254 :     visit (generic);
    1055              : 
    1056        36234 :   if (trait.has_where_clause ())
    1057           70 :     visit (trait.get_where_clause ());
    1058              : 
    1059        42185 :   for (auto &bound : trait.get_type_param_bounds ())
    1060         5951 :     visit (bound);
    1061              : 
    1062        68094 :   for (auto &item : trait.get_trait_items ())
    1063        31860 :     visit (item);
    1064        36234 : }
    1065              : 
    1066              : void
    1067         8576 : DefaultASTVisitor::visit (AST::InherentImpl &impl)
    1068              : {
    1069         8576 :   visit_outer_attrs (impl);
    1070         8576 :   visit (impl.get_visibility ());
    1071              : 
    1072        11623 :   for (auto &generic : impl.get_generic_params ())
    1073         3047 :     visit (generic);
    1074         8576 :   if (impl.has_where_clause ())
    1075            9 :     visit (impl.get_where_clause ());
    1076         8576 :   visit (impl.get_type ());
    1077         8576 :   visit_inner_attrs (impl);
    1078        31644 :   for (auto &item : impl.get_impl_items ())
    1079        23068 :     visit (item);
    1080         8576 : }
    1081              : 
    1082              : void
    1083        38885 : DefaultASTVisitor::visit (AST::TraitImpl &impl)
    1084              : {
    1085        38885 :   visit_outer_attrs (impl);
    1086        38885 :   visit (impl.get_visibility ());
    1087              : 
    1088        46277 :   for (auto &generic : impl.get_generic_params ())
    1089         7392 :     visit (generic);
    1090        38885 :   if (impl.has_where_clause ())
    1091          795 :     visit (impl.get_where_clause ());
    1092        38885 :   visit (impl.get_type ());
    1093        38885 :   visit (impl.get_trait_path ());
    1094        38885 :   visit_inner_attrs (impl);
    1095        85795 :   for (auto &item : impl.get_impl_items ())
    1096        46910 :     visit (item);
    1097        38885 : }
    1098              : 
    1099              : void
    1100           14 : DefaultASTVisitor::visit (AST::ExternalTypeItem &item)
    1101              : {
    1102           14 :   visit_outer_attrs (item);
    1103           14 :   visit (item.get_visibility ());
    1104           14 : }
    1105              : 
    1106              : void
    1107           14 : DefaultASTVisitor::visit (AST::ExternalStaticItem &item)
    1108              : {
    1109           14 :   visit_outer_attrs (item);
    1110           14 :   visit (item.get_visibility ());
    1111           14 :   visit (item.get_type ());
    1112           14 : }
    1113              : 
    1114              : void
    1115        20128 : DefaultASTVisitor::visit (AST::ExternBlock &block)
    1116              : {
    1117        20128 :   visit_outer_attrs (block);
    1118        20128 :   visit (block.get_visibility ());
    1119        20128 :   visit_inner_attrs (block);
    1120        52025 :   for (auto &item : block.get_extern_items ())
    1121        31897 :     visit (item);
    1122        20128 : }
    1123              : 
    1124              : void
    1125        19359 : DefaultASTVisitor::visit (AST::MacroMatchFragment &match)
    1126        19359 : {}
    1127              : 
    1128              : void
    1129         9057 : DefaultASTVisitor::visit (AST::MacroMatchRepetition &match)
    1130              : {
    1131        22102 :   for (auto &m : match.get_matches ())
    1132        13045 :     visit (m);
    1133         9057 : }
    1134              : 
    1135              : void
    1136        19209 : DefaultASTVisitor::visit (AST::MacroMatcher &matcher)
    1137              : {
    1138        43969 :   for (auto &m : matcher.get_matches ())
    1139        24760 :     visit (m);
    1140        19209 : }
    1141              : 
    1142              : void
    1143        18360 : DefaultASTVisitor::visit (AST::MacroTranscriber &transcriber)
    1144              : {
    1145        18360 :   visit (transcriber.get_token_tree ());
    1146        18360 : }
    1147              : 
    1148              : void
    1149        18360 : DefaultASTVisitor::visit (AST::MacroRule &rule)
    1150              : {
    1151        18360 :   visit (rule.get_matcher ());
    1152        18360 :   visit (rule.get_transcriber ());
    1153        18360 : }
    1154              : void
    1155        14310 : DefaultASTVisitor::visit (AST::MacroRulesDefinition &rules_def)
    1156              : {
    1157        14310 :   visit_outer_attrs (rules_def);
    1158        32670 :   for (auto &rule : rules_def.get_macro_rules ())
    1159        18360 :     visit (rule);
    1160        14310 : }
    1161              : 
    1162              : void
    1163         7069 : DefaultASTVisitor::visit (AST::MacroInvocData &data)
    1164              : {
    1165         7069 :   visit (data.get_path ());
    1166         7069 :   visit (data.get_delim_tok_tree ());
    1167         7069 : }
    1168              : void
    1169         7069 : DefaultASTVisitor::visit (AST::MacroInvocation &macro_invoc)
    1170              : {
    1171         7069 :   visit_outer_attrs (macro_invoc);
    1172         7069 :   visit (macro_invoc.get_invoc_data ());
    1173         7069 : }
    1174              : 
    1175              : void
    1176          626 : DefaultASTVisitor::visit (AST::MetaItemPath &meta_item)
    1177              : {
    1178          626 :   visit (meta_item.get_path ());
    1179          626 : }
    1180              : 
    1181              : void
    1182          253 : DefaultASTVisitor::visit (AST::MetaItemSeq &meta_item)
    1183              : {
    1184          253 :   visit (meta_item.get_path ());
    1185          601 :   for (auto &inner : meta_item.get_seq ())
    1186          348 :     visit (inner);
    1187          253 : }
    1188              : 
    1189              : void
    1190         1074 : DefaultASTVisitor::visit (AST::MetaWord &meta_item)
    1191         1074 : {}
    1192              : 
    1193              : void
    1194         6680 : DefaultASTVisitor::visit (AST::MetaNameValueStr &meta_item)
    1195         6680 : {}
    1196              : 
    1197              : void
    1198            0 : DefaultASTVisitor::visit (AST::MetaListPaths &meta_item)
    1199              : {
    1200            0 :   for (auto &path : meta_item.get_paths ())
    1201            0 :     visit (path);
    1202            0 : }
    1203              : 
    1204              : void
    1205            0 : DefaultASTVisitor::visit (AST::MetaListNameValueStr &meta_item)
    1206              : {
    1207            0 :   for (auto &str : meta_item.get_values ())
    1208            0 :     visit (str);
    1209            0 : }
    1210              : 
    1211              : void
    1212         7682 : DefaultASTVisitor::visit (AST::LiteralPattern &pattern)
    1213         7682 : {}
    1214              : 
    1215              : void
    1216       224115 : DefaultASTVisitor::visit (AST::IdentifierPattern &pattern)
    1217              : {
    1218       224115 :   if (pattern.has_subpattern ())
    1219          232 :     visit (pattern.get_subpattern ());
    1220       224115 : }
    1221              : 
    1222              : void
    1223        23787 : DefaultASTVisitor::visit (AST::WildcardPattern &pattern)
    1224        23787 : {}
    1225              : 
    1226              : void
    1227            0 : DefaultASTVisitor::visit (AST::RestPattern &pattern)
    1228            0 : {}
    1229              : 
    1230              : void
    1231         1735 : DefaultASTVisitor::visit (AST::RangePatternBoundLiteral &bound)
    1232         1735 : {}
    1233              : 
    1234              : void
    1235          273 : DefaultASTVisitor::visit (AST::RangePatternBoundPath &bound)
    1236              : {
    1237          273 :   visit (bound.get_path ());
    1238          273 : }
    1239              : 
    1240              : void
    1241            0 : DefaultASTVisitor::visit (AST::RangePatternBoundQualPath &bound)
    1242              : {
    1243            0 :   visit (bound.get_qualified_path ());
    1244            0 : }
    1245              : 
    1246              : void
    1247          862 : DefaultASTVisitor::visit (AST::RangePattern &pattern)
    1248              : {
    1249          862 :   if (pattern.get_has_lower_bound ())
    1250          862 :     visit (pattern.get_lower_bound ());
    1251          862 :   if (pattern.get_has_upper_bound ())
    1252          862 :     visit (pattern.get_upper_bound ());
    1253          862 : }
    1254              : 
    1255              : void
    1256         2758 : DefaultASTVisitor::visit (AST::ReferencePattern &pattern)
    1257              : {
    1258         2758 :   visit (pattern.get_referenced_pattern ());
    1259         2758 : }
    1260              : 
    1261              : void
    1262          342 : DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat &field)
    1263              : {
    1264          342 :   visit_outer_attrs (field);
    1265          342 :   visit (field.get_index_pattern ());
    1266          342 : }
    1267              : 
    1268              : void
    1269         2085 : DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat &field)
    1270              : {
    1271         2085 :   visit_outer_attrs (field);
    1272         2085 :   visit (field.get_ident_pattern ());
    1273         2085 : }
    1274              : 
    1275              : void
    1276         1102 : DefaultASTVisitor::visit (AST::StructPatternFieldIdent &field)
    1277              : {
    1278         1102 :   visit_outer_attrs (field);
    1279         1102 : }
    1280              : 
    1281              : void
    1282         2331 : DefaultASTVisitor::visit (AST::StructPatternElements &spe)
    1283              : {
    1284         6202 :   for (auto &field : spe.get_struct_pattern_fields ())
    1285         3871 :     visit (field);
    1286         2331 :   for (auto &attribute : spe.get_etc_outer_attrs ())
    1287            0 :     visit (attribute);
    1288         2331 : }
    1289              : 
    1290              : void
    1291         2331 : DefaultASTVisitor::visit (AST::StructPattern &pattern)
    1292              : {
    1293         2331 :   visit (pattern.get_path ());
    1294         2331 :   visit (pattern.get_struct_pattern_elems ());
    1295         2331 : }
    1296              : 
    1297              : void
    1298        16878 : DefaultASTVisitor::visit (AST::TupleStructItemsNoRest &tuple_items)
    1299              : {
    1300        35549 :   for (auto &pattern : tuple_items.get_patterns ())
    1301        18671 :     visit (pattern);
    1302        16878 : }
    1303              : 
    1304              : void
    1305          577 : DefaultASTVisitor::visit (AST::TupleStructItemsHasRest &tuple_items)
    1306              : {
    1307         1036 :   for (auto &lower : tuple_items.get_lower_patterns ())
    1308          459 :     visit (lower);
    1309          852 :   for (auto &upper : tuple_items.get_upper_patterns ())
    1310          275 :     visit (upper);
    1311          577 : }
    1312              : 
    1313              : void
    1314        21186 : DefaultASTVisitor::visit (AST::TupleStructPattern &pattern)
    1315              : {
    1316        21186 :   visit (pattern.get_path ());
    1317        21186 :   visit (pattern.get_items ());
    1318        21186 : }
    1319              : 
    1320              : void
    1321         8808 : DefaultASTVisitor::visit (AST::TuplePatternItemsNoRest &tuple_items)
    1322              : {
    1323        26638 :   for (auto &pattern : tuple_items.get_patterns ())
    1324        17830 :     visit (pattern);
    1325         8808 : }
    1326              : 
    1327              : void
    1328          412 : DefaultASTVisitor::visit (AST::TuplePatternItemsHasRest &tuple_items)
    1329              : {
    1330          837 :   for (auto &lower : tuple_items.get_lower_patterns ())
    1331          425 :     visit (lower);
    1332          876 :   for (auto &upper : tuple_items.get_upper_patterns ())
    1333          464 :     visit (upper);
    1334          412 : }
    1335              : 
    1336              : void
    1337        10903 : DefaultASTVisitor::visit (AST::TuplePattern &pattern)
    1338              : {
    1339        10903 :   visit (pattern.get_items ());
    1340        10903 : }
    1341              : 
    1342              : void
    1343          660 : DefaultASTVisitor::visit (AST::GroupedPattern &pattern)
    1344              : {
    1345          660 :   visit (pattern.get_pattern_in_parens ());
    1346          660 : }
    1347              : 
    1348              : void
    1349          472 : DefaultASTVisitor::visit (AST::SlicePatternItemsNoRest &items)
    1350              : {
    1351         1416 :   for (auto &item : items.get_patterns ())
    1352          944 :     visit (item);
    1353          472 : }
    1354              : 
    1355              : void
    1356          656 : DefaultASTVisitor::visit (AST::SlicePatternItemsHasRest &items)
    1357              : {
    1358         1299 :   for (auto &item : items.get_lower_patterns ())
    1359          643 :     visit (item);
    1360         1299 :   for (auto &item : items.get_upper_patterns ())
    1361          643 :     visit (item);
    1362          656 : }
    1363              : 
    1364              : void
    1365         1356 : DefaultASTVisitor::visit (AST::SlicePattern &pattern)
    1366              : {
    1367         1356 :   visit (pattern.get_items ());
    1368         1356 : }
    1369              : 
    1370              : void
    1371         3056 : DefaultASTVisitor::visit (AST::AltPattern &pattern)
    1372              : {
    1373        12540 :   for (auto &alt : pattern.get_alts ())
    1374         6428 :     visit (alt);
    1375         3056 : }
    1376              : 
    1377              : void
    1378         1312 : DefaultASTVisitor::visit (AST::EmptyStmt &stmt)
    1379         1312 : {}
    1380              : 
    1381              : void
    1382       204657 : DefaultASTVisitor::visit (AST::LetStmt &stmt)
    1383              : {
    1384       204657 :   visit_outer_attrs (stmt);
    1385       204657 :   visit (stmt.get_pattern ());
    1386       204657 :   if (stmt.has_type ())
    1387        31434 :     visit (stmt.get_type ());
    1388       204657 :   if (stmt.has_init_expr ())
    1389       188054 :     visit (stmt.get_init_expr ());
    1390       204657 : }
    1391              : 
    1392              : void
    1393       192674 : DefaultASTVisitor::visit (AST::ExprStmt &stmt)
    1394              : {
    1395       192674 :   visit (stmt.get_expr ());
    1396       192673 : }
    1397              : 
    1398              : void
    1399        37604 : DefaultASTVisitor::visit (AST::TraitBound &bound)
    1400              : {
    1401        37842 :   for (auto &lifetime : bound.get_for_lifetimes ())
    1402          238 :     visit (lifetime);
    1403        37604 :   visit (bound.get_type_path ());
    1404        37604 : }
    1405              : 
    1406              : void
    1407            0 : DefaultASTVisitor::visit (AST::ImplTraitType &type)
    1408              : {
    1409            0 :   for (auto &bound : type.get_type_param_bounds ())
    1410            0 :     visit (bound);
    1411            0 : }
    1412              : 
    1413              : void
    1414          251 : DefaultASTVisitor::visit (AST::TraitObjectType &type)
    1415              : {
    1416          890 :   for (auto &bound : type.get_type_param_bounds ())
    1417          639 :     visit (bound);
    1418          251 : }
    1419              : 
    1420              : void
    1421          109 : DefaultASTVisitor::visit (AST::ParenthesisedType &type)
    1422              : {
    1423          109 :   visit (type.get_type_in_parens ());
    1424          109 : }
    1425              : 
    1426              : void
    1427         1356 : DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound &type)
    1428              : {
    1429         1356 :   visit (type.get_trait_bound ());
    1430         1356 : }
    1431              : 
    1432              : void
    1433         2372 : DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound &type)
    1434              : {
    1435         2372 :   visit (type.get_trait_bound ());
    1436         2372 : }
    1437              : 
    1438              : void
    1439         6698 : DefaultASTVisitor::visit (AST::TupleType &type)
    1440              : {
    1441        16982 :   for (auto &elem : type.get_elems ())
    1442        10284 :     visit (elem);
    1443         6698 : }
    1444              : 
    1445              : void
    1446         3757 : DefaultASTVisitor::visit (AST::NeverType &type)
    1447         3757 : {}
    1448              : 
    1449              : void
    1450       123925 : DefaultASTVisitor::visit (AST::RawPointerType &type)
    1451              : {
    1452       123925 :   visit (type.get_type_pointed_to ());
    1453       123925 : }
    1454              : 
    1455              : void
    1456        85372 : DefaultASTVisitor::visit (AST::ReferenceType &type)
    1457              : {
    1458        85372 :   visit (type.get_lifetime ());
    1459        85372 :   visit (type.get_base_type ());
    1460        85372 : }
    1461              : 
    1462              : void
    1463        12555 : DefaultASTVisitor::visit (AST::ArrayType &type)
    1464              : {
    1465        12555 :   visit (type.get_elem_type ());
    1466        12555 :   visit (type.get_size_expr ());
    1467        12555 : }
    1468              : 
    1469              : void
    1470        13829 : DefaultASTVisitor::visit (AST::SliceType &type)
    1471              : {
    1472        13829 :   visit (type.get_elem_type ());
    1473        13829 : }
    1474              : 
    1475              : void
    1476         5880 : DefaultASTVisitor::visit (AST::InferredType &type)
    1477         5880 : {}
    1478              : 
    1479              : void
    1480          776 : DefaultASTVisitor::visit (AST::MaybeNamedParam &param)
    1481              : {
    1482          776 :   visit_outer_attrs (param);
    1483          776 :   visit (param.get_type ());
    1484          776 : }
    1485              : 
    1486              : void
    1487          979 : DefaultASTVisitor::visit (AST::BareFunctionType &type)
    1488              : {
    1489         1022 :   for (auto &lifetime : type.get_for_lifetimes ())
    1490           43 :     visit (lifetime);
    1491          979 :   visit (type.get_function_qualifiers ());
    1492         1755 :   for (auto &param : type.get_function_params ())
    1493          776 :     visit (param);
    1494          979 :   if (type.is_variadic ())
    1495            0 :     for (auto attr : type.get_variadic_attr ())
    1496            0 :       visit (attr);
    1497          979 :   if (type.has_return_type ())
    1498          727 :     visit (type.get_return_type ());
    1499          979 : }
    1500              : 
    1501              : void
    1502            0 : DefaultASTVisitor::visit (AST::FormatArgs &)
    1503              : {
    1504              :   // FIXME: Do we have anything to do? any subnodes to visit? Probably, right?
    1505            0 : }
    1506              : 
    1507              : void
    1508          155 : DefaultASTVisitor::visit (AST::OffsetOf &offset_of)
    1509              : {
    1510          155 :   visit (offset_of.get_type ());
    1511          155 : }
    1512              : 
    1513              : void
    1514        11130 : DefaultASTVisitor::visit (AST::VariadicParam &param)
    1515              : {
    1516        11130 :   if (param.has_pattern ())
    1517          143 :     visit (param.get_pattern ());
    1518        11130 : }
    1519              : 
    1520              : void
    1521         4683 : ContextualASTVisitor::visit (AST::Crate &crate)
    1522              : {
    1523         4683 :   ctx.enter (Kind::CRATE);
    1524         4683 :   DefaultASTVisitor::visit (crate);
    1525         4683 :   ctx.exit ();
    1526         4683 : }
    1527              : 
    1528              : void
    1529          973 : ContextualASTVisitor::visit (AST::InherentImpl &impl)
    1530              : {
    1531          973 :   ctx.enter (Kind::INHERENT_IMPL);
    1532          973 :   DefaultASTVisitor::visit (impl);
    1533          973 :   ctx.exit ();
    1534          973 : }
    1535              : 
    1536              : void
    1537         4742 : ContextualASTVisitor::visit (AST::TraitImpl &impl)
    1538              : {
    1539         4742 :   ctx.enter (Kind::TRAIT_IMPL);
    1540         4742 :   DefaultASTVisitor::visit (impl);
    1541         4742 :   ctx.exit ();
    1542         4742 : }
    1543              : 
    1544              : void
    1545         3895 : ContextualASTVisitor::visit (AST::Trait &trait)
    1546              : {
    1547         3895 :   ctx.enter (Kind::TRAIT);
    1548         3895 :   DefaultASTVisitor::visit (trait);
    1549         3895 :   ctx.exit ();
    1550         3895 : }
    1551              : 
    1552              : } // namespace AST
    1553              : } // namespace Rust
        

Generated by: LCOV version 2.4-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.