LCOV - code coverage report
Current view: top level - gcc/rust/ast - rust-ast-visitor.cc (source / functions) Coverage Total Hit
Test: gcc.info Lines: 93.9 % 942 885
Test Date: 2026-10-24 16:24:59 Functions: 95.3 % 190 181
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        91780 : DefaultASTVisitor::visit (AST::Crate &crate)
      36              : {
      37        91780 :   visit_inner_attrs (crate);
      38       505698 :   for (auto &item : crate.items)
      39       413920 :     visit (item);
      40        91778 : }
      41              : 
      42              : void
      43     33266345 : DefaultASTVisitor::visit (AST::Token &tok)
      44     33266345 : {}
      45              : 
      46              : void
      47      4409651 : DefaultASTVisitor::visit (AST::DelimTokenTree &delim_tok_tree)
      48              : {
      49     39240783 :   for (auto &token : delim_tok_tree.get_token_trees ())
      50     34831132 :     visit (token);
      51      4409651 : }
      52              : 
      53              : void
      54        31634 : DefaultASTVisitor::visit (AST::AttrInputMetaItemContainer &input)
      55              : {
      56        64124 :   for (auto &item : input.get_items ())
      57        32490 :     visit (item);
      58        31634 : }
      59              : 
      60              : void
      61     27492770 : DefaultASTVisitor::visit (AST::IdentifierExpr &ident_expr)
      62              : {
      63     27492770 :   visit_outer_attrs (ident_expr);
      64     27492770 : }
      65              : 
      66              : void
      67      3540017 : DefaultASTVisitor::visit (AST::Lifetime &lifetime)
      68      3540017 : {}
      69              : 
      70              : void
      71       183910 : DefaultASTVisitor::visit (AST::LifetimeParam &lifetime_param)
      72              : {
      73       183910 :   visit_outer_attrs (lifetime_param);
      74       183910 :   visit (lifetime_param.get_lifetime ());
      75       187070 :   for (auto &lifetime_bound : lifetime_param.get_lifetime_bounds ())
      76         3160 :     visit (lifetime_bound);
      77       183910 : }
      78              : 
      79              : void
      80        13556 : DefaultASTVisitor::visit (AST::ConstGenericParam &const_param)
      81              : {
      82        13556 :   visit_outer_attrs (const_param);
      83        13556 :   if (const_param.has_type ())
      84        13556 :     visit (const_param.get_type ());
      85        13556 :   if (const_param.has_default_value ())
      86          319 :     visit (const_param.get_default_value_unchecked ());
      87        13556 : }
      88              : 
      89              : void
      90      8355147 : DefaultASTVisitor::visit (AST::PathInExpression &path)
      91              : {
      92      8355147 :   visit_outer_attrs (path);
      93              : 
      94      8355147 :   if (!path.is_lang_item ())
      95     17970840 :     for (auto &segment : path.get_segments ())
      96      9650321 :       visit (segment);
      97      8355147 : }
      98              : 
      99              : void
     100     16473927 : DefaultASTVisitor::visit (AST::TypePathSegment &segment)
     101     16473927 : {}
     102              : 
     103              : void
     104        39977 : DefaultASTVisitor::visit (GenericArgsBinding &binding)
     105              : {
     106        39977 :   visit (binding.get_type ());
     107        39977 : }
     108              : 
     109              : void
     110      1620614 : DefaultASTVisitor::visit (AST::TypePathSegmentGeneric &segment)
     111              : {
     112      1620614 :   if (segment.has_generic_args ())
     113      1620600 :     visit (segment.get_generic_args ());
     114      1620614 : }
     115              : 
     116              : void
     117       100587 : DefaultASTVisitor::visit (AST::TypePathFunction &tpf)
     118              : {
     119       243670 :   for (auto &input : tpf.get_params ())
     120       143083 :     visit (input);
     121       100587 :   if (tpf.has_return_type ())
     122        97215 :     visit (tpf.get_return_type ());
     123       100587 : }
     124              : 
     125              : void
     126     21089606 : DefaultASTVisitor::visit (AST::PathIdentSegment &segment)
     127     21089606 : {}
     128              : 
     129              : void
     130       100587 : DefaultASTVisitor::visit (AST::TypePathSegmentFunction &segment)
     131              : {
     132       100587 :   visit (segment.get_type_path_function ());
     133       100587 :   visit (segment.get_ident_segment ());
     134       100587 : }
     135              : 
     136              : void
     137      1666623 : DefaultASTVisitor::visit (AST::GenericArgs &args)
     138              : {
     139      1837291 :   for (auto &lifetime : args.get_lifetime_args ())
     140       170668 :     visit (lifetime);
     141              : 
     142      3309908 :   for (auto &generic : args.get_generic_args ())
     143      1643285 :     visit (generic);
     144              : 
     145      1706084 :   for (auto &binding : args.get_binding_args ())
     146        39461 :     visit (binding);
     147      1666623 : }
     148              : 
     149              : void
     150     16102942 : DefaultASTVisitor::visit (AST::PathExprSegment &segment)
     151              : {
     152     16102942 :   visit (segment.get_ident_segment ());
     153     16102942 :   if (segment.has_generic_args ())
     154        68063 :     visit (segment.get_generic_args ());
     155     16102942 : }
     156              : void
     157     13704204 : DefaultASTVisitor::visit (AST::TypePath &path)
     158              : {
     159     28361483 :   for (auto &segment : path.get_segments ())
     160     14657279 :     visit (segment);
     161     13704204 : }
     162              : 
     163              : void
     164        25040 : DefaultASTVisitor::visit (AST::QualifiedPathInExpression &path)
     165              : {
     166        25040 :   visit_outer_attrs (path);
     167        25040 :   visit (path.get_qualified_path_type ());
     168              : 
     169        50114 :   for (auto &segment : path.get_segments ())
     170        25074 :     visit (segment);
     171        25040 : }
     172              : 
     173              : void
     174       565689 : DefaultASTVisitor::visit (AST::QualifiedPathType &path)
     175              : {
     176       565689 :   visit (path.get_type ());
     177       565689 :   if (path.has_as_clause ())
     178       547063 :     visit (path.get_as_type_path ());
     179       565689 : }
     180              : 
     181              : void
     182       647352 : DefaultASTVisitor::visit (AST::QualifiedPathInType &path)
     183              : {
     184       647352 :   visit (path.get_qualified_path_type ());
     185       647352 :   visit (path.get_associated_segment ());
     186              : 
     187       647352 :   for (auto &segment : path.get_segments ())
     188            0 :     visit (segment);
     189       647352 : }
     190              : 
     191              : void
     192     34422149 : DefaultASTVisitor::visit (AST::LiteralExpr &expr)
     193              : {
     194     34422149 :   visit_outer_attrs (expr);
     195     34422149 : }
     196              : 
     197              : void
     198     18303586 : DefaultASTVisitor::visit (AST::Attribute &attribute)
     199              : {
     200     18303586 :   visit (attribute.get_path ());
     201     18303586 :   if (attribute.has_attr_input ())
     202     15752449 :     visit (attribute.get_attr_input ());
     203     18303586 : }
     204              : 
     205              : void
     206      9920963 : DefaultASTVisitor::visit (AST::AttrInputLiteral &attr_input)
     207              : {
     208      9920963 :   visit (attr_input.get_literal ());
     209      9920963 : }
     210              : 
     211              : void
     212        22980 : DefaultASTVisitor::visit (AST::AttrInputExpr &attr_input)
     213              : {
     214        22980 :   visit (attr_input.get_expr ());
     215        22980 : }
     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     18802129 : DefaultASTVisitor::visit (AST::SimplePathSegment &segment)
     225     18802129 : {}
     226              : 
     227              : void
     228     18665840 : DefaultASTVisitor::visit (AST::SimplePath &path)
     229              : {
     230     37467969 :   for (auto &segment : path.get_segments ())
     231     18802129 :     visit (segment);
     232     18665840 : }
     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      1234363 : DefaultASTVisitor::visit (AST::BorrowExpr &expr)
     243              : {
     244      1234363 :   visit_outer_attrs (expr);
     245      1234363 :   visit (expr.get_borrowed_expr ());
     246      1234363 : }
     247              : 
     248              : void
     249       629590 : DefaultASTVisitor::visit (AST::DereferenceExpr &expr)
     250              : {
     251       629590 :   visit_outer_attrs (expr);
     252       629590 :   visit (expr.get_dereferenced_expr ());
     253       629590 : }
     254              : 
     255              : void
     256        85182 : DefaultASTVisitor::visit (AST::ErrorPropagationExpr &expr)
     257              : {
     258        85182 :   visit_outer_attrs (expr);
     259        85182 :   visit (expr.get_propagating_expr ());
     260        85182 : }
     261              : 
     262              : void
     263       190872 : DefaultASTVisitor::visit (AST::NegationExpr &expr)
     264              : {
     265       190872 :   visit_outer_attrs (expr);
     266       190872 :   visit (expr.get_negated_expr ());
     267       190872 : }
     268              : 
     269              : void
     270      6341323 : DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr &expr)
     271              : {
     272      6341323 :   visit_outer_attrs (expr);
     273      6341323 :   visit (expr.get_left_expr ());
     274      6341323 :   visit (expr.get_right_expr ());
     275      6341323 : }
     276              : 
     277              : void
     278       599031 : DefaultASTVisitor::visit (AST::ComparisonExpr &expr)
     279              : {
     280       599031 :   visit_outer_attrs (expr);
     281       599031 :   visit (expr.get_left_expr ());
     282       599031 :   visit (expr.get_right_expr ());
     283       599031 : }
     284              : 
     285              : void
     286       147755 : DefaultASTVisitor::visit (AST::LazyBooleanExpr &expr)
     287              : {
     288       147755 :   visit_outer_attrs (expr);
     289       147755 :   visit (expr.get_left_expr ());
     290       147755 :   visit (expr.get_right_expr ());
     291       147755 : }
     292              : 
     293              : void
     294       986575 : DefaultASTVisitor::visit (AST::TypeCastExpr &expr)
     295              : {
     296       986575 :   visit_outer_attrs (expr);
     297       986575 :   visit (expr.get_casted_expr ());
     298       986575 :   visit (expr.get_type_to_cast_to ());
     299       986575 : }
     300              : 
     301              : void
     302       410782 : DefaultASTVisitor::visit (AST::AssignmentExpr &expr)
     303              : {
     304       410782 :   visit_outer_attrs (expr);
     305       410782 :   visit (expr.get_left_expr ());
     306       410782 :   visit (expr.get_right_expr ());
     307       410782 : }
     308              : 
     309              : void
     310       243295 : DefaultASTVisitor::visit (AST::CompoundAssignmentExpr &expr)
     311              : {
     312       243295 :   visit_outer_attrs (expr);
     313       243295 :   visit (expr.get_left_expr ());
     314       243295 :   visit (expr.get_right_expr ());
     315       243295 : }
     316              : 
     317              : void
     318      1162780 : DefaultASTVisitor::visit (AST::GroupedExpr &expr)
     319              : {
     320      1162780 :   visit_outer_attrs (expr);
     321      1162780 :   visit_inner_attrs (expr);
     322      1162780 :   visit (expr.get_expr_in_parens ());
     323      1162780 : }
     324              : 
     325              : void
     326      1303680 : DefaultASTVisitor::visit (AST::ArrayElemsValues &elems)
     327              : {
     328     13710421 :   for (auto &value : elems.get_values ())
     329     12406741 :     visit (value);
     330      1303680 : }
     331              : 
     332              : void
     333        11694 : DefaultASTVisitor::visit (AST::ArrayElemsCopied &elems)
     334              : {
     335        11694 :   visit (elems.get_elem_to_copy ());
     336        11694 :   visit (elems.get_num_copies ());
     337        11694 : }
     338              : 
     339              : void
     340      2521158 : DefaultASTVisitor::visit (AST::ArrayExpr &expr)
     341              : {
     342      2521158 :   visit_outer_attrs (expr);
     343      2521158 :   visit_inner_attrs (expr);
     344      2521158 :   visit (expr.get_array_elems ());
     345      2521158 : }
     346              : 
     347              : void
     348       172582 : DefaultASTVisitor::visit (AST::ArrayIndexExpr &expr)
     349              : {
     350       172582 :   visit_outer_attrs (expr);
     351       172582 :   visit (expr.get_array_expr ());
     352       172582 :   visit (expr.get_index_expr ());
     353       172582 : }
     354              : 
     355              : void
     356       450888 : DefaultASTVisitor::visit (AST::TupleExpr &expr)
     357              : {
     358       450888 :   visit_outer_attrs (expr);
     359       450888 :   visit_inner_attrs (expr);
     360      1288488 :   for (auto &elem : expr.get_tuple_elems ())
     361       837600 :     visit (elem);
     362       450888 : }
     363              : 
     364              : void
     365       807435 : DefaultASTVisitor::visit (AST::TupleIndexExpr &expr)
     366              : {
     367       807435 :   visit_outer_attrs (expr);
     368       807435 :   visit (expr.get_tuple_expr ());
     369       807435 : }
     370              : 
     371              : void
     372         4950 : DefaultASTVisitor::visit (AST::StructExprStruct &expr)
     373              : {
     374         4950 :   visit_outer_attrs (expr);
     375         4950 :   visit_inner_attrs (expr);
     376         4950 :   visit (expr.get_struct_name ());
     377         4950 : }
     378              : 
     379              : void
     380        52246 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifier &field)
     381        52246 : {}
     382              : 
     383              : void
     384       196797 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue &field)
     385              : {
     386       196797 :   visit (field.get_value ());
     387       196797 : }
     388              : 
     389              : void
     390          748 : DefaultASTVisitor::visit (AST::StructExprFieldIndexValue &field)
     391              : {
     392          748 :   visit (field.get_value ());
     393          748 : }
     394              : 
     395              : void
     396         1787 : DefaultASTVisitor::visit (AST::StructBase &base)
     397              : {
     398         1787 :   visit (base.get_base_struct ());
     399         1787 : }
     400              : 
     401              : void
     402       160136 : DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
     403              : {
     404       160136 :   visit_outer_attrs (expr);
     405       160136 :   visit_inner_attrs (expr);
     406       160136 :   visit (expr.get_struct_name ());
     407       160136 :   if (expr.has_struct_base ())
     408         2261 :     visit (expr.get_struct_base ());
     409       464840 :   for (auto &field : expr.get_fields ())
     410       304704 :     visit (field);
     411       160136 : }
     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     10817072 : DefaultASTVisitor::visit (AST::CallExpr &expr)
     424              : {
     425     10817072 :   visit_outer_attrs (expr);
     426     10817072 :   visit (expr.get_function_expr ());
     427     37730639 :   for (auto &param : expr.get_params ())
     428     26913568 :     visit (param);
     429     10817071 : }
     430              : 
     431              : void
     432      6427547 : DefaultASTVisitor::visit (AST::MethodCallExpr &expr)
     433              : {
     434      6427547 :   visit_outer_attrs (expr);
     435      6427547 :   visit (expr.get_receiver_expr ());
     436      6427547 :   visit (expr.get_method_name ());
     437      7457131 :   for (auto &param : expr.get_params ())
     438      1029584 :     visit (param);
     439      6427547 : }
     440              : 
     441              : void
     442      1112685 : DefaultASTVisitor::visit (AST::FieldAccessExpr &expr)
     443              : {
     444      1112685 :   visit_outer_attrs (expr);
     445      1112685 :   visit (expr.get_receiver_expr ());
     446      1112685 : }
     447              : 
     448              : void
     449        61922 : DefaultASTVisitor::visit (AST::ClosureExprInner &expr)
     450              : {
     451        61922 :   visit_outer_attrs (expr);
     452       133470 :   for (auto &param : expr.get_params ())
     453        71548 :     visit (param);
     454        61922 :   visit (expr.get_definition_expr ());
     455        61922 : }
     456              : 
     457              : void
     458      3624849 : DefaultASTVisitor::visit (AST::BlockExpr &expr)
     459              : {
     460      3624849 :   visit_outer_attrs (expr);
     461      3624849 :   visit_inner_attrs (expr);
     462              : 
     463      3624849 :   if (expr.has_label ())
     464           51 :     visit (expr.get_label ());
     465              : 
     466      5778241 :   for (auto &stmt : expr.get_statements ())
     467      2153395 :     visit (stmt);
     468              : 
     469      3624846 :   if (expr.has_tail_expr ())
     470      3054362 :     visit (expr.get_tail_expr ());
     471      3624844 : }
     472              : 
     473              : void
     474          280 : DefaultASTVisitor::visit (AST::ConstBlock &expr)
     475              : {
     476          280 :   visit (expr.get_const_expr ());
     477          280 : }
     478              : 
     479              : void
     480        72714 : DefaultASTVisitor::visit (AST::AnonConst &expr)
     481              : {
     482        72714 :   if (!expr.is_deferred ())
     483        72491 :     visit (expr.get_inner_expr ());
     484        72714 : }
     485              : 
     486              : void
     487          439 : DefaultASTVisitor::visit (AST::ClosureExprInnerTyped &expr)
     488              : {
     489          439 :   visit_outer_attrs (expr);
     490          955 :   for (auto &param : expr.get_params ())
     491          516 :     visit (param);
     492          439 :   visit (expr.get_return_type ());
     493          439 :   visit (expr.get_definition_expr ());
     494          439 : }
     495              : 
     496              : void
     497        99476 : DefaultASTVisitor::visit (AST::ClosureParam &param)
     498              : {
     499        99476 :   visit_outer_attrs (param);
     500        99476 :   visit (param.get_pattern ());
     501        99476 :   if (param.has_type_given ())
     502         5485 :     visit (param.get_type ());
     503        99476 : }
     504              : 
     505              : void
     506         1984 : DefaultASTVisitor::visit (AST::ContinueExpr &expr)
     507              : {
     508         1984 :   visit_outer_attrs (expr);
     509         1984 :   if (expr.has_label ())
     510          765 :     visit (expr.get_label_unchecked ());
     511         1984 : }
     512              : 
     513              : void
     514        16092 : DefaultASTVisitor::visit (AST::BreakExpr &expr)
     515              : {
     516        16092 :   visit_outer_attrs (expr);
     517        16092 :   if (expr.has_label ())
     518          831 :     visit (expr.get_label_unchecked ());
     519              : 
     520        16092 :   if (expr.has_break_expr ())
     521          668 :     visit (expr.get_break_expr_unchecked ());
     522        16091 : }
     523              : 
     524              : void
     525        55904 : DefaultASTVisitor::visit (AST::RangeFromToExpr &expr)
     526              : {
     527        55904 :   visit (expr.get_from_expr ());
     528        55904 :   visit (expr.get_to_expr ());
     529        55904 : }
     530              : 
     531              : void
     532        22306 : DefaultASTVisitor::visit (AST::RangeFromExpr &expr)
     533              : {
     534        22306 :   visit (expr.get_from_expr ());
     535        22306 : }
     536              : 
     537              : void
     538        34434 : DefaultASTVisitor::visit (AST::RangeToExpr &expr)
     539              : {
     540        34434 :   visit (expr.get_to_expr ());
     541        34434 : }
     542              : 
     543              : void
     544        18665 : DefaultASTVisitor::visit (AST::RangeFullExpr &expr)
     545        18665 : {}
     546              : 
     547              : void
     548         1498 : DefaultASTVisitor::visit (AST::RangeFromToInclExpr &expr)
     549              : {
     550         1498 :   visit (expr.get_from_expr ());
     551         1498 :   visit (expr.get_to_expr ());
     552         1498 : }
     553              : 
     554              : void
     555            0 : DefaultASTVisitor::visit (AST::RangeToInclExpr &expr)
     556              : {
     557            0 :   visit (expr.get_to_expr ());
     558            0 : }
     559              : 
     560              : void
     561       147664 : DefaultASTVisitor::visit (AST::ReturnExpr &expr)
     562              : {
     563       147664 :   visit_outer_attrs (expr);
     564       147664 :   if (expr.has_returned_expr ())
     565       142394 :     visit (expr.get_returned_expr ());
     566       147664 : }
     567              : 
     568              : void
     569         7081 : DefaultASTVisitor::visit (AST::TryExpr &expr)
     570              : {
     571         7081 :   visit_outer_attrs (expr);
     572         7081 :   visit (expr.get_block_expr ());
     573         7081 : }
     574              : 
     575              : void
     576          642 : DefaultASTVisitor::visit (AST::BoxExpr &expr)
     577              : {
     578          642 :   visit_outer_attrs (expr);
     579          642 :   visit (expr.get_boxed_expr ());
     580          642 : }
     581              : 
     582              : void
     583       314891 : DefaultASTVisitor::visit (AST::UnsafeBlockExpr &expr)
     584              : {
     585       314891 :   visit_outer_attrs (expr);
     586       314891 :   visit (expr.get_block_expr ());
     587       314891 : }
     588              : 
     589              : void
     590         2580 : DefaultASTVisitor::visit (AST::LoopLabel &label)
     591              : {
     592         2580 :   visit (label.get_lifetime ());
     593         2580 : }
     594              : 
     595              : void
     596        15502 : DefaultASTVisitor::visit (AST::LoopExpr &expr)
     597              : {
     598        15502 :   visit_outer_attrs (expr);
     599        15502 :   if (expr.has_loop_label ())
     600         1146 :     visit (expr.get_loop_label ());
     601        15502 :   visit (expr.get_loop_block ());
     602        15501 : }
     603              : 
     604              : void
     605        27872 : DefaultASTVisitor::visit (AST::WhileLoopExpr &expr)
     606              : {
     607        27872 :   visit_outer_attrs (expr);
     608        27872 :   if (expr.has_loop_label ())
     609          119 :     visit (expr.get_loop_label ());
     610        27872 :   visit (expr.get_predicate_expr ());
     611        27872 :   visit (expr.get_loop_block ());
     612        27872 : }
     613              : 
     614              : void
     615         5978 : DefaultASTVisitor::visit (AST::WhileLetLoopExpr &expr)
     616              : {
     617         5978 :   visit_outer_attrs (expr);
     618         5978 :   visit (expr.get_pattern ());
     619              : 
     620         5978 :   if (expr.has_loop_label ())
     621            9 :     visit (expr.get_loop_label ());
     622              : 
     623         5978 :   visit (expr.get_scrutinee_expr ());
     624         5978 :   visit (expr.get_loop_block ());
     625         5978 : }
     626              : 
     627              : void
     628        28020 : DefaultASTVisitor::visit (AST::ForLoopExpr &expr)
     629              : {
     630        28020 :   visit_outer_attrs (expr);
     631        28020 :   visit (expr.get_pattern ());
     632        28020 :   visit (expr.get_iterator_expr ());
     633        28020 :   if (expr.has_loop_label ())
     634            0 :     visit (expr.get_loop_label ());
     635        28020 :   visit (expr.get_loop_block ());
     636        28020 : }
     637              : 
     638              : void
     639       439800 : DefaultASTVisitor::visit (AST::IfExpr &expr)
     640              : {
     641       439800 :   visit_outer_attrs (expr);
     642       439800 :   visit (expr.get_condition_expr ());
     643       439800 :   visit (expr.get_if_block ());
     644       439800 : }
     645              : 
     646              : void
     647       279933 : DefaultASTVisitor::visit (AST::IfExprConseqElse &expr)
     648              : {
     649       279933 :   visit (reinterpret_cast<AST::IfExpr &> (expr));
     650       279933 :   visit (expr.get_else_block ());
     651       279933 : }
     652              : 
     653              : void
     654        15427 : DefaultASTVisitor::visit (AST::IfLetExpr &expr)
     655              : {
     656        15427 :   visit_outer_attrs (expr);
     657        15427 :   visit (expr.get_pattern ());
     658        15427 :   visit (expr.get_value_expr ());
     659        15427 :   visit (expr.get_if_block ());
     660        15427 : }
     661              : 
     662              : void
     663         5821 : DefaultASTVisitor::visit (AST::IfLetExprConseqElse &expr)
     664              : {
     665         5821 :   visit (reinterpret_cast<AST::IfLetExpr &> (expr));
     666         5821 :   visit (expr.get_else_block ());
     667         5821 : }
     668              : 
     669              : void
     670      7843779 : DefaultASTVisitor::visit (AST::MatchArm &arm)
     671              : {
     672      7843779 :   visit_outer_attrs (arm);
     673      7843779 :   visit (arm.get_pattern ());
     674      7843779 :   if (arm.has_match_arm_guard ())
     675         7293 :     visit (arm.get_guard_expr ());
     676      7843779 : }
     677              : 
     678              : void
     679      7895811 : DefaultASTVisitor::visit (AST::MatchCase &arm)
     680              : {
     681      7895811 :   visit (arm.get_arm ());
     682      7895811 :   visit (arm.get_expr ());
     683      7895810 : }
     684              : 
     685              : void
     686       795899 : DefaultASTVisitor::visit (AST::MatchExpr &expr)
     687              : {
     688       795899 :   visit_outer_attrs (expr);
     689       795899 :   visit_inner_attrs (expr);
     690       795899 :   visit (expr.get_scrutinee_expr ());
     691      8691708 :   for (auto &arm : expr.get_match_cases ())
     692      7895811 :     visit (arm);
     693       795897 : }
     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          345 : DefaultASTVisitor::visit (AST::InlineAsm &expr)
     711              : {
     712          345 :   visit_outer_attrs (expr);
     713          345 :   using RegisterType = AST::InlineAsmOperand::RegisterType;
     714          718 :   for (auto &operand : expr.get_operands ())
     715              :     {
     716          373 :       switch (operand.get_register_type ())
     717              :         {
     718          130 :         case RegisterType::In:
     719          130 :           {
     720          130 :             visit (operand.get_in ().expr);
     721          130 :             break;
     722              :           }
     723          217 :         case RegisterType::Out:
     724          217 :           {
     725          217 :             visit (operand.get_out ().expr);
     726          217 :             break;
     727              :           }
     728            0 :         case RegisterType::InOut:
     729            0 :           {
     730            0 :             visit (operand.get_in_out ().expr);
     731            0 :             break;
     732              :           }
     733           26 :         case RegisterType::SplitInOut:
     734           26 :           {
     735           26 :             auto split = operand.get_split_in_out ();
     736           26 :             visit (split.in_expr);
     737           26 :             visit (split.out_expr);
     738           26 :             break;
     739           26 :           }
     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          345 :     }
     757          345 : }
     758              : 
     759              : void
     760         2219 : DefaultASTVisitor::visit (AST::LlvmInlineAsm &expr)
     761              : {
     762         2219 :   visit_outer_attrs (expr);
     763              : 
     764         5227 :   for (auto &output : expr.get_outputs ())
     765         3008 :     visit (output.expr);
     766              : 
     767         4616 :   for (auto &input : expr.get_inputs ())
     768         2397 :     visit (input.expr);
     769         2219 : }
     770              : 
     771              : void
     772       724191 : DefaultASTVisitor::visit (AST::TypeParam &param)
     773              : {
     774       724191 :   visit_outer_attrs (param);
     775       935177 :   for (auto &bound : param.get_type_param_bounds ())
     776       210986 :     visit (bound);
     777       724191 :   if (param.has_type ())
     778         6774 :     visit (param.get_type ());
     779       724191 : }
     780              : 
     781              : void
     782          256 : DefaultASTVisitor::visit (AST::LifetimeWhereClauseItem &item)
     783              : {
     784          256 :   visit (item.get_lifetime ());
     785          512 :   for (auto &bound : item.get_lifetime_bounds ())
     786          256 :     visit (bound);
     787          256 : }
     788              : 
     789              : void
     790       190532 : DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
     791              : {
     792       190858 :   for (auto &lifetime : item.get_for_lifetimes ())
     793          326 :     visit (lifetime);
     794       190532 :   visit (item.get_type ());
     795       390050 :   for (auto &param : item.get_type_param_bounds ())
     796       199518 :     visit (param);
     797       190532 : }
     798              : 
     799              : void
     800      6177418 : DefaultASTVisitor::visit (AST::Visibility &vis)
     801              : {
     802      6177418 :   if (vis.has_path ())
     803        68159 :     visit (vis.get_path ());
     804      6177418 : }
     805              : 
     806              : void
     807      3095938 : DefaultASTVisitor::visit (AST::FunctionQualifiers &qualifiers)
     808      3095938 : {}
     809              : 
     810              : void
     811       170313 : DefaultASTVisitor::visit (AST::WhereClause &where)
     812              : {
     813       402309 :   for (auto &item : where.get_items ())
     814       231996 :     visit (item);
     815       170313 : }
     816              : void
     817      2622129 : DefaultASTVisitor::visit (AST::FunctionParam &param)
     818              : {
     819      2622129 :   visit_outer_attrs (param);
     820      2622129 :   if (param.has_name ())
     821      2622129 :     visit (param.get_pattern ());
     822              : 
     823      2622129 :   visit (param.get_type ());
     824      2622129 : }
     825              : 
     826              : void
     827      1644171 : DefaultASTVisitor::visit (AST::SelfParam &param)
     828              : {
     829      1644171 :   visit_outer_attrs (param);
     830              : 
     831      1644171 :   if (param.has_lifetime ())
     832       776838 :     visit (param.get_lifetime ());
     833              : 
     834      1644171 :   if (param.has_type ())
     835         2814 :     visit (param.get_type ());
     836      1644171 : }
     837              : 
     838              : void
     839        51479 : DefaultASTVisitor::visit (AST::Module &module)
     840              : {
     841        51479 :   visit_outer_attrs (module);
     842        51479 :   visit (module.get_visibility ());
     843        51479 :   visit_inner_attrs (module);
     844      1377259 :   for (auto &item : module.get_items ())
     845      1325780 :     visit (item);
     846        51479 : }
     847              : 
     848              : void
     849          556 : DefaultASTVisitor::visit (AST::ExternCrate &crate)
     850              : {
     851          556 :   visit_outer_attrs (crate);
     852          556 :   visit (crate.get_visibility ());
     853          556 : }
     854              : 
     855              : void
     856         8228 : DefaultASTVisitor::visit (AST::UseTreeGlob &use_tree)
     857              : {
     858         8228 :   visit (use_tree.get_path ());
     859         8228 : }
     860              : 
     861              : void
     862        28607 : DefaultASTVisitor::visit (AST::UseTreeList &use_tree)
     863              : {
     864        28607 :   visit (use_tree.get_path ());
     865        28607 : }
     866              : 
     867              : void
     868        59590 : DefaultASTVisitor::visit (AST::UseTreeRebind &use_tree)
     869              : {
     870        59590 :   visit (use_tree.get_path ());
     871        59590 : }
     872              : 
     873              : void
     874        96553 : DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
     875              : {
     876        96553 :   visit (use_decl.get_visibility ());
     877        96553 :   visit (use_decl.get_tree ());
     878        96553 : }
     879              : 
     880              : void
     881      2457953 : DefaultASTVisitor::visit_function_params (AST::Function &function)
     882              : {
     883      6719345 :   for (auto &param : function.get_function_params ())
     884      4261392 :     visit (param);
     885      2457953 : }
     886              : 
     887              : void
     888      2492950 : DefaultASTVisitor::visit (AST::Function &function)
     889              : {
     890      2492950 :   visit_outer_attrs (function);
     891      2492950 :   visit (function.get_visibility ());
     892      2492950 :   visit (function.get_qualifiers ());
     893      2796793 :   for (auto &generic : function.get_generic_params ())
     894       303843 :     visit (generic);
     895              : 
     896      2492950 :   visit_function_params (function);
     897              : 
     898      2492950 :   if (function.has_return_type ())
     899      2114029 :     visit (function.get_return_type ());
     900      2492950 :   if (function.has_where_clause ())
     901        81919 :     visit (function.get_where_clause ());
     902      2492950 :   if (function.has_body ())
     903      2251768 :     visit (*function.get_definition ());
     904      2492948 : }
     905              : 
     906              : void
     907       484117 : DefaultASTVisitor::visit (AST::TypeAlias &type_alias)
     908              : {
     909       484117 :   visit_outer_attrs (type_alias);
     910       484117 :   visit (type_alias.get_visibility ());
     911       484617 :   for (auto &generic : type_alias.get_generic_params ())
     912          500 :     visit (generic);
     913       484117 :   if (type_alias.has_where_clause ())
     914            0 :     visit (type_alias.get_where_clause ());
     915       484117 :   visit (type_alias.get_type_aliased ());
     916       484117 : }
     917              : 
     918              : void
     919           44 : DefaultASTVisitor::visit (AST::TraitAlias &trait_alias)
     920              : {
     921           44 :   visit_outer_attrs (trait_alias);
     922           44 :   visit (trait_alias.get_visibility ());
     923           44 :   for (auto &generic : trait_alias.get_generic_params ())
     924            0 :     visit (generic);
     925           44 :   if (trait_alias.has_where_clause ())
     926            0 :     visit (trait_alias.get_where_clause ());
     927           88 :   for (auto &bound : trait_alias.get_alias_bounds ())
     928           44 :     visit (bound);
     929           44 : }
     930              : 
     931              : void
     932       115646 : DefaultASTVisitor::visit (AST::StructField &field)
     933              : {
     934       115646 :   visit_outer_attrs (field);
     935       115646 :   visit (field.get_visibility ());
     936       115646 :   visit (field.get_field_type ());
     937       115646 : }
     938              : 
     939              : void
     940       262494 : DefaultASTVisitor::visit (AST::StructStruct &struct_item)
     941              : {
     942       262494 :   visit_outer_attrs (struct_item);
     943       262494 :   visit (struct_item.get_visibility ());
     944       347201 :   for (auto &generic : struct_item.get_generic_params ())
     945        84707 :     visit (generic);
     946       262494 :   if (struct_item.has_where_clause ())
     947         2968 :     visit (struct_item.get_where_clause ());
     948       410962 :   for (auto &field : struct_item.get_fields ())
     949       148468 :     visit (field);
     950       262494 : }
     951              : 
     952              : void
     953       111851 : DefaultASTVisitor::visit (AST::TupleField &field)
     954              : {
     955       111851 :   visit_outer_attrs (field);
     956       111851 :   visit (field.get_visibility ());
     957       111851 :   visit (field.get_field_type ());
     958       111851 : }
     959              : 
     960              : void
     961        46129 : DefaultASTVisitor::visit (AST::TupleStruct &tuple_struct)
     962              : {
     963        46129 :   visit_outer_attrs (tuple_struct);
     964        46129 :   visit (tuple_struct.get_visibility ());
     965        65196 :   for (auto &generic : tuple_struct.get_generic_params ())
     966        19067 :     visit (generic);
     967        46129 :   if (tuple_struct.has_where_clause ())
     968          262 :     visit (tuple_struct.get_where_clause ());
     969       187399 :   for (auto &field : tuple_struct.get_fields ())
     970       141270 :     visit (field);
     971        46129 : }
     972              : 
     973              : void
     974        44760 : DefaultASTVisitor::visit (AST::EnumItem &item)
     975              : {
     976        44760 :   visit_outer_attrs (item);
     977        44760 :   visit (item.get_visibility ());
     978        44760 : }
     979              : 
     980              : void
     981        16672 : DefaultASTVisitor::visit (AST::EnumItemTuple &item)
     982              : {
     983        16672 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     984        35102 :   for (auto &field : item.get_tuple_fields ())
     985        18430 :     visit (field);
     986        16672 : }
     987              : 
     988              : void
     989         2036 : DefaultASTVisitor::visit (AST::EnumItemStruct &item)
     990              : {
     991         2036 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     992         5398 :   for (auto &field : item.get_struct_fields ())
     993         3362 :     visit (field);
     994         2036 : }
     995              : 
     996              : void
     997         6499 : DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
     998              : {
     999         6499 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
    1000         6499 :   visit (item.get_expr ());
    1001         6499 : }
    1002              : 
    1003              : void
    1004        21705 : DefaultASTVisitor::visit (AST::Enum &enum_item)
    1005              : {
    1006        21705 :   visit_outer_attrs (enum_item);
    1007        21705 :   visit (enum_item.get_visibility ());
    1008        33045 :   for (auto &generic : enum_item.get_generic_params ())
    1009        11340 :     visit (generic);
    1010        21705 :   if (enum_item.has_where_clause ())
    1011           32 :     visit (enum_item.get_where_clause ());
    1012        75694 :   for (auto &item : enum_item.get_variants ())
    1013        53989 :     visit (item);
    1014        21705 : }
    1015              : 
    1016              : void
    1017         2877 : DefaultASTVisitor::visit (AST::Union &union_item)
    1018              : {
    1019         2877 :   visit_outer_attrs (union_item);
    1020         2877 :   visit (union_item.get_visibility ());
    1021         5015 :   for (auto &generic : union_item.get_generic_params ())
    1022         2138 :     visit (generic);
    1023         2877 :   if (union_item.has_where_clause ())
    1024            0 :     visit (union_item.get_where_clause ());
    1025        10941 :   for (auto &variant : union_item.get_variants ())
    1026         8064 :     visit (variant);
    1027         2877 : }
    1028              : 
    1029              : void
    1030       121163 : DefaultASTVisitor::visit (AST::ConstantItem &const_item)
    1031              : {
    1032       121163 :   visit_outer_attrs (const_item);
    1033       121163 :   visit (const_item.get_visibility ());
    1034       121163 :   visit (const_item.get_type ());
    1035       121163 :   if (const_item.has_expr ())
    1036       117071 :     visit (const_item.get_expr ());
    1037       121163 : }
    1038              : 
    1039              : void
    1040         6672 : DefaultASTVisitor::visit (AST::StaticItem &static_item)
    1041              : {
    1042         6672 :   visit_outer_attrs (static_item);
    1043         6672 :   visit (static_item.get_visibility ());
    1044         6672 :   visit (static_item.get_type ());
    1045         6672 :   visit (static_item.get_expr ());
    1046         6672 : }
    1047              : 
    1048              : void
    1049        32874 : DefaultASTVisitor::visit (AST::TraitItemType &item)
    1050              : {
    1051        32874 :   visit_outer_attrs (item);
    1052        33288 :   for (auto &generic : item.get_generic_params ())
    1053          414 :     visit (generic);
    1054        39836 :   for (auto &bound : item.get_type_param_bounds ())
    1055         6962 :     visit (bound);
    1056        32874 : }
    1057              : 
    1058              : void
    1059        61457 : DefaultASTVisitor::visit (AST::Trait &trait)
    1060              : {
    1061        61457 :   visit_outer_attrs (trait);
    1062        61457 :   visit (trait.get_visibility ());
    1063              : 
    1064        61457 :   visit_inner_attrs (trait);
    1065              : 
    1066        61457 :   visit (trait.get_implicit_self ());
    1067              : 
    1068        75543 :   for (auto &generic : trait.get_generic_params ())
    1069        14086 :     visit (generic);
    1070              : 
    1071        61457 :   if (trait.has_where_clause ())
    1072           91 :     visit (trait.get_where_clause ());
    1073              : 
    1074        75530 :   for (auto &bound : trait.get_type_param_bounds ())
    1075        14073 :     visit (bound);
    1076              : 
    1077       136590 :   for (auto &item : trait.get_trait_items ())
    1078        75133 :     visit (item);
    1079        61457 : }
    1080              : 
    1081              : void
    1082        35893 : DefaultASTVisitor::visit (AST::InherentImpl &impl)
    1083              : {
    1084        35893 :   visit_outer_attrs (impl);
    1085        35893 :   visit (impl.get_visibility ());
    1086              : 
    1087        64541 :   for (auto &generic : impl.get_generic_params ())
    1088        28648 :     visit (generic);
    1089        35893 :   if (impl.has_where_clause ())
    1090          236 :     visit (impl.get_where_clause ());
    1091        35893 :   visit (impl.get_type ());
    1092        35893 :   visit_inner_attrs (impl);
    1093       240718 :   for (auto &item : impl.get_impl_items ())
    1094       204825 :     visit (item);
    1095        35893 : }
    1096              : 
    1097              : void
    1098       548525 : DefaultASTVisitor::visit (AST::TraitImpl &impl)
    1099              : {
    1100       548525 :   visit_outer_attrs (impl);
    1101       548525 :   visit (impl.get_visibility ());
    1102              : 
    1103      1048649 :   for (auto &generic : impl.get_generic_params ())
    1104       500124 :     visit (generic);
    1105       548525 :   if (impl.has_where_clause ())
    1106        28374 :     visit (impl.get_where_clause ());
    1107       548525 :   visit (impl.get_type ());
    1108       548525 :   visit (impl.get_trait_path ());
    1109       548525 :   visit_inner_attrs (impl);
    1110      1317414 :   for (auto &item : impl.get_impl_items ())
    1111       768889 :     visit (item);
    1112       548525 : }
    1113              : 
    1114              : void
    1115          216 : DefaultASTVisitor::visit (AST::ExternalTypeItem &item)
    1116              : {
    1117          216 :   visit_outer_attrs (item);
    1118          216 :   visit (item.get_visibility ());
    1119          216 : }
    1120              : 
    1121              : void
    1122           16 : DefaultASTVisitor::visit (AST::ExternalStaticItem &item)
    1123              : {
    1124           16 :   visit_outer_attrs (item);
    1125           16 :   visit (item.get_visibility ());
    1126           16 :   visit (item.get_type ());
    1127           16 : }
    1128              : 
    1129              : void
    1130        30448 : DefaultASTVisitor::visit (AST::ExternBlock &block)
    1131              : {
    1132        30448 :   visit_outer_attrs (block);
    1133        30448 :   visit (block.get_visibility ());
    1134        30448 :   visit_inner_attrs (block);
    1135       163681 :   for (auto &item : block.get_extern_items ())
    1136       133233 :     visit (item);
    1137        30448 : }
    1138              : 
    1139              : void
    1140       225241 : DefaultASTVisitor::visit (AST::MacroMatchFragment &match)
    1141       225241 : {}
    1142              : 
    1143              : void
    1144        31034 : DefaultASTVisitor::visit (AST::MacroMatchRepetition &match)
    1145              : {
    1146        75783 :   for (auto &m : match.get_matches ())
    1147        44749 :     visit (m);
    1148        31034 : }
    1149              : 
    1150              : void
    1151       115493 : DefaultASTVisitor::visit (AST::MacroMatcher &matcher)
    1152              : {
    1153       474287 :   for (auto &m : matcher.get_matches ())
    1154       358794 :     visit (m);
    1155       115493 : }
    1156              : 
    1157              : void
    1158       109821 : DefaultASTVisitor::visit (AST::MacroTranscriber &transcriber)
    1159              : {
    1160       109821 :   visit (transcriber.get_token_tree ());
    1161       109821 : }
    1162              : 
    1163              : void
    1164       109821 : DefaultASTVisitor::visit (AST::MacroRule &rule)
    1165              : {
    1166       109821 :   visit (rule.get_matcher ());
    1167       109821 :   visit (rule.get_transcriber ());
    1168       109821 : }
    1169              : void
    1170        99877 : DefaultASTVisitor::visit (AST::MacroRulesDefinition &rules_def)
    1171              : {
    1172        99877 :   visit_outer_attrs (rules_def);
    1173       209698 :   for (auto &rule : rules_def.get_macro_rules ())
    1174       109821 :     visit (rule);
    1175        99877 : }
    1176              : 
    1177              : void
    1178       178613 : DefaultASTVisitor::visit (AST::MacroInvocData &data)
    1179              : {
    1180       178613 :   visit (data.get_path ());
    1181       178613 :   visit (data.get_delim_tok_tree ());
    1182       178613 : }
    1183              : void
    1184       178613 : DefaultASTVisitor::visit (AST::MacroInvocation &macro_invoc)
    1185              : {
    1186       178613 :   visit_outer_attrs (macro_invoc);
    1187       178613 :   visit (macro_invoc.get_invoc_data ());
    1188       178613 : }
    1189              : 
    1190              : void
    1191         2670 : DefaultASTVisitor::visit (AST::MetaItemPath &meta_item)
    1192              : {
    1193         2670 :   visit (meta_item.get_path ());
    1194         2670 : }
    1195              : 
    1196              : void
    1197        16386 : DefaultASTVisitor::visit (AST::MetaItemSeq &meta_item)
    1198              : {
    1199        16386 :   visit (meta_item.get_path ());
    1200        37497 :   for (auto &inner : meta_item.get_seq ())
    1201        21111 :     visit (inner);
    1202        16386 : }
    1203              : 
    1204              : void
    1205        12227 : DefaultASTVisitor::visit (AST::MetaWord &meta_item)
    1206        12227 : {}
    1207              : 
    1208              : void
    1209        30081 : DefaultASTVisitor::visit (AST::MetaNameValueStr &meta_item)
    1210        30081 : {}
    1211              : 
    1212              : void
    1213            0 : DefaultASTVisitor::visit (AST::MetaListPaths &meta_item)
    1214              : {
    1215            0 :   for (auto &path : meta_item.get_paths ())
    1216            0 :     visit (path);
    1217            0 : }
    1218              : 
    1219              : void
    1220            0 : DefaultASTVisitor::visit (AST::MetaListNameValueStr &meta_item)
    1221              : {
    1222            0 :   for (auto &str : meta_item.get_values ())
    1223            0 :     visit (str);
    1224            0 : }
    1225              : 
    1226              : void
    1227     10474928 : DefaultASTVisitor::visit (AST::LiteralPattern &pattern)
    1228     10474928 : {}
    1229              : 
    1230              : void
    1231      1871822 : DefaultASTVisitor::visit (AST::IdentifierPattern &pattern)
    1232              : {
    1233      1871822 :   if (pattern.has_subpattern ())
    1234         2830 :     visit (pattern.get_subpattern ());
    1235      1871822 : }
    1236              : 
    1237              : void
    1238      1052433 : DefaultASTVisitor::visit (AST::WildcardPattern &pattern)
    1239      1052433 : {}
    1240              : 
    1241              : void
    1242         3673 : DefaultASTVisitor::visit (AST::RestPattern &pattern)
    1243         3673 : {}
    1244              : 
    1245              : void
    1246        47343 : DefaultASTVisitor::visit (AST::RangePatternBoundLiteral &bound)
    1247        47343 : {}
    1248              : 
    1249              : void
    1250          405 : DefaultASTVisitor::visit (AST::RangePatternBoundPath &bound)
    1251              : {
    1252          405 :   visit (bound.get_path ());
    1253          405 : }
    1254              : 
    1255              : void
    1256            0 : DefaultASTVisitor::visit (AST::RangePatternBoundQualPath &bound)
    1257              : {
    1258            0 :   visit (bound.get_qualified_path ());
    1259            0 : }
    1260              : 
    1261              : void
    1262        18480 : DefaultASTVisitor::visit (AST::RangePattern &pattern)
    1263              : {
    1264        18480 :   if (pattern.get_has_lower_bound ())
    1265        18480 :     visit (pattern.get_lower_bound ());
    1266        18480 :   if (pattern.get_has_upper_bound ())
    1267        18480 :     visit (pattern.get_upper_bound ());
    1268        18480 : }
    1269              : 
    1270              : void
    1271        48305 : DefaultASTVisitor::visit (AST::ReferencePattern &pattern)
    1272              : {
    1273        48305 :   visit (pattern.get_referenced_pattern ());
    1274        48305 : }
    1275              : 
    1276              : void
    1277          527 : DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat &field)
    1278              : {
    1279          527 :   visit_outer_attrs (field);
    1280          527 :   visit (field.get_index_pattern ());
    1281          527 : }
    1282              : 
    1283              : void
    1284        10529 : DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat &field)
    1285              : {
    1286        10529 :   visit_outer_attrs (field);
    1287        10529 :   visit (field.get_ident_pattern ());
    1288        10529 : }
    1289              : 
    1290              : void
    1291         4610 : DefaultASTVisitor::visit (AST::StructPatternFieldIdent &field)
    1292              : {
    1293         4610 :   visit_outer_attrs (field);
    1294         4610 : }
    1295              : 
    1296              : void
    1297        11965 : DefaultASTVisitor::visit (AST::StructPatternElements &spe)
    1298              : {
    1299        28954 :   for (auto &field : spe.get_struct_pattern_fields ())
    1300        16989 :     visit (field);
    1301        11965 :   for (auto &attribute : spe.get_etc_outer_attrs ())
    1302            0 :     visit (attribute);
    1303        11965 : }
    1304              : 
    1305              : void
    1306        11965 : DefaultASTVisitor::visit (AST::StructPattern &pattern)
    1307              : {
    1308        11965 :   visit (pattern.get_path ());
    1309        11965 :   visit (pattern.get_struct_pattern_elems ());
    1310        11965 : }
    1311              : 
    1312              : void
    1313       199614 : DefaultASTVisitor::visit (AST::TupleStructItemsNoRest &tuple_items)
    1314              : {
    1315       406869 :   for (auto &pattern : tuple_items.get_patterns ())
    1316       207255 :     visit (pattern);
    1317       199614 : }
    1318              : 
    1319              : void
    1320         2229 : DefaultASTVisitor::visit (AST::TupleStructItemsHasRest &tuple_items)
    1321              : {
    1322         2855 :   for (auto &lower : tuple_items.get_lower_patterns ())
    1323          626 :     visit (lower);
    1324         2612 :   for (auto &upper : tuple_items.get_upper_patterns ())
    1325          383 :     visit (upper);
    1326         2229 : }
    1327              : 
    1328              : void
    1329       264751 : DefaultASTVisitor::visit (AST::TupleStructPattern &pattern)
    1330              : {
    1331       264751 :   visit (pattern.get_path ());
    1332       264751 :   visit (pattern.get_items ());
    1333       264751 : }
    1334              : 
    1335              : void
    1336       508229 : DefaultASTVisitor::visit (AST::TuplePatternItemsNoRest &tuple_items)
    1337              : {
    1338      1667866 :   for (auto &pattern : tuple_items.get_patterns ())
    1339      1159637 :     visit (pattern);
    1340       508229 : }
    1341              : 
    1342              : void
    1343          643 : DefaultASTVisitor::visit (AST::TuplePatternItemsHasRest &tuple_items)
    1344              : {
    1345         1196 :   for (auto &lower : tuple_items.get_lower_patterns ())
    1346          553 :     visit (lower);
    1347         1241 :   for (auto &upper : tuple_items.get_upper_patterns ())
    1348          598 :     visit (upper);
    1349          643 : }
    1350              : 
    1351              : void
    1352       687177 : DefaultASTVisitor::visit (AST::TuplePattern &pattern)
    1353              : {
    1354       687177 :   visit (pattern.get_items ());
    1355       687177 : }
    1356              : 
    1357              : void
    1358          899 : DefaultASTVisitor::visit (AST::GroupedPattern &pattern)
    1359              : {
    1360          899 :   visit (pattern.get_pattern_in_parens ());
    1361          899 : }
    1362              : 
    1363              : void
    1364         4500 : DefaultASTVisitor::visit (AST::SlicePattern &pattern)
    1365              : {
    1366        14230 :   for (auto &pat : pattern.get_patterns ())
    1367         9730 :     visit (pat);
    1368         4500 : }
    1369              : 
    1370              : void
    1371        10830 : DefaultASTVisitor::visit (AST::AltPattern &pattern)
    1372              : {
    1373        37690 :   for (auto &alt : pattern.get_alts ())
    1374        26860 :     visit (alt);
    1375        10830 : }
    1376              : 
    1377              : void
    1378         1474 : DefaultASTVisitor::visit (AST::EmptyStmt &stmt)
    1379         1474 : {}
    1380              : 
    1381              : void
    1382      1121080 : DefaultASTVisitor::visit (AST::LetStmt &stmt)
    1383              : {
    1384      1121080 :   visit_outer_attrs (stmt);
    1385      1121080 :   visit (stmt.get_pattern ());
    1386      1121080 :   if (stmt.has_type ())
    1387       130051 :     visit (stmt.get_type ());
    1388      1121080 :   if (stmt.has_init_expr ())
    1389      1075269 :     visit (stmt.get_init_expr ());
    1390      1121080 : }
    1391              : 
    1392              : void
    1393      1496255 : DefaultASTVisitor::visit (AST::ExprStmt &stmt)
    1394              : {
    1395      1496255 :   visit (stmt.get_expr ());
    1396      1496253 : }
    1397              : 
    1398              : void
    1399       729532 : DefaultASTVisitor::visit (AST::TraitBound &bound)
    1400              : {
    1401       729848 :   for (auto &lifetime : bound.get_for_lifetimes ())
    1402          316 :     visit (lifetime);
    1403       729532 :   visit (bound.get_type_path ());
    1404       729532 : }
    1405              : 
    1406              : void
    1407        18175 : DefaultASTVisitor::visit (AST::ImplTraitType &type)
    1408              : {
    1409        37058 :   for (auto &bound : type.get_type_param_bounds ())
    1410        18883 :     visit (bound);
    1411        18175 : }
    1412              : 
    1413              : void
    1414        13032 : DefaultASTVisitor::visit (AST::TraitObjectType &type)
    1415              : {
    1416        39717 :   for (auto &bound : type.get_type_param_bounds ())
    1417        26685 :     visit (bound);
    1418        13032 : }
    1419              : 
    1420              : void
    1421         1899 : DefaultASTVisitor::visit (AST::ParenthesisedType &type)
    1422              : {
    1423         1899 :   visit (type.get_type_in_parens ());
    1424         1899 : }
    1425              : 
    1426              : void
    1427        35239 : DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound &type)
    1428              : {
    1429        35239 :   visit (type.get_trait_bound ());
    1430        35239 : }
    1431              : 
    1432              : void
    1433         9068 : DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound &type)
    1434              : {
    1435         9068 :   visit (type.get_trait_bound ());
    1436         9068 : }
    1437              : 
    1438              : void
    1439       195816 : DefaultASTVisitor::visit (AST::TupleType &type)
    1440              : {
    1441       628271 :   for (auto &elem : type.get_elems ())
    1442       432455 :     visit (elem);
    1443       195816 : }
    1444              : 
    1445              : void
    1446        17356 : DefaultASTVisitor::visit (AST::NeverType &type)
    1447        17356 : {}
    1448              : 
    1449              : void
    1450       416076 : DefaultASTVisitor::visit (AST::RawPointerType &type)
    1451              : {
    1452       416076 :   visit (type.get_type_pointed_to ());
    1453       416076 : }
    1454              : 
    1455              : void
    1456      1661894 : DefaultASTVisitor::visit (AST::ReferenceType &type)
    1457              : {
    1458      1661894 :   visit (type.get_lifetime ());
    1459      1661894 :   visit (type.get_base_type ());
    1460      1661894 : }
    1461              : 
    1462              : void
    1463        72495 : DefaultASTVisitor::visit (AST::ArrayType &type)
    1464              : {
    1465        72495 :   visit (type.get_elem_type ());
    1466        72495 :   visit (type.get_size_expr ());
    1467        72495 : }
    1468              : 
    1469              : void
    1470       140406 : DefaultASTVisitor::visit (AST::SliceType &type)
    1471              : {
    1472       140406 :   visit (type.get_elem_type ());
    1473       140406 : }
    1474              : 
    1475              : void
    1476        63358 : DefaultASTVisitor::visit (AST::InferredType &type)
    1477        63358 : {}
    1478              : 
    1479              : void
    1480       460206 : DefaultASTVisitor::visit (AST::MaybeNamedParam &param)
    1481              : {
    1482       460206 :   visit_outer_attrs (param);
    1483       460206 :   visit (param.get_type ());
    1484       460206 : }
    1485              : 
    1486              : void
    1487        78360 : DefaultASTVisitor::visit (AST::BareFunctionType &type)
    1488              : {
    1489        78425 :   for (auto &lifetime : type.get_for_lifetimes ())
    1490           65 :     visit (lifetime);
    1491        78360 :   visit (type.get_function_qualifiers ());
    1492       538566 :   for (auto &param : type.get_function_params ())
    1493       460206 :     visit (param);
    1494        78360 :   if (type.is_variadic ())
    1495        23352 :     for (auto attr : type.get_variadic_attr ())
    1496            0 :       visit (attr);
    1497        78360 :   if (type.has_return_type ())
    1498        76224 :     visit (type.get_return_type ());
    1499        78360 : }
    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          170 : DefaultASTVisitor::visit (AST::OffsetOf &offset_of)
    1509              : {
    1510          170 :   visit (offset_of.get_type ());
    1511          170 : }
    1512              : 
    1513              : void
    1514        14797 : DefaultASTVisitor::visit (AST::VariadicParam &param)
    1515              : {
    1516        14797 :   if (param.has_pattern ())
    1517          176 :     visit (param.get_pattern ());
    1518        14797 : }
    1519              : 
    1520              : void
    1521         5049 : ContextualASTVisitor::visit (AST::Crate &crate)
    1522              : {
    1523         5049 :   ctx.enter (Kind::CRATE);
    1524         5049 :   DefaultASTVisitor::visit (crate);
    1525         5049 :   ctx.exit ();
    1526         5049 : }
    1527              : 
    1528              : void
    1529         1544 : ContextualASTVisitor::visit (AST::InherentImpl &impl)
    1530              : {
    1531         1544 :   ctx.enter (Kind::INHERENT_IMPL);
    1532         1544 :   DefaultASTVisitor::visit (impl);
    1533         1544 :   ctx.exit ();
    1534         1544 : }
    1535              : 
    1536              : void
    1537        13182 : ContextualASTVisitor::visit (AST::TraitImpl &impl)
    1538              : {
    1539        13182 :   ctx.enter (Kind::TRAIT_IMPL);
    1540        13182 :   DefaultASTVisitor::visit (impl);
    1541        13182 :   ctx.exit ();
    1542        13182 : }
    1543              : 
    1544              : void
    1545         4546 : ContextualASTVisitor::visit (AST::Trait &trait)
    1546              : {
    1547         4546 :   ctx.enter (Kind::TRAIT);
    1548         4546 :   DefaultASTVisitor::visit (trait);
    1549         4546 :   ctx.exit ();
    1550         4546 : }
    1551              : 
    1552              : void
    1553        35043 : ContextualASTVisitor::visit (AST::Function &function)
    1554              : {
    1555        35043 :   ctx.enter (Kind::FUNCTION);
    1556        35043 :   DefaultASTVisitor::visit (function);
    1557        35043 :   ctx.exit ();
    1558        35043 : }
    1559              : 
    1560              : } // namespace AST
    1561              : } // namespace Rust
        

Generated by: LCOV version 2.5.0-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.