LCOV - code coverage report
Current view: top level - gcc/rust/ast - rust-ast-visitor.cc (source / functions) Coverage Total Hit
Test: gcc.info Lines: 94.0 % 926 870
Test Date: 2026-08-22 16:33:35 Functions: 95.2 % 188 179
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        88203 : DefaultASTVisitor::visit (AST::Crate &crate)
      36              : {
      37        88203 :   visit_inner_attrs (crate);
      38       472599 :   for (auto &item : crate.items)
      39       384398 :     visit (item);
      40        88201 : }
      41              : 
      42              : void
      43     35301238 : DefaultASTVisitor::visit (AST::Token &tok)
      44     35301238 : {}
      45              : 
      46              : void
      47      4645397 : DefaultASTVisitor::visit (AST::DelimTokenTree &delim_tok_tree)
      48              : {
      49     41696705 :   for (auto &token : delim_tok_tree.get_token_trees ())
      50     37051308 :     visit (token);
      51      4645397 : }
      52              : 
      53              : void
      54        28749 : DefaultASTVisitor::visit (AST::AttrInputMetaItemContainer &input)
      55              : {
      56        58185 :   for (auto &item : input.get_items ())
      57        29436 :     visit (item);
      58        28749 : }
      59              : 
      60              : void
      61     27083317 : DefaultASTVisitor::visit (AST::IdentifierExpr &ident_expr)
      62              : {
      63     27083317 :   visit_outer_attrs (ident_expr);
      64     27083317 : }
      65              : 
      66              : void
      67      3398238 : DefaultASTVisitor::visit (AST::Lifetime &lifetime)
      68      3398238 : {}
      69              : 
      70              : void
      71       174608 : DefaultASTVisitor::visit (AST::LifetimeParam &lifetime_param)
      72              : {
      73       174608 :   visit_outer_attrs (lifetime_param);
      74       174608 :   visit (lifetime_param.get_lifetime ());
      75       177628 :   for (auto &lifetime_bound : lifetime_param.get_lifetime_bounds ())
      76         3020 :     visit (lifetime_bound);
      77       174608 : }
      78              : 
      79              : void
      80        13097 : DefaultASTVisitor::visit (AST::ConstGenericParam &const_param)
      81              : {
      82        13097 :   visit_outer_attrs (const_param);
      83        13097 :   if (const_param.has_type ())
      84        13097 :     visit (const_param.get_type ());
      85        13097 :   if (const_param.has_default_value ())
      86          287 :     visit (const_param.get_default_value_unchecked ());
      87        13097 : }
      88              : 
      89              : void
      90      8133332 : DefaultASTVisitor::visit (AST::PathInExpression &path)
      91              : {
      92      8133332 :   visit_outer_attrs (path);
      93              : 
      94      8133332 :   if (!path.is_lang_item ())
      95     17465297 :     for (auto &segment : path.get_segments ())
      96      9361074 :       visit (segment);
      97      8133332 : }
      98              : 
      99              : void
     100     15971576 : DefaultASTVisitor::visit (AST::TypePathSegment &segment)
     101     15971576 : {}
     102              : 
     103              : void
     104        29203 : DefaultASTVisitor::visit (GenericArgsBinding &binding)
     105              : {
     106        29203 :   visit (binding.get_type ());
     107        29203 : }
     108              : 
     109              : void
     110      1551722 : DefaultASTVisitor::visit (AST::TypePathSegmentGeneric &segment)
     111              : {
     112      1551722 :   if (segment.has_generic_args ())
     113      1551708 :     visit (segment.get_generic_args ());
     114      1551722 : }
     115              : 
     116              : void
     117        98016 : DefaultASTVisitor::visit (AST::TypePathFunction &tpf)
     118              : {
     119       237941 :   for (auto &input : tpf.get_params ())
     120       139925 :     visit (input);
     121        98016 :   if (tpf.has_return_type ())
     122        94737 :     visit (tpf.get_return_type ());
     123        98016 : }
     124              : 
     125              : void
     126     20555282 : DefaultASTVisitor::visit (AST::PathIdentSegment &segment)
     127     20555282 : {}
     128              : 
     129              : void
     130        98016 : DefaultASTVisitor::visit (AST::TypePathSegmentFunction &segment)
     131              : {
     132        98016 :   visit (segment.get_type_path_function ());
     133        98016 :   visit (segment.get_ident_segment ());
     134        98016 : }
     135              : 
     136              : void
     137      1596764 : DefaultASTVisitor::visit (AST::GenericArgs &args)
     138              : {
     139      1755117 :   for (auto &lifetime : args.get_lifetime_args ())
     140       158353 :     visit (lifetime);
     141              : 
     142      3165962 :   for (auto &generic : args.get_generic_args ())
     143      1569198 :     visit (generic);
     144              : 
     145      1625637 :   for (auto &binding : args.get_binding_args ())
     146        28873 :     visit (binding);
     147      1596764 : }
     148              : 
     149              : void
     150     15648466 : DefaultASTVisitor::visit (AST::PathExprSegment &segment)
     151              : {
     152     15648466 :   visit (segment.get_ident_segment ());
     153     15648466 :   if (segment.has_generic_args ())
     154        63536 :     visit (segment.get_generic_args ());
     155     15648466 : }
     156              : void
     157     13259589 : DefaultASTVisitor::visit (AST::TypePath &path)
     158              : {
     159     27423466 :   for (auto &segment : path.get_segments ())
     160     14163877 :     visit (segment);
     161     13259589 : }
     162              : 
     163              : void
     164        24241 : DefaultASTVisitor::visit (AST::QualifiedPathInExpression &path)
     165              : {
     166        24241 :   visit_outer_attrs (path);
     167        24241 :   visit (path.get_qualified_path_type ());
     168              : 
     169        48482 :   for (auto &segment : path.get_segments ())
     170        24241 :     visit (segment);
     171        24241 : }
     172              : 
     173              : void
     174       562473 : DefaultASTVisitor::visit (AST::QualifiedPathType &path)
     175              : {
     176       562473 :   visit (path.get_type ());
     177       562473 :   if (path.has_as_clause ())
     178       544154 :     visit (path.get_as_type_path ());
     179       562473 : }
     180              : 
     181              : void
     182       644834 : DefaultASTVisitor::visit (AST::QualifiedPathInType &path)
     183              : {
     184       644834 :   visit (path.get_qualified_path_type ());
     185       644834 :   visit (path.get_associated_segment ());
     186              : 
     187       644834 :   for (auto &segment : path.get_segments ())
     188            0 :     visit (segment);
     189       644834 : }
     190              : 
     191              : void
     192     33743031 : DefaultASTVisitor::visit (AST::LiteralExpr &expr)
     193              : {
     194     33743031 :   visit_outer_attrs (expr);
     195     33743031 : }
     196              : 
     197              : void
     198     15796499 : DefaultASTVisitor::visit (AST::Attribute &attribute)
     199              : {
     200     15796499 :   visit (attribute.get_path ());
     201     15796499 :   if (attribute.has_attr_input ())
     202     13613300 :     visit (attribute.get_attr_input ());
     203     15796499 : }
     204              : 
     205              : void
     206      9305092 : DefaultASTVisitor::visit (AST::AttrInputLiteral &attr_input)
     207              : {
     208      9305092 :   visit (attr_input.get_literal ());
     209      9305092 : }
     210              : 
     211              : void
     212       214921 : DefaultASTVisitor::visit (AST::AttrInputExpr &attr_input)
     213              : {
     214       214921 :   visit (attr_input.get_expr ());
     215       214921 : }
     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     16367100 : DefaultASTVisitor::visit (AST::SimplePathSegment &segment)
     225     16367100 : {}
     226              : 
     227              : void
     228     16244920 : DefaultASTVisitor::visit (AST::SimplePath &path)
     229              : {
     230     32612020 :   for (auto &segment : path.get_segments ())
     231     16367100 :     visit (segment);
     232     16244920 : }
     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      1201806 : DefaultASTVisitor::visit (AST::BorrowExpr &expr)
     243              : {
     244      1201806 :   visit_outer_attrs (expr);
     245      1201806 :   visit (expr.get_borrowed_expr ());
     246      1201806 : }
     247              : 
     248              : void
     249       606680 : DefaultASTVisitor::visit (AST::DereferenceExpr &expr)
     250              : {
     251       606680 :   visit_outer_attrs (expr);
     252       606680 :   visit (expr.get_dereferenced_expr ());
     253       606680 : }
     254              : 
     255              : void
     256        83786 : DefaultASTVisitor::visit (AST::ErrorPropagationExpr &expr)
     257              : {
     258        83786 :   visit_outer_attrs (expr);
     259        83786 :   visit (expr.get_propagating_expr ());
     260        83786 : }
     261              : 
     262              : void
     263       187995 : DefaultASTVisitor::visit (AST::NegationExpr &expr)
     264              : {
     265       187995 :   visit_outer_attrs (expr);
     266       187995 :   visit (expr.get_negated_expr ());
     267       187995 : }
     268              : 
     269              : void
     270      6293043 : DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr &expr)
     271              : {
     272      6293043 :   visit_outer_attrs (expr);
     273      6293043 :   visit (expr.get_left_expr ());
     274      6293043 :   visit (expr.get_right_expr ());
     275      6293043 : }
     276              : 
     277              : void
     278       575573 : DefaultASTVisitor::visit (AST::ComparisonExpr &expr)
     279              : {
     280       575573 :   visit_outer_attrs (expr);
     281       575573 :   visit (expr.get_left_expr ());
     282       575573 :   visit (expr.get_right_expr ());
     283       575573 : }
     284              : 
     285              : void
     286       143121 : DefaultASTVisitor::visit (AST::LazyBooleanExpr &expr)
     287              : {
     288       143121 :   visit_outer_attrs (expr);
     289       143121 :   visit (expr.get_left_expr ());
     290       143121 :   visit (expr.get_right_expr ());
     291       143121 : }
     292              : 
     293              : void
     294       959031 : DefaultASTVisitor::visit (AST::TypeCastExpr &expr)
     295              : {
     296       959031 :   visit_outer_attrs (expr);
     297       959031 :   visit (expr.get_casted_expr ());
     298       959031 :   visit (expr.get_type_to_cast_to ());
     299       959031 : }
     300              : 
     301              : void
     302       393944 : DefaultASTVisitor::visit (AST::AssignmentExpr &expr)
     303              : {
     304       393944 :   visit_outer_attrs (expr);
     305       393944 :   visit (expr.get_left_expr ());
     306       393944 :   visit (expr.get_right_expr ());
     307       393944 : }
     308              : 
     309              : void
     310       237522 : DefaultASTVisitor::visit (AST::CompoundAssignmentExpr &expr)
     311              : {
     312       237522 :   visit_outer_attrs (expr);
     313       237522 :   visit (expr.get_left_expr ());
     314       237522 :   visit (expr.get_right_expr ());
     315       237522 : }
     316              : 
     317              : void
     318      1148951 : DefaultASTVisitor::visit (AST::GroupedExpr &expr)
     319              : {
     320      1148951 :   visit_outer_attrs (expr);
     321      1148951 :   visit_inner_attrs (expr);
     322      1148951 :   visit (expr.get_expr_in_parens ());
     323      1148951 : }
     324              : 
     325              : void
     326      1293714 : DefaultASTVisitor::visit (AST::ArrayElemsValues &elems)
     327              : {
     328     13597388 :   for (auto &value : elems.get_values ())
     329     12303674 :     visit (value);
     330      1293714 : }
     331              : 
     332              : void
     333        11246 : DefaultASTVisitor::visit (AST::ArrayElemsCopied &elems)
     334              : {
     335        11246 :   visit (elems.get_elem_to_copy ());
     336        11246 :   visit (elems.get_num_copies ());
     337        11246 : }
     338              : 
     339              : void
     340      2510512 : DefaultASTVisitor::visit (AST::ArrayExpr &expr)
     341              : {
     342      2510512 :   visit_outer_attrs (expr);
     343      2510512 :   visit_inner_attrs (expr);
     344      2510512 :   visit (expr.get_array_elems ());
     345      2510512 : }
     346              : 
     347              : void
     348       165565 : DefaultASTVisitor::visit (AST::ArrayIndexExpr &expr)
     349              : {
     350       165565 :   visit_outer_attrs (expr);
     351       165565 :   visit (expr.get_array_expr ());
     352       165565 :   visit (expr.get_index_expr ());
     353       165565 : }
     354              : 
     355              : void
     356       444671 : DefaultASTVisitor::visit (AST::TupleExpr &expr)
     357              : {
     358       444671 :   visit_outer_attrs (expr);
     359       444671 :   visit_inner_attrs (expr);
     360      1272959 :   for (auto &elem : expr.get_tuple_elems ())
     361       828288 :     visit (elem);
     362       444671 : }
     363              : 
     364              : void
     365       795883 : DefaultASTVisitor::visit (AST::TupleIndexExpr &expr)
     366              : {
     367       795883 :   visit_outer_attrs (expr);
     368       795883 :   visit (expr.get_tuple_expr ());
     369       795883 : }
     370              : 
     371              : void
     372         4588 : DefaultASTVisitor::visit (AST::StructExprStruct &expr)
     373              : {
     374         4588 :   visit_outer_attrs (expr);
     375         4588 :   visit_inner_attrs (expr);
     376         4588 :   visit (expr.get_struct_name ());
     377         4588 : }
     378              : 
     379              : void
     380        48539 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifier &field)
     381        48539 : {}
     382              : 
     383              : void
     384       180807 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue &field)
     385              : {
     386       180807 :   visit (field.get_value ());
     387       180807 : }
     388              : 
     389              : void
     390          748 : DefaultASTVisitor::visit (AST::StructExprFieldIndexValue &field)
     391              : {
     392          748 :   visit (field.get_value ());
     393          748 : }
     394              : 
     395              : void
     396         1674 : DefaultASTVisitor::visit (AST::StructBase &base)
     397              : {
     398         1674 :   visit (base.get_base_struct ());
     399         1674 : }
     400              : 
     401              : void
     402       148350 : DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
     403              : {
     404       148350 :   visit_outer_attrs (expr);
     405       148350 :   visit_inner_attrs (expr);
     406       148350 :   visit (expr.get_struct_name ());
     407       148350 :   if (expr.has_struct_base ())
     408         2132 :     visit (expr.get_struct_base ());
     409       429439 :   for (auto &field : expr.get_fields ())
     410       281089 :     visit (field);
     411       148350 : }
     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     10665490 : DefaultASTVisitor::visit (AST::CallExpr &expr)
     424              : {
     425     10665490 :   visit_outer_attrs (expr);
     426     10665490 :   visit (expr.get_function_expr ());
     427     37297744 :   for (auto &param : expr.get_params ())
     428     26632255 :     visit (param);
     429     10665489 : }
     430              : 
     431              : void
     432      6263151 : DefaultASTVisitor::visit (AST::MethodCallExpr &expr)
     433              : {
     434      6263151 :   visit_outer_attrs (expr);
     435      6263151 :   visit (expr.get_receiver_expr ());
     436      6263151 :   visit (expr.get_method_name ());
     437      7227096 :   for (auto &param : expr.get_params ())
     438       963945 :     visit (param);
     439      6263151 : }
     440              : 
     441              : void
     442      1033322 : DefaultASTVisitor::visit (AST::FieldAccessExpr &expr)
     443              : {
     444      1033322 :   visit_outer_attrs (expr);
     445      1033322 :   visit (expr.get_receiver_expr ());
     446      1033322 : }
     447              : 
     448              : void
     449        56611 : DefaultASTVisitor::visit (AST::ClosureExprInner &expr)
     450              : {
     451        56611 :   visit_outer_attrs (expr);
     452       122908 :   for (auto &param : expr.get_params ())
     453        66297 :     visit (param);
     454        56611 :   visit (expr.get_definition_expr ());
     455        56611 : }
     456              : 
     457              : void
     458      3456427 : DefaultASTVisitor::visit (AST::BlockExpr &expr)
     459              : {
     460      3456427 :   visit_outer_attrs (expr);
     461      3456427 :   visit_inner_attrs (expr);
     462              : 
     463      3456427 :   if (expr.has_label ())
     464           51 :     visit (expr.get_label ());
     465              : 
     466      5493129 :   for (auto &stmt : expr.get_statements ())
     467      2036705 :     visit (stmt);
     468              : 
     469      3456424 :   if (expr.has_tail_expr ())
     470      2921991 :     visit (expr.get_tail_expr ());
     471      3456422 : }
     472              : 
     473              : void
     474          280 : DefaultASTVisitor::visit (AST::ConstBlock &expr)
     475              : {
     476          280 :   visit (expr.get_const_expr ());
     477          280 : }
     478              : 
     479              : void
     480        68070 : DefaultASTVisitor::visit (AST::AnonConst &expr)
     481              : {
     482        68070 :   if (!expr.is_deferred ())
     483        67847 :     visit (expr.get_inner_expr ());
     484        68070 : }
     485              : 
     486              : void
     487          438 : DefaultASTVisitor::visit (AST::ClosureExprInnerTyped &expr)
     488              : {
     489          438 :   visit_outer_attrs (expr);
     490          953 :   for (auto &param : expr.get_params ())
     491          515 :     visit (param);
     492          438 :   visit (expr.get_return_type ());
     493          438 :   visit (expr.get_definition_expr ());
     494          438 : }
     495              : 
     496              : void
     497        92690 : DefaultASTVisitor::visit (AST::ClosureParam &param)
     498              : {
     499        92690 :   visit_outer_attrs (param);
     500        92690 :   visit (param.get_pattern ());
     501        92690 :   if (param.has_type_given ())
     502         5252 :     visit (param.get_type ());
     503        92690 : }
     504              : 
     505              : void
     506         1886 : DefaultASTVisitor::visit (AST::ContinueExpr &expr)
     507              : {
     508         1886 :   visit_outer_attrs (expr);
     509         1886 :   if (expr.has_label ())
     510          757 :     visit (expr.get_label_unchecked ());
     511         1886 : }
     512              : 
     513              : void
     514        14695 : DefaultASTVisitor::visit (AST::BreakExpr &expr)
     515              : {
     516        14695 :   visit_outer_attrs (expr);
     517        14695 :   if (expr.has_label ())
     518          809 :     visit (expr.get_label_unchecked ());
     519              : 
     520        14695 :   if (expr.has_break_expr ())
     521          630 :     visit (expr.get_break_expr_unchecked ());
     522        14694 : }
     523              : 
     524              : void
     525        53541 : DefaultASTVisitor::visit (AST::RangeFromToExpr &expr)
     526              : {
     527        53541 :   visit (expr.get_from_expr ());
     528        53541 :   visit (expr.get_to_expr ());
     529        53541 : }
     530              : 
     531              : void
     532        21948 : DefaultASTVisitor::visit (AST::RangeFromExpr &expr)
     533              : {
     534        21948 :   visit (expr.get_from_expr ());
     535        21948 : }
     536              : 
     537              : void
     538        34033 : DefaultASTVisitor::visit (AST::RangeToExpr &expr)
     539              : {
     540        34033 :   visit (expr.get_to_expr ());
     541        34033 : }
     542              : 
     543              : void
     544        14531 : DefaultASTVisitor::visit (AST::RangeFullExpr &expr)
     545        14531 : {}
     546              : 
     547              : void
     548         1205 : DefaultASTVisitor::visit (AST::RangeFromToInclExpr &expr)
     549              : {
     550         1205 :   visit (expr.get_from_expr ());
     551         1205 :   visit (expr.get_to_expr ());
     552         1205 : }
     553              : 
     554              : void
     555            0 : DefaultASTVisitor::visit (AST::RangeToInclExpr &expr)
     556              : {
     557            0 :   visit (expr.get_to_expr ());
     558            0 : }
     559              : 
     560              : void
     561       140027 : DefaultASTVisitor::visit (AST::ReturnExpr &expr)
     562              : {
     563       140027 :   visit_outer_attrs (expr);
     564       140027 :   if (expr.has_returned_expr ())
     565       135724 :     visit (expr.get_returned_expr ());
     566       140027 : }
     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           69 : DefaultASTVisitor::visit (AST::BoxExpr &expr)
     577              : {
     578           69 :   visit_outer_attrs (expr);
     579           69 :   visit (expr.get_boxed_expr ());
     580           69 : }
     581              : 
     582              : void
     583       286384 : DefaultASTVisitor::visit (AST::UnsafeBlockExpr &expr)
     584              : {
     585       286384 :   visit_outer_attrs (expr);
     586       286384 :   visit (expr.get_block_expr ());
     587       286384 : }
     588              : 
     589              : void
     590         2529 : DefaultASTVisitor::visit (AST::LoopLabel &label)
     591              : {
     592         2529 :   visit (label.get_lifetime ());
     593         2529 : }
     594              : 
     595              : void
     596         9637 : DefaultASTVisitor::visit (AST::LoopExpr &expr)
     597              : {
     598         9637 :   visit_outer_attrs (expr);
     599         9637 :   if (expr.has_loop_label ())
     600         1125 :     visit (expr.get_loop_label ());
     601         9637 :   visit (expr.get_loop_block ());
     602         9636 : }
     603              : 
     604              : void
     605        26546 : DefaultASTVisitor::visit (AST::WhileLoopExpr &expr)
     606              : {
     607        26546 :   visit_outer_attrs (expr);
     608        26546 :   if (expr.has_loop_label ())
     609          117 :     visit (expr.get_loop_label ());
     610        26546 :   visit (expr.get_predicate_expr ());
     611        26546 :   visit (expr.get_loop_block ());
     612        26546 : }
     613              : 
     614              : void
     615         5358 : DefaultASTVisitor::visit (AST::WhileLetLoopExpr &expr)
     616              : {
     617         5358 :   visit_outer_attrs (expr);
     618         5358 :   visit (expr.get_pattern ());
     619              : 
     620         5358 :   if (expr.has_loop_label ())
     621            9 :     visit (expr.get_loop_label ());
     622              : 
     623         5358 :   visit (expr.get_scrutinee_expr ());
     624         5358 :   visit (expr.get_loop_block ());
     625         5358 : }
     626              : 
     627              : void
     628        26568 : DefaultASTVisitor::visit (AST::ForLoopExpr &expr)
     629              : {
     630        26568 :   visit_outer_attrs (expr);
     631        26568 :   visit (expr.get_pattern ());
     632        26568 :   visit (expr.get_iterator_expr ());
     633        26568 :   if (expr.has_loop_label ())
     634            0 :     visit (expr.get_loop_label ());
     635        26568 :   visit (expr.get_loop_block ());
     636        26568 : }
     637              : 
     638              : void
     639       424776 : DefaultASTVisitor::visit (AST::IfExpr &expr)
     640              : {
     641       424776 :   visit_outer_attrs (expr);
     642       424776 :   visit (expr.get_condition_expr ());
     643       424776 :   visit (expr.get_if_block ());
     644       424776 : }
     645              : 
     646              : void
     647       271221 : DefaultASTVisitor::visit (AST::IfExprConseqElse &expr)
     648              : {
     649       271221 :   visit (reinterpret_cast<AST::IfExpr &> (expr));
     650       271221 :   visit (expr.get_else_block ());
     651       271221 : }
     652              : 
     653              : void
     654        14421 : DefaultASTVisitor::visit (AST::IfLetExpr &expr)
     655              : {
     656        14421 :   visit_outer_attrs (expr);
     657        14421 :   visit (expr.get_pattern ());
     658        14421 :   visit (expr.get_value_expr ());
     659        14421 :   visit (expr.get_if_block ());
     660        14421 : }
     661              : 
     662              : void
     663         4920 : DefaultASTVisitor::visit (AST::IfLetExprConseqElse &expr)
     664              : {
     665         4920 :   visit (reinterpret_cast<AST::IfLetExpr &> (expr));
     666         4920 :   visit (expr.get_else_block ());
     667         4920 : }
     668              : 
     669              : void
     670      7775723 : DefaultASTVisitor::visit (AST::MatchArm &arm)
     671              : {
     672      7775723 :   visit_outer_attrs (arm);
     673      7775723 :   visit (arm.get_pattern ());
     674      7775723 :   if (arm.has_match_arm_guard ())
     675         6074 :     visit (arm.get_guard_expr ());
     676      7775723 : }
     677              : 
     678              : void
     679      7826825 : DefaultASTVisitor::visit (AST::MatchCase &arm)
     680              : {
     681      7826825 :   visit (arm.get_arm ());
     682      7826825 :   visit (arm.get_expr ());
     683      7826824 : }
     684              : 
     685              : void
     686       782088 : DefaultASTVisitor::visit (AST::MatchExpr &expr)
     687              : {
     688       782088 :   visit_outer_attrs (expr);
     689       782088 :   visit_inner_attrs (expr);
     690       782088 :   visit (expr.get_scrutinee_expr ());
     691      8608911 :   for (auto &arm : expr.get_match_cases ())
     692      7826825 :     visit (arm);
     693       782086 : }
     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         2206 : DefaultASTVisitor::visit (AST::LlvmInlineAsm &expr)
     761              : {
     762         5198 :   for (auto &output : expr.get_outputs ())
     763         2992 :     visit (output.expr);
     764              : 
     765         4588 :   for (auto &input : expr.get_inputs ())
     766         2382 :     visit (input.expr);
     767         2206 : }
     768              : 
     769              : void
     770       685884 : DefaultASTVisitor::visit (AST::TypeParam &param)
     771              : {
     772       685884 :   visit_outer_attrs (param);
     773       880004 :   for (auto &bound : param.get_type_param_bounds ())
     774       194120 :     visit (bound);
     775       685884 :   if (param.has_type ())
     776         6378 :     visit (param.get_type ());
     777       685884 : }
     778              : 
     779              : void
     780          253 : DefaultASTVisitor::visit (AST::LifetimeWhereClauseItem &item)
     781              : {
     782          253 :   visit (item.get_lifetime ());
     783          506 :   for (auto &bound : item.get_lifetime_bounds ())
     784          253 :     visit (bound);
     785          253 : }
     786              : 
     787              : void
     788       182983 : DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
     789              : {
     790       183299 :   for (auto &lifetime : item.get_for_lifetimes ())
     791          316 :     visit (lifetime);
     792       182983 :   visit (item.get_type ());
     793       374248 :   for (auto &param : item.get_type_param_bounds ())
     794       191265 :     visit (param);
     795       182983 : }
     796              : 
     797              : void
     798      5860807 : DefaultASTVisitor::visit (AST::Visibility &vis)
     799              : {
     800      5860807 :   if (vis.has_path ())
     801        63460 :     visit (vis.get_path ());
     802      5860807 : }
     803              : 
     804              : void
     805      2970756 : DefaultASTVisitor::visit (AST::FunctionQualifiers &qualifiers)
     806      2970756 : {}
     807              : 
     808              : void
     809       163165 : DefaultASTVisitor::visit (AST::WhereClause &where)
     810              : {
     811       385763 :   for (auto &item : where.get_items ())
     812       222598 :     visit (item);
     813       163165 : }
     814              : void
     815      2563309 : DefaultASTVisitor::visit (AST::FunctionParam &param)
     816              : {
     817      2563309 :   visit_outer_attrs (param);
     818      2563309 :   if (param.has_name ())
     819      2563309 :     visit (param.get_pattern ());
     820              : 
     821      2563309 :   visit (param.get_type ());
     822      2563309 : }
     823              : 
     824              : void
     825      1567200 : DefaultASTVisitor::visit (AST::SelfParam &param)
     826              : {
     827      1567200 :   visit_outer_attrs (param);
     828              : 
     829      1567200 :   if (param.has_lifetime ())
     830       731135 :     visit (param.get_lifetime ());
     831              : 
     832      1567200 :   if (param.has_type ())
     833         2440 :     visit (param.get_type ());
     834      1567200 : }
     835              : 
     836              : void
     837        47746 : DefaultASTVisitor::visit (AST::Module &module)
     838              : {
     839        47746 :   visit_outer_attrs (module);
     840        47746 :   visit (module.get_visibility ());
     841        47746 :   visit_inner_attrs (module);
     842      1326252 :   for (auto &item : module.get_items ())
     843      1278506 :     visit (item);
     844        47746 : }
     845              : 
     846              : void
     847          266 : DefaultASTVisitor::visit (AST::ExternCrate &crate)
     848              : {
     849          266 :   visit_outer_attrs (crate);
     850          266 :   visit (crate.get_visibility ());
     851          266 : }
     852              : 
     853              : void
     854         7456 : DefaultASTVisitor::visit (AST::UseTreeGlob &use_tree)
     855              : {
     856         7456 :   visit (use_tree.get_path ());
     857         7456 : }
     858              : 
     859              : void
     860        25172 : DefaultASTVisitor::visit (AST::UseTreeList &use_tree)
     861              : {
     862        25172 :   visit (use_tree.get_path ());
     863        25172 : }
     864              : 
     865              : void
     866        54197 : DefaultASTVisitor::visit (AST::UseTreeRebind &use_tree)
     867              : {
     868        54197 :   visit (use_tree.get_path ());
     869        54197 : }
     870              : 
     871              : void
     872        86910 : DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
     873              : {
     874        86910 :   visit (use_decl.get_visibility ());
     875        86910 :   visit (use_decl.get_tree ());
     876        86910 : }
     877              : 
     878              : void
     879      2352217 : DefaultASTVisitor::visit_function_params (AST::Function &function)
     880              : {
     881      6453430 :   for (auto &param : function.get_function_params ())
     882      4101213 :     visit (param);
     883      2352217 : }
     884              : 
     885              : void
     886      2383643 : DefaultASTVisitor::visit (AST::Function &function)
     887              : {
     888      2383643 :   visit_outer_attrs (function);
     889      2383643 :   visit (function.get_visibility ());
     890      2383643 :   visit (function.get_qualifiers ());
     891      2671982 :   for (auto &generic : function.get_generic_params ())
     892       288339 :     visit (generic);
     893              : 
     894      2383643 :   visit_function_params (function);
     895              : 
     896      2383643 :   if (function.has_return_type ())
     897      2023769 :     visit (function.get_return_type ());
     898      2383643 :   if (function.has_where_clause ())
     899        78584 :     visit (function.get_where_clause ());
     900      2383643 :   if (function.has_body ())
     901      2157747 :     visit (*function.get_definition ());
     902      2383641 : }
     903              : 
     904              : void
     905       475603 : DefaultASTVisitor::visit (AST::TypeAlias &type_alias)
     906              : {
     907       475603 :   visit_outer_attrs (type_alias);
     908       475603 :   visit (type_alias.get_visibility ());
     909       476085 :   for (auto &generic : type_alias.get_generic_params ())
     910          482 :     visit (generic);
     911       475603 :   if (type_alias.has_where_clause ())
     912            0 :     visit (type_alias.get_where_clause ());
     913       475603 :   visit (type_alias.get_type_aliased ());
     914       475603 : }
     915              : 
     916              : void
     917       104176 : DefaultASTVisitor::visit (AST::StructField &field)
     918              : {
     919       104176 :   visit_outer_attrs (field);
     920       104176 :   visit (field.get_visibility ());
     921       104176 :   visit (field.get_field_type ());
     922       104176 : }
     923              : 
     924              : void
     925       227934 : DefaultASTVisitor::visit (AST::StructStruct &struct_item)
     926              : {
     927       227934 :   visit_outer_attrs (struct_item);
     928       227934 :   visit (struct_item.get_visibility ());
     929       291602 :   for (auto &generic : struct_item.get_generic_params ())
     930        63668 :     visit (generic);
     931       227934 :   if (struct_item.has_where_clause ())
     932         2053 :     visit (struct_item.get_where_clause ());
     933       343697 :   for (auto &field : struct_item.get_fields ())
     934       115763 :     visit (field);
     935       227934 : }
     936              : 
     937              : void
     938       105587 : DefaultASTVisitor::visit (AST::TupleField &field)
     939              : {
     940       105587 :   visit_outer_attrs (field);
     941       105587 :   visit (field.get_visibility ());
     942       105587 :   visit (field.get_field_type ());
     943       105587 : }
     944              : 
     945              : void
     946        37923 : DefaultASTVisitor::visit (AST::TupleStruct &tuple_struct)
     947              : {
     948        37923 :   visit_outer_attrs (tuple_struct);
     949        37923 :   visit (tuple_struct.get_visibility ());
     950        52671 :   for (auto &generic : tuple_struct.get_generic_params ())
     951        14748 :     visit (generic);
     952        37923 :   if (tuple_struct.has_where_clause ())
     953          183 :     visit (tuple_struct.get_where_clause ());
     954       153867 :   for (auto &field : tuple_struct.get_fields ())
     955       115944 :     visit (field);
     956        37923 : }
     957              : 
     958              : void
     959        38955 : DefaultASTVisitor::visit (AST::EnumItem &item)
     960              : {
     961        38955 :   visit_outer_attrs (item);
     962        38955 :   visit (item.get_visibility ());
     963        38955 : }
     964              : 
     965              : void
     966        12520 : DefaultASTVisitor::visit (AST::EnumItemTuple &item)
     967              : {
     968        12520 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     969        26337 :   for (auto &field : item.get_tuple_fields ())
     970        13817 :     visit (field);
     971        12520 : }
     972              : 
     973              : void
     974         1688 : DefaultASTVisitor::visit (AST::EnumItemStruct &item)
     975              : {
     976         1688 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     977         4429 :   for (auto &field : item.get_struct_fields ())
     978         2741 :     visit (field);
     979         1688 : }
     980              : 
     981              : void
     982         6295 : DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
     983              : {
     984         6295 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     985         6295 :   visit (item.get_expr ());
     986         6295 : }
     987              : 
     988              : void
     989        19732 : DefaultASTVisitor::visit (AST::Enum &enum_item)
     990              : {
     991        19732 :   visit_outer_attrs (enum_item);
     992        19732 :   visit (enum_item.get_visibility ());
     993        29123 :   for (auto &generic : enum_item.get_generic_params ())
     994         9391 :     visit (generic);
     995        19732 :   if (enum_item.has_where_clause ())
     996            0 :     visit (enum_item.get_where_clause ());
     997        69580 :   for (auto &item : enum_item.get_variants ())
     998        49848 :     visit (item);
     999        19732 : }
    1000              : 
    1001              : void
    1002         2516 : DefaultASTVisitor::visit (AST::Union &union_item)
    1003              : {
    1004         2516 :   visit_outer_attrs (union_item);
    1005         2516 :   visit (union_item.get_visibility ());
    1006         4361 :   for (auto &generic : union_item.get_generic_params ())
    1007         1845 :     visit (generic);
    1008         2516 :   if (union_item.has_where_clause ())
    1009            0 :     visit (union_item.get_where_clause ());
    1010         9592 :   for (auto &variant : union_item.get_variants ())
    1011         7076 :     visit (variant);
    1012         2516 : }
    1013              : 
    1014              : void
    1015       120124 : DefaultASTVisitor::visit (AST::ConstantItem &const_item)
    1016              : {
    1017       120124 :   visit_outer_attrs (const_item);
    1018       120124 :   visit (const_item.get_visibility ());
    1019       120124 :   visit (const_item.get_type ());
    1020       120124 :   if (const_item.has_expr ())
    1021       116050 :     visit (const_item.get_expr ());
    1022       120124 : }
    1023              : 
    1024              : void
    1025         6208 : DefaultASTVisitor::visit (AST::StaticItem &static_item)
    1026              : {
    1027         6208 :   visit_outer_attrs (static_item);
    1028         6208 :   visit (static_item.get_visibility ());
    1029         6208 :   visit (static_item.get_type ());
    1030         6208 :   visit (static_item.get_expr ());
    1031         6208 : }
    1032              : 
    1033              : void
    1034        28966 : DefaultASTVisitor::visit (AST::TraitItemType &item)
    1035              : {
    1036        28966 :   visit_outer_attrs (item);
    1037        29380 :   for (auto &generic : item.get_generic_params ())
    1038          414 :     visit (generic);
    1039        35219 :   for (auto &bound : item.get_type_param_bounds ())
    1040         6253 :     visit (bound);
    1041        28966 : }
    1042              : 
    1043              : void
    1044        56400 : DefaultASTVisitor::visit (AST::Trait &trait)
    1045              : {
    1046        56400 :   visit_outer_attrs (trait);
    1047        56400 :   visit (trait.get_visibility ());
    1048              : 
    1049        56400 :   visit_inner_attrs (trait);
    1050              : 
    1051        56400 :   visit (trait.get_implicit_self ());
    1052              : 
    1053        68695 :   for (auto &generic : trait.get_generic_params ())
    1054        12295 :     visit (generic);
    1055              : 
    1056        56400 :   if (trait.has_where_clause ())
    1057           91 :     visit (trait.get_where_clause ());
    1058              : 
    1059        69407 :   for (auto &bound : trait.get_type_param_bounds ())
    1060        13007 :     visit (bound);
    1061              : 
    1062       125269 :   for (auto &item : trait.get_trait_items ())
    1063        68869 :     visit (item);
    1064        56400 : }
    1065              : 
    1066              : void
    1067        32789 : DefaultASTVisitor::visit (AST::InherentImpl &impl)
    1068              : {
    1069        32789 :   visit_outer_attrs (impl);
    1070        32789 :   visit (impl.get_visibility ());
    1071              : 
    1072        56453 :   for (auto &generic : impl.get_generic_params ())
    1073        23664 :     visit (generic);
    1074        32789 :   if (impl.has_where_clause ())
    1075          236 :     visit (impl.get_where_clause ());
    1076        32789 :   visit (impl.get_type ());
    1077        32789 :   visit_inner_attrs (impl);
    1078       224287 :   for (auto &item : impl.get_impl_items ())
    1079       191498 :     visit (item);
    1080        32789 : }
    1081              : 
    1082              : void
    1083       529517 : DefaultASTVisitor::visit (AST::TraitImpl &impl)
    1084              : {
    1085       529517 :   visit_outer_attrs (impl);
    1086       529517 :   visit (impl.get_visibility ());
    1087              : 
    1088      1014106 :   for (auto &generic : impl.get_generic_params ())
    1089       484589 :     visit (generic);
    1090       529517 :   if (impl.has_where_clause ())
    1091        27265 :     visit (impl.get_where_clause ());
    1092       529517 :   visit (impl.get_type ());
    1093       529517 :   visit (impl.get_trait_path ());
    1094       529517 :   visit_inner_attrs (impl);
    1095      1276201 :   for (auto &item : impl.get_impl_items ())
    1096       746684 :     visit (item);
    1097       529517 : }
    1098              : 
    1099              : void
    1100          179 : DefaultASTVisitor::visit (AST::ExternalTypeItem &item)
    1101              : {
    1102          179 :   visit_outer_attrs (item);
    1103          179 :   visit (item.get_visibility ());
    1104          179 : }
    1105              : 
    1106              : void
    1107           16 : DefaultASTVisitor::visit (AST::ExternalStaticItem &item)
    1108              : {
    1109           16 :   visit_outer_attrs (item);
    1110           16 :   visit (item.get_visibility ());
    1111           16 :   visit (item.get_type ());
    1112           16 : }
    1113              : 
    1114              : void
    1115        29504 : DefaultASTVisitor::visit (AST::ExternBlock &block)
    1116              : {
    1117        29504 :   visit_outer_attrs (block);
    1118        29504 :   visit (block.get_visibility ());
    1119        29504 :   visit_inner_attrs (block);
    1120       159783 :   for (auto &item : block.get_extern_items ())
    1121       130279 :     visit (item);
    1122        29504 : }
    1123              : 
    1124              : void
    1125       221222 : DefaultASTVisitor::visit (AST::MacroMatchFragment &match)
    1126       221222 : {}
    1127              : 
    1128              : void
    1129        29273 : DefaultASTVisitor::visit (AST::MacroMatchRepetition &match)
    1130              : {
    1131        71922 :   for (auto &m : match.get_matches ())
    1132        42649 :     visit (m);
    1133        29273 : }
    1134              : 
    1135              : void
    1136       112607 : DefaultASTVisitor::visit (AST::MacroMatcher &matcher)
    1137              : {
    1138       466063 :   for (auto &m : matcher.get_matches ())
    1139       353456 :     visit (m);
    1140       112607 : }
    1141              : 
    1142              : void
    1143       107122 : DefaultASTVisitor::visit (AST::MacroTranscriber &transcriber)
    1144              : {
    1145       107122 :   visit (transcriber.get_token_tree ());
    1146       107122 : }
    1147              : 
    1148              : void
    1149       107122 : DefaultASTVisitor::visit (AST::MacroRule &rule)
    1150              : {
    1151       107122 :   visit (rule.get_matcher ());
    1152       107122 :   visit (rule.get_transcriber ());
    1153       107122 : }
    1154              : void
    1155        97214 : DefaultASTVisitor::visit (AST::MacroRulesDefinition &rules_def)
    1156              : {
    1157        97214 :   visit_outer_attrs (rules_def);
    1158       204336 :   for (auto &rule : rules_def.get_macro_rules ())
    1159       107122 :     visit (rule);
    1160        97214 : }
    1161              : 
    1162              : void
    1163       280290 : DefaultASTVisitor::visit (AST::MacroInvocData &data)
    1164              : {
    1165       280290 :   visit (data.get_path ());
    1166       280290 :   visit (data.get_delim_tok_tree ());
    1167       280290 : }
    1168              : void
    1169       280290 : DefaultASTVisitor::visit (AST::MacroInvocation &macro_invoc)
    1170              : {
    1171       280290 :   visit_outer_attrs (macro_invoc);
    1172       280290 :   visit (macro_invoc.get_invoc_data ());
    1173       280290 : }
    1174              : 
    1175              : void
    1176         2144 : DefaultASTVisitor::visit (AST::MetaItemPath &meta_item)
    1177              : {
    1178         2144 :   visit (meta_item.get_path ());
    1179         2144 : }
    1180              : 
    1181              : void
    1182        15701 : DefaultASTVisitor::visit (AST::MetaItemSeq &meta_item)
    1183              : {
    1184        15701 :   visit (meta_item.get_path ());
    1185        36049 :   for (auto &inner : meta_item.get_seq ())
    1186        20348 :     visit (inner);
    1187        15701 : }
    1188              : 
    1189              : void
    1190        11466 : DefaultASTVisitor::visit (AST::MetaWord &meta_item)
    1191        11466 : {}
    1192              : 
    1193              : void
    1194        27527 : DefaultASTVisitor::visit (AST::MetaNameValueStr &meta_item)
    1195        27527 : {}
    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     10424750 : DefaultASTVisitor::visit (AST::LiteralPattern &pattern)
    1213     10424750 : {}
    1214              : 
    1215              : void
    1216      1769352 : DefaultASTVisitor::visit (AST::IdentifierPattern &pattern)
    1217              : {
    1218      1769352 :   if (pattern.has_subpattern ())
    1219         2660 :     visit (pattern.get_subpattern ());
    1220      1769352 : }
    1221              : 
    1222              : void
    1223      1035319 : DefaultASTVisitor::visit (AST::WildcardPattern &pattern)
    1224      1035319 : {}
    1225              : 
    1226              : void
    1227         3619 : DefaultASTVisitor::visit (AST::RestPattern &pattern)
    1228         3619 : {}
    1229              : 
    1230              : void
    1231        47113 : DefaultASTVisitor::visit (AST::RangePatternBoundLiteral &bound)
    1232        47113 : {}
    1233              : 
    1234              : void
    1235          357 : DefaultASTVisitor::visit (AST::RangePatternBoundPath &bound)
    1236              : {
    1237          357 :   visit (bound.get_path ());
    1238          357 : }
    1239              : 
    1240              : void
    1241            0 : DefaultASTVisitor::visit (AST::RangePatternBoundQualPath &bound)
    1242              : {
    1243            0 :   visit (bound.get_qualified_path ());
    1244            0 : }
    1245              : 
    1246              : void
    1247        18348 : DefaultASTVisitor::visit (AST::RangePattern &pattern)
    1248              : {
    1249        18348 :   if (pattern.get_has_lower_bound ())
    1250        18348 :     visit (pattern.get_lower_bound ());
    1251        18348 :   if (pattern.get_has_upper_bound ())
    1252        18348 :     visit (pattern.get_upper_bound ());
    1253        18348 : }
    1254              : 
    1255              : void
    1256        45257 : DefaultASTVisitor::visit (AST::ReferencePattern &pattern)
    1257              : {
    1258        45257 :   visit (pattern.get_referenced_pattern ());
    1259        45257 : }
    1260              : 
    1261              : void
    1262          390 : DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat &field)
    1263              : {
    1264          390 :   visit_outer_attrs (field);
    1265          390 :   visit (field.get_index_pattern ());
    1266          390 : }
    1267              : 
    1268              : void
    1269         9885 : DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat &field)
    1270              : {
    1271         9885 :   visit_outer_attrs (field);
    1272         9885 :   visit (field.get_ident_pattern ());
    1273         9885 : }
    1274              : 
    1275              : void
    1276         3358 : DefaultASTVisitor::visit (AST::StructPatternFieldIdent &field)
    1277              : {
    1278         3358 :   visit_outer_attrs (field);
    1279         3358 : }
    1280              : 
    1281              : void
    1282        10515 : DefaultASTVisitor::visit (AST::StructPatternElements &spe)
    1283              : {
    1284        25210 :   for (auto &field : spe.get_struct_pattern_fields ())
    1285        14695 :     visit (field);
    1286        10515 :   for (auto &attribute : spe.get_etc_outer_attrs ())
    1287            0 :     visit (attribute);
    1288        10515 : }
    1289              : 
    1290              : void
    1291        10515 : DefaultASTVisitor::visit (AST::StructPattern &pattern)
    1292              : {
    1293        10515 :   visit (pattern.get_path ());
    1294        10515 :   visit (pattern.get_struct_pattern_elems ());
    1295        10515 : }
    1296              : 
    1297              : void
    1298       183721 : DefaultASTVisitor::visit (AST::TupleStructItemsNoRest &tuple_items)
    1299              : {
    1300       374445 :   for (auto &pattern : tuple_items.get_patterns ())
    1301       190724 :     visit (pattern);
    1302       183721 : }
    1303              : 
    1304              : void
    1305         2164 : DefaultASTVisitor::visit (AST::TupleStructItemsHasRest &tuple_items)
    1306              : {
    1307         2787 :   for (auto &lower : tuple_items.get_lower_patterns ())
    1308          623 :     visit (lower);
    1309         2545 :   for (auto &upper : tuple_items.get_upper_patterns ())
    1310          381 :     visit (upper);
    1311         2164 : }
    1312              : 
    1313              : void
    1314       244992 : DefaultASTVisitor::visit (AST::TupleStructPattern &pattern)
    1315              : {
    1316       244992 :   visit (pattern.get_path ());
    1317       244992 :   visit (pattern.get_items ());
    1318       244992 : }
    1319              : 
    1320              : void
    1321       492020 : DefaultASTVisitor::visit (AST::TuplePatternItemsNoRest &tuple_items)
    1322              : {
    1323      1617378 :   for (auto &pattern : tuple_items.get_patterns ())
    1324      1125358 :     visit (pattern);
    1325       492020 : }
    1326              : 
    1327              : void
    1328          638 : DefaultASTVisitor::visit (AST::TuplePatternItemsHasRest &tuple_items)
    1329              : {
    1330         1189 :   for (auto &lower : tuple_items.get_lower_patterns ())
    1331          551 :     visit (lower);
    1332         1234 :   for (auto &upper : tuple_items.get_upper_patterns ())
    1333          596 :     visit (upper);
    1334          638 : }
    1335              : 
    1336              : void
    1337       667908 : DefaultASTVisitor::visit (AST::TuplePattern &pattern)
    1338              : {
    1339       667908 :   visit (pattern.get_items ());
    1340       667908 : }
    1341              : 
    1342              : void
    1343          816 : DefaultASTVisitor::visit (AST::GroupedPattern &pattern)
    1344              : {
    1345          816 :   visit (pattern.get_pattern_in_parens ());
    1346          816 : }
    1347              : 
    1348              : void
    1349         4215 : DefaultASTVisitor::visit (AST::SlicePattern &pattern)
    1350              : {
    1351        13199 :   for (auto &pat : pattern.get_patterns ())
    1352         8984 :     visit (pat);
    1353         4215 : }
    1354              : 
    1355              : void
    1356        10370 : DefaultASTVisitor::visit (AST::AltPattern &pattern)
    1357              : {
    1358        36270 :   for (auto &alt : pattern.get_alts ())
    1359        25900 :     visit (alt);
    1360        10370 : }
    1361              : 
    1362              : void
    1363         1474 : DefaultASTVisitor::visit (AST::EmptyStmt &stmt)
    1364         1474 : {}
    1365              : 
    1366              : void
    1367      1060047 : DefaultASTVisitor::visit (AST::LetStmt &stmt)
    1368              : {
    1369      1060047 :   visit_outer_attrs (stmt);
    1370      1060047 :   visit (stmt.get_pattern ());
    1371      1060047 :   if (stmt.has_type ())
    1372       125374 :     visit (stmt.get_type ());
    1373      1060047 :   if (stmt.has_init_expr ())
    1374      1016320 :     visit (stmt.get_init_expr ());
    1375      1060047 : }
    1376              : 
    1377              : void
    1378      1415332 : DefaultASTVisitor::visit (AST::ExprStmt &stmt)
    1379              : {
    1380      1415332 :   visit (stmt.get_expr ());
    1381      1415330 : }
    1382              : 
    1383              : void
    1384       689013 : DefaultASTVisitor::visit (AST::TraitBound &bound)
    1385              : {
    1386       689328 :   for (auto &lifetime : bound.get_for_lifetimes ())
    1387          315 :     visit (lifetime);
    1388       689013 :   visit (bound.get_type_path ());
    1389       689013 : }
    1390              : 
    1391              : void
    1392          644 : DefaultASTVisitor::visit (AST::ImplTraitType &type)
    1393              : {
    1394         1932 :   for (auto &bound : type.get_type_param_bounds ())
    1395         1288 :     visit (bound);
    1396          644 : }
    1397              : 
    1398              : void
    1399        29907 : DefaultASTVisitor::visit (AST::TraitObjectType &type)
    1400              : {
    1401        73230 :   for (auto &bound : type.get_type_param_bounds ())
    1402        43323 :     visit (bound);
    1403        29907 : }
    1404              : 
    1405              : void
    1406         1826 : DefaultASTVisitor::visit (AST::ParenthesisedType &type)
    1407              : {
    1408         1826 :   visit (type.get_type_in_parens ());
    1409         1826 : }
    1410              : 
    1411              : void
    1412        35045 : DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound &type)
    1413              : {
    1414        35045 :   visit (type.get_trait_bound ());
    1415        35045 : }
    1416              : 
    1417              : void
    1418         8673 : DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound &type)
    1419              : {
    1420         8673 :   visit (type.get_trait_bound ());
    1421         8673 : }
    1422              : 
    1423              : void
    1424       187648 : DefaultASTVisitor::visit (AST::TupleType &type)
    1425              : {
    1426       605723 :   for (auto &elem : type.get_elems ())
    1427       418075 :     visit (elem);
    1428       187648 : }
    1429              : 
    1430              : void
    1431        16457 : DefaultASTVisitor::visit (AST::NeverType &type)
    1432        16457 : {}
    1433              : 
    1434              : void
    1435       391194 : DefaultASTVisitor::visit (AST::RawPointerType &type)
    1436              : {
    1437       391194 :   visit (type.get_type_pointed_to ());
    1438       391194 : }
    1439              : 
    1440              : void
    1441      1612865 : DefaultASTVisitor::visit (AST::ReferenceType &type)
    1442              : {
    1443      1612865 :   visit (type.get_lifetime ());
    1444      1612865 :   visit (type.get_base_type ());
    1445      1612865 : }
    1446              : 
    1447              : void
    1448        67851 : DefaultASTVisitor::visit (AST::ArrayType &type)
    1449              : {
    1450        67851 :   visit (type.get_elem_type ());
    1451        67851 :   visit (type.get_size_expr ());
    1452        67851 : }
    1453              : 
    1454              : void
    1455       130578 : DefaultASTVisitor::visit (AST::SliceType &type)
    1456              : {
    1457       130578 :   visit (type.get_elem_type ());
    1458       130578 : }
    1459              : 
    1460              : void
    1461        60457 : DefaultASTVisitor::visit (AST::InferredType &type)
    1462        60457 : {}
    1463              : 
    1464              : void
    1465       459933 : DefaultASTVisitor::visit (AST::MaybeNamedParam &param)
    1466              : {
    1467       459933 :   visit_outer_attrs (param);
    1468       459933 :   visit (param.get_type ());
    1469       459933 : }
    1470              : 
    1471              : void
    1472        78117 : DefaultASTVisitor::visit (AST::BareFunctionType &type)
    1473              : {
    1474        78181 :   for (auto &lifetime : type.get_for_lifetimes ())
    1475           64 :     visit (lifetime);
    1476        78117 :   visit (type.get_function_qualifiers ());
    1477       538050 :   for (auto &param : type.get_function_params ())
    1478       459933 :     visit (param);
    1479        78117 :   if (type.is_variadic ())
    1480        23352 :     for (auto attr : type.get_variadic_attr ())
    1481            0 :       visit (attr);
    1482        78117 :   if (type.has_return_type ())
    1483        76116 :     visit (type.get_return_type ());
    1484        78117 : }
    1485              : 
    1486              : void
    1487            0 : DefaultASTVisitor::visit (AST::FormatArgs &)
    1488              : {
    1489              :   // FIXME: Do we have anything to do? any subnodes to visit? Probably, right?
    1490            0 : }
    1491              : 
    1492              : void
    1493          170 : DefaultASTVisitor::visit (AST::OffsetOf &offset_of)
    1494              : {
    1495          170 :   visit (offset_of.get_type ());
    1496          170 : }
    1497              : 
    1498              : void
    1499        13642 : DefaultASTVisitor::visit (AST::VariadicParam &param)
    1500              : {
    1501        13642 :   if (param.has_pattern ())
    1502          165 :     visit (param.get_pattern ());
    1503        13642 : }
    1504              : 
    1505              : void
    1506         4844 : ContextualASTVisitor::visit (AST::Crate &crate)
    1507              : {
    1508         4844 :   ctx.enter (Kind::CRATE);
    1509         4844 :   DefaultASTVisitor::visit (crate);
    1510         4844 :   ctx.exit ();
    1511         4844 : }
    1512              : 
    1513              : void
    1514         1298 : ContextualASTVisitor::visit (AST::InherentImpl &impl)
    1515              : {
    1516         1298 :   ctx.enter (Kind::INHERENT_IMPL);
    1517         1298 :   DefaultASTVisitor::visit (impl);
    1518         1298 :   ctx.exit ();
    1519         1298 : }
    1520              : 
    1521              : void
    1522        11566 : ContextualASTVisitor::visit (AST::TraitImpl &impl)
    1523              : {
    1524        11566 :   ctx.enter (Kind::TRAIT_IMPL);
    1525        11566 :   DefaultASTVisitor::visit (impl);
    1526        11566 :   ctx.exit ();
    1527        11566 : }
    1528              : 
    1529              : void
    1530         4139 : ContextualASTVisitor::visit (AST::Trait &trait)
    1531              : {
    1532         4139 :   ctx.enter (Kind::TRAIT);
    1533         4139 :   DefaultASTVisitor::visit (trait);
    1534         4139 :   ctx.exit ();
    1535         4139 : }
    1536              : 
    1537              : } // namespace AST
    1538              : } // 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.