LCOV - code coverage report
Current view: top level - gcc/rust/ast - rust-ast-visitor.cc (source / functions) Coverage Total Hit
Test: gcc.info Lines: 92.6 % 938 869
Test Date: 2026-03-28 14:25:54 Functions: 93.7 % 191 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        62853 : DefaultASTVisitor::visit (AST::Crate &crate)
      36              : {
      37        62853 :   visit_inner_attrs (crate);
      38       332602 :   for (auto &item : crate.items)
      39       269750 :     visit (item);
      40        62852 : }
      41              : 
      42              : void
      43       950114 : DefaultASTVisitor::visit (AST::Token &tok)
      44       950114 : {}
      45              : 
      46              : void
      47       192934 : DefaultASTVisitor::visit (AST::DelimTokenTree &delim_tok_tree)
      48              : {
      49      1205359 :   for (auto &token : delim_tok_tree.get_token_trees ())
      50      1012425 :     visit (token);
      51       192934 : }
      52              : 
      53              : void
      54         4917 : DefaultASTVisitor::visit (AST::AttrInputMetaItemContainer &input)
      55              : {
      56         9849 :   for (auto &item : input.get_items ())
      57         4932 :     visit (item);
      58         4917 : }
      59              : 
      60              : void
      61       431085 : DefaultASTVisitor::visit (AST::IdentifierExpr &ident_expr)
      62              : {
      63       431085 :   visit_outer_attrs (ident_expr);
      64       431085 : }
      65              : 
      66              : void
      67       177695 : DefaultASTVisitor::visit (AST::Lifetime &lifetime)
      68       177695 : {}
      69              : 
      70              : void
      71         3410 : DefaultASTVisitor::visit (AST::LifetimeParam &lifetime_param)
      72              : {
      73         3410 :   visit_outer_attrs (lifetime_param);
      74         3410 :   visit (lifetime_param.get_lifetime ());
      75         3423 :   for (auto &lifetime_bound : lifetime_param.get_lifetime_bounds ())
      76           13 :     visit (lifetime_bound);
      77         3410 : }
      78              : 
      79              : void
      80         1252 : DefaultASTVisitor::visit (AST::ConstGenericParam &const_param)
      81              : {
      82         1252 :   visit_outer_attrs (const_param);
      83         1252 :   if (const_param.has_type ())
      84         1252 :     visit (const_param.get_type ());
      85         1252 :   if (const_param.has_default_value ())
      86          233 :     visit (const_param.get_default_value_unchecked ());
      87         1252 : }
      88              : 
      89              : void
      90       257833 : DefaultASTVisitor::visit (AST::PathInExpression &path)
      91              : {
      92       257833 :   visit_outer_attrs (path);
      93              : 
      94       257833 :   if (!path.is_lang_item ())
      95       612747 :     for (auto &segment : path.get_segments ())
      96       355912 :       visit (segment);
      97       257833 : }
      98              : 
      99              : void
     100      1038231 : DefaultASTVisitor::visit (AST::TypePathSegment &segment)
     101      1038231 : {}
     102              : 
     103              : void
     104          851 : DefaultASTVisitor::visit (GenericArgsBinding &binding)
     105              : {
     106          851 :   visit (binding.get_type ());
     107          851 : }
     108              : 
     109              : void
     110        31863 : DefaultASTVisitor::visit (AST::TypePathSegmentGeneric &segment)
     111              : {
     112        31863 :   if (segment.has_generic_args ())
     113        31852 :     visit (segment.get_generic_args ());
     114        31863 : }
     115              : 
     116              : void
     117          379 : DefaultASTVisitor::visit (AST::TypePathFunction &tpf)
     118              : {
     119          782 :   for (auto &input : tpf.get_params ())
     120          403 :     visit (input);
     121          379 :   if (tpf.has_return_type ())
     122          355 :     visit (tpf.get_return_type ());
     123          379 : }
     124              : 
     125              : void
     126       450079 : DefaultASTVisitor::visit (AST::PathIdentSegment &segment)
     127       450079 : {}
     128              : 
     129              : void
     130          379 : DefaultASTVisitor::visit (AST::TypePathSegmentFunction &segment)
     131              : {
     132          379 :   visit (segment.get_type_path_function ());
     133          379 :   visit (segment.get_ident_segment ());
     134          379 : }
     135              : 
     136              : void
     137        37750 : DefaultASTVisitor::visit (AST::GenericArgs &args)
     138              : {
     139        38153 :   for (auto &lifetime : args.get_lifetime_args ())
     140          403 :     visit (lifetime);
     141              : 
     142        77267 :   for (auto &generic : args.get_generic_args ())
     143        39517 :     visit (generic);
     144              : 
     145        38529 :   for (auto &binding : args.get_binding_args ())
     146          779 :     visit (binding);
     147        37750 : }
     148              : 
     149              : void
     150       406903 : DefaultASTVisitor::visit (AST::PathExprSegment &segment)
     151              : {
     152       406903 :   visit (segment.get_ident_segment ());
     153       406903 :   if (segment.has_generic_args ())
     154         9570 :     visit (segment.get_generic_args ());
     155       406903 : }
     156              : void
     157       874690 : DefaultASTVisitor::visit (AST::TypePath &path)
     158              : {
     159      1777728 :   for (auto &segment : path.get_segments ())
     160       903038 :     visit (segment);
     161       874690 : }
     162              : 
     163              : void
     164         1674 : DefaultASTVisitor::visit (AST::QualifiedPathInExpression &path)
     165              : {
     166         1674 :   visit_outer_attrs (path);
     167         1674 :   visit (path.get_qualified_path_type ());
     168              : 
     169         3348 :   for (auto &segment : path.get_segments ())
     170         1674 :     visit (segment);
     171         1674 : }
     172              : 
     173              : void
     174         6174 : DefaultASTVisitor::visit (AST::QualifiedPathType &path)
     175              : {
     176         6174 :   visit (path.get_type ());
     177         6174 :   if (path.has_as_clause ())
     178         5609 :     visit (path.get_as_type_path ());
     179         6174 : }
     180              : 
     181              : void
     182         4500 : DefaultASTVisitor::visit (AST::QualifiedPathInType &path)
     183              : {
     184         4500 :   visit (path.get_qualified_path_type ());
     185         4500 :   visit (path.get_associated_segment ());
     186              : 
     187         4500 :   for (auto &segment : path.get_segments ())
     188            0 :     visit (segment);
     189         4500 : }
     190              : 
     191              : void
     192      1345779 : DefaultASTVisitor::visit (AST::LiteralExpr &expr)
     193              : {
     194      1345779 :   visit_outer_attrs (expr);
     195      1345779 : }
     196              : 
     197              : void
     198       380705 : DefaultASTVisitor::visit (AST::Attribute &attribute)
     199              : {
     200       380705 :   visit (attribute.get_path ());
     201       380705 :   if (attribute.has_attr_input ())
     202       301415 :     visit (attribute.get_attr_input ());
     203       380705 : }
     204              : 
     205              : void
     206       155891 : DefaultASTVisitor::visit (AST::AttrInputLiteral &attr_input)
     207              : {
     208       155891 :   visit (attr_input.get_literal ());
     209       155891 : }
     210              : 
     211              : void
     212           31 : DefaultASTVisitor::visit (AST::AttrInputMacro &attr_input)
     213              : {
     214           31 :   visit (attr_input.get_macro ());
     215           31 : }
     216              : 
     217              : void
     218            5 : DefaultASTVisitor::visit (AST::AttrInputExpr &attr_input)
     219              : {
     220            5 :   visit (attr_input.get_expr ());
     221            5 : }
     222              : 
     223              : void
     224            0 : DefaultASTVisitor::visit (AST::MetaItemLitExpr &meta_item)
     225              : {
     226            0 :   visit (meta_item.get_literal ());
     227            0 : }
     228              : 
     229              : void
     230       402541 : DefaultASTVisitor::visit (AST::SimplePathSegment &segment)
     231       402541 : {}
     232              : 
     233              : void
     234       363875 : DefaultASTVisitor::visit (AST::SimplePath &path)
     235              : {
     236       736621 :   for (auto &segment : path.get_segments ())
     237       372746 :     visit (segment);
     238       363875 : }
     239              : 
     240              : void
     241            1 : DefaultASTVisitor::visit (AST::MetaItemPathExpr &meta_item)
     242              : {
     243            1 :   visit (meta_item.get_path ());
     244            1 :   visit (meta_item.get_expr ());
     245            1 : }
     246              : 
     247              : void
     248        35395 : DefaultASTVisitor::visit (AST::BorrowExpr &expr)
     249              : {
     250        35395 :   visit_outer_attrs (expr);
     251        35395 :   visit (expr.get_borrowed_expr ());
     252        35395 : }
     253              : 
     254              : void
     255        42358 : DefaultASTVisitor::visit (AST::DereferenceExpr &expr)
     256              : {
     257        42358 :   visit_outer_attrs (expr);
     258        42358 :   visit (expr.get_dereferenced_expr ());
     259        42358 : }
     260              : 
     261              : void
     262            9 : DefaultASTVisitor::visit (AST::ErrorPropagationExpr &expr)
     263              : {
     264            9 :   visit_outer_attrs (expr);
     265            9 :   visit (expr.get_propagating_expr ());
     266            9 : }
     267              : 
     268              : void
     269         8070 : DefaultASTVisitor::visit (AST::NegationExpr &expr)
     270              : {
     271         8070 :   visit_outer_attrs (expr);
     272         8070 :   visit (expr.get_negated_expr ());
     273         8070 : }
     274              : 
     275              : void
     276      1627463 : DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr &expr)
     277              : {
     278      1627463 :   visit_outer_attrs (expr);
     279      1627463 :   visit (expr.get_left_expr ());
     280      1627463 :   visit (expr.get_right_expr ());
     281      1627463 : }
     282              : 
     283              : void
     284        43456 : DefaultASTVisitor::visit (AST::ComparisonExpr &expr)
     285              : {
     286        43456 :   visit_outer_attrs (expr);
     287        43456 :   visit (expr.get_left_expr ());
     288        43456 :   visit (expr.get_right_expr ());
     289        43456 : }
     290              : 
     291              : void
     292         5376 : DefaultASTVisitor::visit (AST::LazyBooleanExpr &expr)
     293              : {
     294         5376 :   visit_outer_attrs (expr);
     295         5376 :   visit (expr.get_left_expr ());
     296         5376 :   visit (expr.get_right_expr ());
     297         5376 : }
     298              : 
     299              : void
     300       105677 : DefaultASTVisitor::visit (AST::TypeCastExpr &expr)
     301              : {
     302       105677 :   visit_outer_attrs (expr);
     303       105677 :   visit (expr.get_casted_expr ());
     304       105677 :   visit (expr.get_type_to_cast_to ());
     305       105677 : }
     306              : 
     307              : void
     308        39283 : DefaultASTVisitor::visit (AST::AssignmentExpr &expr)
     309              : {
     310        39283 :   visit_outer_attrs (expr);
     311        39283 :   visit (expr.get_left_expr ());
     312        39283 :   visit (expr.get_right_expr ());
     313        39283 : }
     314              : 
     315              : void
     316        12678 : DefaultASTVisitor::visit (AST::CompoundAssignmentExpr &expr)
     317              : {
     318        12678 :   visit_outer_attrs (expr);
     319        12678 :   visit (expr.get_left_expr ());
     320        12678 :   visit (expr.get_right_expr ());
     321        12678 : }
     322              : 
     323              : void
     324         5479 : DefaultASTVisitor::visit (AST::GroupedExpr &expr)
     325              : {
     326         5479 :   visit_outer_attrs (expr);
     327         5479 :   visit_inner_attrs (expr);
     328         5479 :   visit (expr.get_expr_in_parens ());
     329         5479 : }
     330              : 
     331              : void
     332         3008 : DefaultASTVisitor::visit (AST::ArrayElemsValues &elems)
     333              : {
     334        17150 :   for (auto &value : elems.get_values ())
     335        14142 :     visit (value);
     336         3008 : }
     337              : 
     338              : void
     339         1695 : DefaultASTVisitor::visit (AST::ArrayElemsCopied &elems)
     340              : {
     341         1695 :   visit (elems.get_elem_to_copy ());
     342         1695 :   visit (elems.get_num_copies ());
     343         1695 : }
     344              : 
     345              : void
     346         5867 : DefaultASTVisitor::visit (AST::ArrayExpr &expr)
     347              : {
     348         5867 :   visit_outer_attrs (expr);
     349         5867 :   visit_inner_attrs (expr);
     350         5867 :   visit (expr.get_array_elems ());
     351         5867 : }
     352              : 
     353              : void
     354         4370 : DefaultASTVisitor::visit (AST::ArrayIndexExpr &expr)
     355              : {
     356         4370 :   visit_outer_attrs (expr);
     357         4370 :   visit (expr.get_array_expr ());
     358         4370 :   visit (expr.get_index_expr ());
     359         4370 : }
     360              : 
     361              : void
     362         5685 : DefaultASTVisitor::visit (AST::TupleExpr &expr)
     363              : {
     364         5685 :   visit_outer_attrs (expr);
     365         5685 :   visit_inner_attrs (expr);
     366        15565 :   for (auto &elem : expr.get_tuple_elems ())
     367         9880 :     visit (elem);
     368         5685 : }
     369              : 
     370              : void
     371        14664 : DefaultASTVisitor::visit (AST::TupleIndexExpr &expr)
     372              : {
     373        14664 :   visit_outer_attrs (expr);
     374        14664 :   visit (expr.get_tuple_expr ());
     375        14664 : }
     376              : 
     377              : void
     378          726 : DefaultASTVisitor::visit (AST::StructExprStruct &expr)
     379              : {
     380          726 :   visit_outer_attrs (expr);
     381          726 :   visit_inner_attrs (expr);
     382          726 :   visit (expr.get_struct_name ());
     383          726 : }
     384              : 
     385              : void
     386         2609 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifier &field)
     387         2609 : {}
     388              : 
     389              : void
     390        30560 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue &field)
     391              : {
     392        30560 :   visit (field.get_value ());
     393        30560 : }
     394              : 
     395              : void
     396          616 : DefaultASTVisitor::visit (AST::StructExprFieldIndexValue &field)
     397              : {
     398          616 :   visit (field.get_value ());
     399          616 : }
     400              : 
     401              : void
     402          882 : DefaultASTVisitor::visit (AST::StructBase &base)
     403              : {
     404          882 :   visit (base.get_base_struct ());
     405          882 : }
     406              : 
     407              : void
     408        18180 : DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
     409              : {
     410        18180 :   visit_outer_attrs (expr);
     411        18180 :   visit_inner_attrs (expr);
     412        18180 :   visit (expr.get_struct_name ());
     413        18180 :   if (expr.has_struct_base ())
     414          819 :     visit (expr.get_struct_base ());
     415        49887 :   for (auto &field : expr.get_fields ())
     416        31707 :     visit (field);
     417        18180 : }
     418              : 
     419              : void
     420            0 : DefaultASTVisitor::visit (AST::StructExprStructBase &expr)
     421              : {
     422            0 :   visit_outer_attrs (expr);
     423            0 :   visit_inner_attrs (expr);
     424            0 :   visit (expr.get_struct_name ());
     425            0 :   visit (expr.get_struct_base ());
     426            0 : }
     427              : 
     428              : void
     429       185239 : DefaultASTVisitor::visit (AST::CallExpr &expr)
     430              : {
     431       185239 :   visit_outer_attrs (expr);
     432       185239 :   visit (expr.get_function_expr ());
     433       407611 :   for (auto &param : expr.get_params ())
     434       222372 :     visit (param);
     435       185239 : }
     436              : 
     437              : void
     438        49317 : DefaultASTVisitor::visit (AST::MethodCallExpr &expr)
     439              : {
     440        49317 :   visit_outer_attrs (expr);
     441        49317 :   visit (expr.get_receiver_expr ());
     442        49317 :   visit (expr.get_method_name ());
     443        83429 :   for (auto &param : expr.get_params ())
     444        34112 :     visit (param);
     445        49317 : }
     446              : 
     447              : void
     448        83471 : DefaultASTVisitor::visit (AST::FieldAccessExpr &expr)
     449              : {
     450        83471 :   visit_outer_attrs (expr);
     451        83471 :   visit (expr.get_receiver_expr ());
     452        83471 : }
     453              : 
     454              : void
     455          279 : DefaultASTVisitor::visit (AST::ClosureExprInner &expr)
     456              : {
     457          279 :   visit_outer_attrs (expr);
     458          485 :   for (auto &param : expr.get_params ())
     459          206 :     visit (param);
     460          279 :   visit (expr.get_definition_expr ());
     461          279 : }
     462              : 
     463              : void
     464       336862 : DefaultASTVisitor::visit (AST::BlockExpr &expr)
     465              : {
     466       336862 :   visit_outer_attrs (expr);
     467       336862 :   visit_inner_attrs (expr);
     468              : 
     469       336862 :   if (expr.has_label ())
     470            0 :     visit (expr.get_label ());
     471              : 
     472       654530 :   for (auto &stmt : expr.get_statements ())
     473       317669 :     visit (stmt);
     474              : 
     475       336861 :   if (expr.has_tail_expr ())
     476       250090 :     visit (expr.get_tail_expr ());
     477       336861 : }
     478              : 
     479              : void
     480          181 : DefaultASTVisitor::visit (AST::ConstBlock &expr)
     481              : {
     482          181 :   visit (expr.get_const_expr ());
     483          181 : }
     484              : 
     485              : void
     486        12018 : DefaultASTVisitor::visit (AST::AnonConst &expr)
     487              : {
     488        12018 :   if (!expr.is_deferred ())
     489        11857 :     visit (expr.get_inner_expr ());
     490        12018 : }
     491              : 
     492              : void
     493          240 : DefaultASTVisitor::visit (AST::ClosureExprInnerTyped &expr)
     494              : {
     495          240 :   visit_outer_attrs (expr);
     496          536 :   for (auto &param : expr.get_params ())
     497          296 :     visit (param);
     498          240 :   visit (expr.get_return_type ());
     499          240 :   visit (expr.get_definition_expr ());
     500          240 : }
     501              : 
     502              : void
     503          880 : DefaultASTVisitor::visit (AST::ClosureParam &param)
     504              : {
     505          880 :   visit_outer_attrs (param);
     506          880 :   visit (param.get_pattern ());
     507          880 :   if (param.has_type_given ())
     508          812 :     visit (param.get_type ());
     509          880 : }
     510              : 
     511              : void
     512          170 : DefaultASTVisitor::visit (AST::ContinueExpr &expr)
     513              : {
     514          170 :   visit_outer_attrs (expr);
     515          170 :   if (expr.has_label ())
     516           30 :     visit (expr.get_label_unchecked ());
     517          170 : }
     518              : 
     519              : void
     520         1520 : DefaultASTVisitor::visit (AST::BreakExpr &expr)
     521              : {
     522         1520 :   visit_outer_attrs (expr);
     523         1520 :   if (expr.has_label ())
     524          330 :     visit (expr.get_label_unchecked ());
     525              : 
     526         1520 :   if (expr.has_break_expr ())
     527          468 :     visit (expr.get_break_expr_unchecked ());
     528         1519 : }
     529              : 
     530              : void
     531         1077 : DefaultASTVisitor::visit (AST::RangeFromToExpr &expr)
     532              : {
     533         1077 :   visit (expr.get_from_expr ());
     534         1077 :   visit (expr.get_to_expr ());
     535         1077 : }
     536              : 
     537              : void
     538           98 : DefaultASTVisitor::visit (AST::RangeFromExpr &expr)
     539              : {
     540           98 :   visit (expr.get_from_expr ());
     541           98 : }
     542              : 
     543              : void
     544           98 : DefaultASTVisitor::visit (AST::RangeToExpr &expr)
     545              : {
     546           98 :   visit (expr.get_to_expr ());
     547           98 : }
     548              : 
     549              : void
     550            0 : DefaultASTVisitor::visit (AST::RangeFullExpr &expr)
     551            0 : {}
     552              : 
     553              : void
     554           98 : DefaultASTVisitor::visit (AST::RangeFromToInclExpr &expr)
     555              : {
     556           98 :   visit (expr.get_from_expr ());
     557           98 :   visit (expr.get_to_expr ());
     558           98 : }
     559              : 
     560              : void
     561            0 : DefaultASTVisitor::visit (AST::RangeToInclExpr &expr)
     562              : {
     563            0 :   visit (expr.get_to_expr ());
     564            0 : }
     565              : 
     566              : void
     567         8520 : DefaultASTVisitor::visit (AST::ReturnExpr &expr)
     568              : {
     569         8520 :   visit_outer_attrs (expr);
     570         8520 :   if (expr.has_returned_expr ())
     571         7827 :     visit (expr.get_returned_expr ());
     572         8520 : }
     573              : 
     574              : void
     575            9 : DefaultASTVisitor::visit (AST::TryExpr &expr)
     576              : {
     577            9 :   visit_outer_attrs (expr);
     578            9 :   visit (expr.get_block_expr ());
     579            9 : }
     580              : 
     581              : void
     582           14 : DefaultASTVisitor::visit (AST::BoxExpr &expr)
     583              : {
     584           14 :   visit_outer_attrs (expr);
     585           14 :   visit (expr.get_boxed_expr ());
     586           14 : }
     587              : 
     588              : void
     589        54023 : DefaultASTVisitor::visit (AST::UnsafeBlockExpr &expr)
     590              : {
     591        54023 :   visit_outer_attrs (expr);
     592        54023 :   visit (expr.get_block_expr ());
     593        54023 : }
     594              : 
     595              : void
     596          692 : DefaultASTVisitor::visit (AST::LoopLabel &label)
     597              : {
     598          692 :   visit (label.get_lifetime ());
     599          692 : }
     600              : 
     601              : void
     602         1585 : DefaultASTVisitor::visit (AST::LoopExpr &expr)
     603              : {
     604         1585 :   visit_outer_attrs (expr);
     605         1585 :   if (expr.has_loop_label ())
     606          462 :     visit (expr.get_loop_label ());
     607         1585 :   visit (expr.get_loop_block ());
     608         1585 : }
     609              : 
     610              : void
     611         1378 : DefaultASTVisitor::visit (AST::WhileLoopExpr &expr)
     612              : {
     613         1378 :   visit_outer_attrs (expr);
     614         1378 :   if (expr.has_loop_label ())
     615           26 :     visit (expr.get_loop_label ());
     616         1378 :   visit (expr.get_predicate_expr ());
     617         1378 :   visit (expr.get_loop_block ());
     618         1378 : }
     619              : 
     620              : void
     621           14 : DefaultASTVisitor::visit (AST::WhileLetLoopExpr &expr)
     622              : {
     623           14 :   visit_outer_attrs (expr);
     624           14 :   visit (expr.get_pattern ());
     625              : 
     626           14 :   if (expr.has_loop_label ())
     627            0 :     visit (expr.get_loop_label ());
     628              : 
     629           14 :   visit (expr.get_scrutinee_expr ());
     630           14 :   visit (expr.get_loop_block ());
     631           14 : }
     632              : 
     633              : void
     634          264 : DefaultASTVisitor::visit (AST::ForLoopExpr &expr)
     635              : {
     636          264 :   visit_outer_attrs (expr);
     637          264 :   visit (expr.get_pattern ());
     638          264 :   visit (expr.get_iterator_expr ());
     639          264 :   if (expr.has_loop_label ())
     640            0 :     visit (expr.get_loop_label ());
     641          264 :   visit (expr.get_loop_block ());
     642          264 : }
     643              : 
     644              : void
     645        27256 : DefaultASTVisitor::visit (AST::IfExpr &expr)
     646              : {
     647        27256 :   visit_outer_attrs (expr);
     648        27256 :   visit (expr.get_condition_expr ());
     649        27256 :   visit (expr.get_if_block ());
     650        27256 : }
     651              : 
     652              : void
     653        19371 : DefaultASTVisitor::visit (AST::IfExprConseqElse &expr)
     654              : {
     655        19371 :   visit (reinterpret_cast<AST::IfExpr &> (expr));
     656        19371 :   visit (expr.get_else_block ());
     657        19371 : }
     658              : 
     659              : void
     660          222 : DefaultASTVisitor::visit (AST::IfLetExpr &expr)
     661              : {
     662          222 :   visit_outer_attrs (expr);
     663          222 :   visit (expr.get_pattern ());
     664          222 :   visit (expr.get_value_expr ());
     665          222 :   visit (expr.get_if_block ());
     666          222 : }
     667              : 
     668              : void
     669           78 : DefaultASTVisitor::visit (AST::IfLetExprConseqElse &expr)
     670              : {
     671           78 :   visit (reinterpret_cast<AST::IfLetExpr &> (expr));
     672           78 :   visit (expr.get_else_block ());
     673           78 : }
     674              : 
     675              : void
     676        33372 : DefaultASTVisitor::visit (AST::MatchArm &arm)
     677              : {
     678        33372 :   visit_outer_attrs (arm);
     679        33372 :   visit (arm.get_pattern ());
     680        33372 :   if (arm.has_match_arm_guard ())
     681           11 :     visit (arm.get_guard_expr ());
     682        33372 : }
     683              : 
     684              : void
     685        35865 : DefaultASTVisitor::visit (AST::MatchCase &arm)
     686              : {
     687        35865 :   visit (arm.get_arm ());
     688        35865 :   visit (arm.get_expr ());
     689        35865 : }
     690              : 
     691              : void
     692        15453 : DefaultASTVisitor::visit (AST::MatchExpr &expr)
     693              : {
     694        15453 :   visit_outer_attrs (expr);
     695        15453 :   visit_inner_attrs (expr);
     696        15453 :   visit (expr.get_scrutinee_expr ());
     697        51318 :   for (auto &arm : expr.get_match_cases ())
     698        35865 :     visit (arm);
     699        15453 : }
     700              : 
     701              : void
     702            0 : DefaultASTVisitor::visit (AST::AwaitExpr &expr)
     703              : {
     704            0 :   visit_outer_attrs (expr);
     705            0 :   visit (expr.get_awaited_expr ());
     706            0 : }
     707              : 
     708              : void
     709            0 : DefaultASTVisitor::visit (AST::AsyncBlockExpr &expr)
     710              : {
     711            0 :   visit_outer_attrs (expr);
     712            0 :   visit (expr.get_block_expr ());
     713            0 : }
     714              : 
     715              : void
     716          289 : DefaultASTVisitor::visit (AST::InlineAsm &expr)
     717              : {
     718          289 :   visit_outer_attrs (expr);
     719          289 :   using RegisterType = AST::InlineAsmOperand::RegisterType;
     720          604 :   for (auto &operand : expr.get_operands ())
     721              :     {
     722          315 :       switch (operand.get_register_type ())
     723              :         {
     724          110 :         case RegisterType::In:
     725          110 :           {
     726          110 :             visit (operand.get_in ().expr);
     727          110 :             break;
     728              :           }
     729          183 :         case RegisterType::Out:
     730          183 :           {
     731          183 :             visit (operand.get_out ().expr);
     732          183 :             break;
     733              :           }
     734            0 :         case RegisterType::InOut:
     735            0 :           {
     736            0 :             visit (operand.get_in_out ().expr);
     737            0 :             break;
     738              :           }
     739           22 :         case RegisterType::SplitInOut:
     740           22 :           {
     741           22 :             auto split = operand.get_split_in_out ();
     742           22 :             visit (split.in_expr);
     743           22 :             visit (split.out_expr);
     744           22 :             break;
     745           22 :           }
     746            0 :         case RegisterType::Const:
     747            0 :           {
     748            0 :             visit (operand.get_const ().anon_const.get_inner_expr ());
     749            0 :             break;
     750              :           }
     751            0 :         case RegisterType::Sym:
     752            0 :           {
     753            0 :             visit (operand.get_sym ().expr);
     754            0 :             break;
     755              :           }
     756            0 :         case RegisterType::Label:
     757            0 :           {
     758            0 :             visit (operand.get_label ().expr);
     759            0 :             break;
     760              :           }
     761              :         }
     762          289 :     }
     763          289 : }
     764              : 
     765              : void
     766           22 : DefaultASTVisitor::visit (AST::LlvmInlineAsm &expr)
     767              : {
     768           22 :   for (auto &output : expr.get_outputs ())
     769            0 :     visit (output.expr);
     770              : 
     771           44 :   for (auto &input : expr.get_inputs ())
     772           22 :     visit (input.expr);
     773           22 : }
     774              : 
     775              : void
     776       114276 : DefaultASTVisitor::visit (AST::TypeParam &param)
     777              : {
     778       114276 :   visit_outer_attrs (param);
     779       125708 :   for (auto &bound : param.get_type_param_bounds ())
     780        11432 :     visit (bound);
     781       114276 :   if (param.has_type ())
     782         5294 :     visit (param.get_type ());
     783       114276 : }
     784              : 
     785              : void
     786           24 : DefaultASTVisitor::visit (AST::LifetimeWhereClauseItem &item)
     787              : {
     788           24 :   visit (item.get_lifetime ());
     789           48 :   for (auto &bound : item.get_lifetime_bounds ())
     790           24 :     visit (bound);
     791           24 : }
     792              : 
     793              : void
     794         4791 : DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
     795              : {
     796         4899 :   for (auto &lifetime : item.get_for_lifetimes ())
     797          108 :     visit (lifetime);
     798         4791 :   visit (item.get_type ());
     799         9582 :   for (auto &param : item.get_type_param_bounds ())
     800         4791 :     visit (param);
     801         4791 : }
     802              : 
     803              : void
     804       549109 : DefaultASTVisitor::visit (AST::Visibility &vis)
     805              : {
     806       549109 :   if (vis.has_path ())
     807          960 :     visit (vis.get_path ());
     808       549109 : }
     809              : 
     810              : void
     811       280663 : DefaultASTVisitor::visit (AST::FunctionQualifiers &qualifiers)
     812       280663 : {}
     813              : 
     814              : void
     815         4731 : DefaultASTVisitor::visit (AST::WhereClause &where)
     816              : {
     817         9642 :   for (auto &item : where.get_items ())
     818         4911 :     visit (item);
     819         4731 : }
     820              : void
     821       159801 : DefaultASTVisitor::visit (AST::FunctionParam &param)
     822              : {
     823       159801 :   visit_outer_attrs (param);
     824       159801 :   if (param.has_name ())
     825       159801 :     visit (param.get_pattern ());
     826              : 
     827       159801 :   visit (param.get_type ());
     828       159801 : }
     829              : 
     830              : void
     831       124565 : DefaultASTVisitor::visit (AST::SelfParam &param)
     832              : {
     833       124565 :   visit_outer_attrs (param);
     834              : 
     835       124565 :   if (param.has_lifetime ())
     836        71944 :     visit (param.get_lifetime ());
     837              : 
     838       124565 :   if (param.has_type ())
     839           14 :     visit (param.get_type ());
     840       124565 : }
     841              : 
     842              : void
     843        16799 : DefaultASTVisitor::visit (AST::Module &module)
     844              : {
     845        16799 :   visit_outer_attrs (module);
     846        16799 :   visit (module.get_visibility ());
     847        16799 :   visit_inner_attrs (module);
     848        72389 :   for (auto &item : module.get_items ())
     849        55590 :     visit (item);
     850        16799 : }
     851              : 
     852              : void
     853          132 : DefaultASTVisitor::visit (AST::ExternCrate &crate)
     854              : {
     855          132 :   visit_outer_attrs (crate);
     856          132 :   visit (crate.get_visibility ());
     857          132 : }
     858              : 
     859              : void
     860           75 : DefaultASTVisitor::visit (AST::UseTreeGlob &use_tree)
     861              : {
     862           75 :   visit (use_tree.get_path ());
     863           75 : }
     864              : 
     865              : void
     866         1385 : DefaultASTVisitor::visit (AST::UseTreeList &use_tree)
     867              : {
     868         1385 :   visit (use_tree.get_path ());
     869         1385 : }
     870              : 
     871              : void
     872         4420 : DefaultASTVisitor::visit (AST::UseTreeRebind &use_tree)
     873              : {
     874         4420 :   visit (use_tree.get_path ());
     875         4420 : }
     876              : 
     877              : void
     878         5892 : DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
     879              : {
     880         5892 :   visit (use_decl.get_visibility ());
     881         5892 :   visit (use_decl.get_tree ());
     882         5892 : }
     883              : 
     884              : void
     885       243284 : DefaultASTVisitor::visit_function_params (AST::Function &function)
     886              : {
     887       518403 :   for (auto &param : function.get_function_params ())
     888       275119 :     visit (param);
     889       243284 : }
     890              : 
     891              : void
     892       261539 : DefaultASTVisitor::visit (AST::Function &function)
     893              : {
     894       261539 :   visit_outer_attrs (function);
     895       261539 :   visit (function.get_visibility ());
     896       261539 :   visit (function.get_qualifiers ());
     897       284907 :   for (auto &generic : function.get_generic_params ())
     898        23368 :     visit (generic);
     899              : 
     900       261539 :   visit_function_params (function);
     901              : 
     902       261539 :   if (function.has_return_type ())
     903       190966 :     visit (function.get_return_type ());
     904       261539 :   if (function.has_where_clause ())
     905         3265 :     visit (function.get_where_clause ());
     906       261539 :   if (function.has_body ())
     907       204540 :     visit (*function.get_definition ());
     908       261538 : }
     909              : 
     910              : void
     911        21057 : DefaultASTVisitor::visit (AST::TypeAlias &type_alias)
     912              : {
     913        21057 :   visit_outer_attrs (type_alias);
     914        21057 :   visit (type_alias.get_visibility ());
     915        21307 :   for (auto &generic : type_alias.get_generic_params ())
     916          250 :     visit (generic);
     917        21057 :   if (type_alias.has_where_clause ())
     918            0 :     visit (type_alias.get_where_clause ());
     919        21057 :   visit (type_alias.get_type_aliased ());
     920        21057 : }
     921              : 
     922              : void
     923        32960 : DefaultASTVisitor::visit (AST::StructField &field)
     924              : {
     925        32960 :   visit_outer_attrs (field);
     926        32960 :   visit (field.get_visibility ());
     927        32960 :   visit (field.get_field_type ());
     928        32960 : }
     929              : 
     930              : void
     931        23419 : DefaultASTVisitor::visit (AST::StructStruct &struct_item)
     932              : {
     933        23419 :   visit_outer_attrs (struct_item);
     934        23419 :   visit (struct_item.get_visibility ());
     935        31067 :   for (auto &generic : struct_item.get_generic_params ())
     936         7648 :     visit (generic);
     937        23419 :   if (struct_item.has_where_clause ())
     938           28 :     visit (struct_item.get_where_clause ());
     939        50447 :   for (auto &field : struct_item.get_fields ())
     940        27028 :     visit (field);
     941        23419 : }
     942              : 
     943              : void
     944        29140 : DefaultASTVisitor::visit (AST::TupleField &field)
     945              : {
     946        29140 :   visit_outer_attrs (field);
     947        29140 :   visit (field.get_visibility ());
     948        29140 :   visit (field.get_field_type ());
     949        29140 : }
     950              : 
     951              : void
     952        13287 : DefaultASTVisitor::visit (AST::TupleStruct &tuple_struct)
     953              : {
     954        13287 :   visit_outer_attrs (tuple_struct);
     955        13287 :   visit (tuple_struct.get_visibility ());
     956        18100 :   for (auto &generic : tuple_struct.get_generic_params ())
     957         4813 :     visit (generic);
     958        13287 :   if (tuple_struct.has_where_clause ())
     959            0 :     visit (tuple_struct.get_where_clause ());
     960        36804 :   for (auto &field : tuple_struct.get_fields ())
     961        23517 :     visit (field);
     962        13287 : }
     963              : 
     964              : void
     965        16278 : DefaultASTVisitor::visit (AST::EnumItem &item)
     966              : {
     967        16278 :   visit_outer_attrs (item);
     968        16278 :   visit (item.get_visibility ());
     969        16278 : }
     970              : 
     971              : void
     972         5300 : DefaultASTVisitor::visit (AST::EnumItemTuple &item)
     973              : {
     974         5300 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     975        10923 :   for (auto &field : item.get_tuple_fields ())
     976         5623 :     visit (field);
     977         5300 : }
     978              : 
     979              : void
     980         1078 : DefaultASTVisitor::visit (AST::EnumItemStruct &item)
     981              : {
     982         1078 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     983         2827 :   for (auto &field : item.get_struct_fields ())
     984         1749 :     visit (field);
     985         1078 : }
     986              : 
     987              : void
     988         4671 : DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
     989              : {
     990         4671 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     991         4671 :   visit (item.get_expr ());
     992         4671 : }
     993              : 
     994              : void
     995         7710 : DefaultASTVisitor::visit (AST::Enum &enum_item)
     996              : {
     997         7710 :   visit_outer_attrs (enum_item);
     998         7710 :   visit (enum_item.get_visibility ());
     999        11869 :   for (auto &generic : enum_item.get_generic_params ())
    1000         4159 :     visit (generic);
    1001         7710 :   if (enum_item.has_where_clause ())
    1002            0 :     visit (enum_item.get_where_clause ());
    1003        25700 :   for (auto &item : enum_item.get_variants ())
    1004        17990 :     visit (item);
    1005         7710 : }
    1006              : 
    1007              : void
    1008         1456 : DefaultASTVisitor::visit (AST::Union &union_item)
    1009              : {
    1010         1456 :   visit_outer_attrs (union_item);
    1011         1456 :   visit (union_item.get_visibility ());
    1012         2452 :   for (auto &generic : union_item.get_generic_params ())
    1013          996 :     visit (generic);
    1014         1456 :   if (union_item.has_where_clause ())
    1015            0 :     visit (union_item.get_where_clause ());
    1016         5639 :   for (auto &variant : union_item.get_variants ())
    1017         4183 :     visit (variant);
    1018         1456 : }
    1019              : 
    1020              : void
    1021         7824 : DefaultASTVisitor::visit (AST::ConstantItem &const_item)
    1022              : {
    1023         7824 :   visit_outer_attrs (const_item);
    1024         7824 :   visit (const_item.get_visibility ());
    1025         7824 :   visit (const_item.get_type ());
    1026         7824 :   if (const_item.has_expr ())
    1027         7326 :     visit (const_item.get_expr ());
    1028         7824 : }
    1029              : 
    1030              : void
    1031          786 : DefaultASTVisitor::visit (AST::StaticItem &static_item)
    1032              : {
    1033          786 :   visit_outer_attrs (static_item);
    1034          786 :   visit (static_item.get_visibility ());
    1035          786 :   visit (static_item.get_type ());
    1036          786 :   visit (static_item.get_expr ());
    1037          786 : }
    1038              : 
    1039              : void
    1040        12563 : DefaultASTVisitor::visit (AST::TraitItemType &item)
    1041              : {
    1042        12563 :   visit_outer_attrs (item);
    1043        12698 :   for (auto &generic : item.get_generic_params ())
    1044          135 :     visit (generic);
    1045        13418 :   for (auto &bound : item.get_type_param_bounds ())
    1046          855 :     visit (bound);
    1047        12563 : }
    1048              : 
    1049              : void
    1050        31119 : DefaultASTVisitor::visit (AST::Trait &trait)
    1051              : {
    1052        31119 :   visit_outer_attrs (trait);
    1053        31119 :   visit (trait.get_visibility ());
    1054              : 
    1055        31119 :   visit_inner_attrs (trait);
    1056              : 
    1057        31119 :   visit (trait.get_implicit_self ());
    1058              : 
    1059        36714 :   for (auto &generic : trait.get_generic_params ())
    1060         5595 :     visit (generic);
    1061              : 
    1062        31119 :   if (trait.has_where_clause ())
    1063           63 :     visit (trait.get_where_clause ());
    1064              : 
    1065        36447 :   for (auto &bound : trait.get_type_param_bounds ())
    1066         5328 :     visit (bound);
    1067              : 
    1068        59623 :   for (auto &item : trait.get_trait_items ())
    1069        28504 :     visit (item);
    1070        31119 : }
    1071              : 
    1072              : void
    1073         7587 : DefaultASTVisitor::visit (AST::InherentImpl &impl)
    1074              : {
    1075         7587 :   visit_outer_attrs (impl);
    1076         7587 :   visit (impl.get_visibility ());
    1077              : 
    1078        10293 :   for (auto &generic : impl.get_generic_params ())
    1079         2706 :     visit (generic);
    1080         7587 :   if (impl.has_where_clause ())
    1081            8 :     visit (impl.get_where_clause ());
    1082         7587 :   visit (impl.get_type ());
    1083         7587 :   visit_inner_attrs (impl);
    1084        27867 :   for (auto &item : impl.get_impl_items ())
    1085        20280 :     visit (item);
    1086         7587 : }
    1087              : 
    1088              : void
    1089        34129 : DefaultASTVisitor::visit (AST::TraitImpl &impl)
    1090              : {
    1091        34129 :   visit_outer_attrs (impl);
    1092        34129 :   visit (impl.get_visibility ());
    1093              : 
    1094        40701 :   for (auto &generic : impl.get_generic_params ())
    1095         6572 :     visit (generic);
    1096        34129 :   if (impl.has_where_clause ())
    1097          712 :     visit (impl.get_where_clause ());
    1098        34129 :   visit (impl.get_type ());
    1099        34129 :   visit (impl.get_trait_path ());
    1100        34129 :   visit_inner_attrs (impl);
    1101        75538 :   for (auto &item : impl.get_impl_items ())
    1102        41409 :     visit (item);
    1103        34129 : }
    1104              : 
    1105              : void
    1106           10 : DefaultASTVisitor::visit (AST::ExternalTypeItem &item)
    1107              : {
    1108           10 :   visit_outer_attrs (item);
    1109           10 :   visit (item.get_visibility ());
    1110           10 : }
    1111              : 
    1112              : void
    1113           13 : DefaultASTVisitor::visit (AST::ExternalStaticItem &item)
    1114              : {
    1115           13 :   visit_outer_attrs (item);
    1116           13 :   visit (item.get_visibility ());
    1117           13 :   visit (item.get_type ());
    1118           13 : }
    1119              : 
    1120              : void
    1121        16927 : DefaultASTVisitor::visit (AST::ExternBlock &block)
    1122              : {
    1123        16927 :   visit_outer_attrs (block);
    1124        16927 :   visit (block.get_visibility ());
    1125        16927 :   visit_inner_attrs (block);
    1126        43199 :   for (auto &item : block.get_extern_items ())
    1127        26272 :     visit (item);
    1128        16927 : }
    1129              : 
    1130              : void
    1131        11110 : DefaultASTVisitor::visit (AST::MacroMatchFragment &match)
    1132        11110 : {}
    1133              : 
    1134              : void
    1135         5292 : DefaultASTVisitor::visit (AST::MacroMatchRepetition &match)
    1136              : {
    1137        12787 :   for (auto &m : match.get_matches ())
    1138         7495 :     visit (m);
    1139         5292 : }
    1140              : 
    1141              : void
    1142        11335 : DefaultASTVisitor::visit (AST::MacroMatcher &matcher)
    1143              : {
    1144        25793 :   for (auto &m : matcher.get_matches ())
    1145        14458 :     visit (m);
    1146        11335 : }
    1147              : 
    1148              : void
    1149        10813 : DefaultASTVisitor::visit (AST::MacroTranscriber &transcriber)
    1150              : {
    1151        10813 :   visit (transcriber.get_token_tree ());
    1152        10813 : }
    1153              : 
    1154              : void
    1155        10813 : DefaultASTVisitor::visit (AST::MacroRule &rule)
    1156              : {
    1157        10813 :   visit (rule.get_matcher ());
    1158        10813 :   visit (rule.get_transcriber ());
    1159        10813 : }
    1160              : void
    1161         8574 : DefaultASTVisitor::visit (AST::MacroRulesDefinition &rules_def)
    1162              : {
    1163         8574 :   visit_outer_attrs (rules_def);
    1164        19387 :   for (auto &rule : rules_def.get_macro_rules ())
    1165        10813 :     visit (rule);
    1166         8574 : }
    1167              : 
    1168              : void
    1169         4238 : DefaultASTVisitor::visit (AST::MacroInvocData &data)
    1170              : {
    1171         4238 :   visit (data.get_path ());
    1172         4238 :   visit (data.get_delim_tok_tree ());
    1173         4238 : }
    1174              : void
    1175         4238 : DefaultASTVisitor::visit (AST::MacroInvocation &macro_invoc)
    1176              : {
    1177         4238 :   visit_outer_attrs (macro_invoc);
    1178         4238 :   visit (macro_invoc.get_invoc_data ());
    1179         4238 : }
    1180              : 
    1181              : void
    1182            8 : DefaultASTVisitor::visit (AST::MetaItemPath &meta_item)
    1183              : {
    1184            8 :   visit (meta_item.get_path ());
    1185            8 : }
    1186              : 
    1187              : void
    1188          158 : DefaultASTVisitor::visit (AST::MetaItemSeq &meta_item)
    1189              : {
    1190          158 :   visit (meta_item.get_path ());
    1191          375 :   for (auto &inner : meta_item.get_seq ())
    1192          217 :     visit (inner);
    1193          158 : }
    1194              : 
    1195              : void
    1196          742 : DefaultASTVisitor::visit (AST::MetaWord &meta_item)
    1197          742 : {}
    1198              : 
    1199              : void
    1200         4620 : DefaultASTVisitor::visit (AST::MetaNameValueStr &meta_item)
    1201         4620 : {}
    1202              : 
    1203              : void
    1204            0 : DefaultASTVisitor::visit (AST::MetaListPaths &meta_item)
    1205              : {
    1206            0 :   for (auto &path : meta_item.get_paths ())
    1207            0 :     visit (path);
    1208            0 : }
    1209              : 
    1210              : void
    1211            0 : DefaultASTVisitor::visit (AST::MetaListNameValueStr &meta_item)
    1212              : {
    1213            0 :   for (auto &str : meta_item.get_values ())
    1214            0 :     visit (str);
    1215            0 : }
    1216              : 
    1217              : void
    1218         7237 : DefaultASTVisitor::visit (AST::LiteralPattern &pattern)
    1219         7237 : {}
    1220              : 
    1221              : void
    1222       254882 : DefaultASTVisitor::visit (AST::IdentifierPattern &pattern)
    1223              : {
    1224       254882 :   if (pattern.has_subpattern ())
    1225          250 :     visit (pattern.get_subpattern ());
    1226       254882 : }
    1227              : 
    1228              : void
    1229        22497 : DefaultASTVisitor::visit (AST::WildcardPattern &pattern)
    1230        22497 : {}
    1231              : 
    1232              : void
    1233            0 : DefaultASTVisitor::visit (AST::RestPattern &pattern)
    1234            0 : {}
    1235              : 
    1236              : void
    1237         1654 : DefaultASTVisitor::visit (AST::RangePatternBoundLiteral &bound)
    1238         1654 : {}
    1239              : 
    1240              : void
    1241          189 : DefaultASTVisitor::visit (AST::RangePatternBoundPath &bound)
    1242              : {
    1243          189 :   visit (bound.get_path ());
    1244          189 : }
    1245              : 
    1246              : void
    1247            0 : DefaultASTVisitor::visit (AST::RangePatternBoundQualPath &bound)
    1248              : {
    1249            0 :   visit (bound.get_qualified_path ());
    1250            0 : }
    1251              : 
    1252              : void
    1253          811 : DefaultASTVisitor::visit (AST::RangePattern &pattern)
    1254              : {
    1255          811 :   if (pattern.get_has_lower_bound ())
    1256          811 :     visit (pattern.get_lower_bound ());
    1257          811 :   if (pattern.get_has_upper_bound ())
    1258          811 :     visit (pattern.get_upper_bound ());
    1259          811 : }
    1260              : 
    1261              : void
    1262         2567 : DefaultASTVisitor::visit (AST::ReferencePattern &pattern)
    1263              : {
    1264         2567 :   visit (pattern.get_referenced_pattern ());
    1265         2567 : }
    1266              : 
    1267              : void
    1268          318 : DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat &field)
    1269              : {
    1270          318 :   visit_outer_attrs (field);
    1271          318 :   visit (field.get_index_pattern ());
    1272          318 : }
    1273              : 
    1274              : void
    1275         1934 : DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat &field)
    1276              : {
    1277         1934 :   visit_outer_attrs (field);
    1278         1934 :   visit (field.get_ident_pattern ());
    1279         1934 : }
    1280              : 
    1281              : void
    1282          902 : DefaultASTVisitor::visit (AST::StructPatternFieldIdent &field)
    1283              : {
    1284          902 :   visit_outer_attrs (field);
    1285          902 : }
    1286              : 
    1287              : void
    1288         1608 : DefaultASTVisitor::visit (AST::StructPatternElements &spe)
    1289              : {
    1290         4268 :   for (auto &field : spe.get_struct_pattern_fields ())
    1291         2660 :     visit (field);
    1292         1608 :   for (auto &attribute : spe.get_etc_outer_attrs ())
    1293            0 :     visit (attribute);
    1294         1608 : }
    1295              : 
    1296              : void
    1297         1608 : DefaultASTVisitor::visit (AST::StructPattern &pattern)
    1298              : {
    1299         1608 :   visit (pattern.get_path ());
    1300         1608 :   visit (pattern.get_struct_pattern_elems ());
    1301         1608 : }
    1302              : 
    1303              : void
    1304        15798 : DefaultASTVisitor::visit (AST::TupleStructItemsNoRest &tuple_items)
    1305              : {
    1306        33254 :   for (auto &pattern : tuple_items.get_patterns ())
    1307        17456 :     visit (pattern);
    1308        15798 : }
    1309              : 
    1310              : void
    1311          538 : DefaultASTVisitor::visit (AST::TupleStructItemsHasRest &tuple_items)
    1312              : {
    1313          966 :   for (auto &lower : tuple_items.get_lower_patterns ())
    1314          428 :     visit (lower);
    1315          794 :   for (auto &upper : tuple_items.get_upper_patterns ())
    1316          256 :     visit (upper);
    1317          538 : }
    1318              : 
    1319              : void
    1320        16336 : DefaultASTVisitor::visit (AST::TupleStructPattern &pattern)
    1321              : {
    1322        16336 :   visit (pattern.get_path ());
    1323        16336 :   visit (pattern.get_items ());
    1324        16336 : }
    1325              : 
    1326              : void
    1327         8397 : DefaultASTVisitor::visit (AST::TuplePatternItemsNoRest &tuple_items)
    1328              : {
    1329        25397 :   for (auto &pattern : tuple_items.get_patterns ())
    1330        17000 :     visit (pattern);
    1331         8397 : }
    1332              : 
    1333              : void
    1334          372 : DefaultASTVisitor::visit (AST::TuplePatternItemsHasRest &tuple_items)
    1335              : {
    1336          756 :   for (auto &lower : tuple_items.get_lower_patterns ())
    1337          384 :     visit (lower);
    1338          804 :   for (auto &upper : tuple_items.get_upper_patterns ())
    1339          432 :     visit (upper);
    1340          372 : }
    1341              : 
    1342              : void
    1343         8769 : DefaultASTVisitor::visit (AST::TuplePattern &pattern)
    1344              : {
    1345         8769 :   visit (pattern.get_items ());
    1346         8769 : }
    1347              : 
    1348              : void
    1349          616 : DefaultASTVisitor::visit (AST::GroupedPattern &pattern)
    1350              : {
    1351          616 :   visit (pattern.get_pattern_in_parens ());
    1352          616 : }
    1353              : 
    1354              : void
    1355          440 : DefaultASTVisitor::visit (AST::SlicePatternItemsNoRest &items)
    1356              : {
    1357         1320 :   for (auto &item : items.get_patterns ())
    1358          880 :     visit (item);
    1359          440 : }
    1360              : 
    1361              : void
    1362          612 : DefaultASTVisitor::visit (AST::SlicePatternItemsHasRest &items)
    1363              : {
    1364         1212 :   for (auto &item : items.get_lower_patterns ())
    1365          600 :     visit (item);
    1366         1212 :   for (auto &item : items.get_upper_patterns ())
    1367          600 :     visit (item);
    1368          612 : }
    1369              : 
    1370              : void
    1371         1052 : DefaultASTVisitor::visit (AST::SlicePattern &pattern)
    1372              : {
    1373         1052 :   visit (pattern.get_items ());
    1374         1052 : }
    1375              : 
    1376              : void
    1377         2865 : DefaultASTVisitor::visit (AST::AltPattern &pattern)
    1378              : {
    1379         8893 :   for (auto &alt : pattern.get_alts ())
    1380         6028 :     visit (alt);
    1381         2865 : }
    1382              : 
    1383              : void
    1384          896 : DefaultASTVisitor::visit (AST::EmptyStmt &stmt)
    1385          896 : {}
    1386              : 
    1387              : void
    1388       191771 : DefaultASTVisitor::visit (AST::LetStmt &stmt)
    1389              : {
    1390       191771 :   visit_outer_attrs (stmt);
    1391       191771 :   visit (stmt.get_pattern ());
    1392       191771 :   if (stmt.has_type ())
    1393        29291 :     visit (stmt.get_type ());
    1394       191771 :   if (stmt.has_init_expr ())
    1395       176316 :     visit (stmt.get_init_expr ());
    1396       191771 : }
    1397              : 
    1398              : void
    1399       156806 : DefaultASTVisitor::visit (AST::ExprStmt &stmt)
    1400              : {
    1401       156806 :   visit (stmt.get_expr ());
    1402       156805 : }
    1403              : 
    1404              : void
    1405        23315 : DefaultASTVisitor::visit (AST::TraitBound &bound)
    1406              : {
    1407        23469 :   for (auto &lifetime : bound.get_for_lifetimes ())
    1408          154 :     visit (lifetime);
    1409        23315 :   visit (bound.get_type_path ());
    1410        23315 : }
    1411              : 
    1412              : void
    1413            0 : DefaultASTVisitor::visit (AST::ImplTraitType &type)
    1414              : {
    1415            0 :   for (auto &bound : type.get_type_param_bounds ())
    1416            0 :     visit (bound);
    1417            0 : }
    1418              : 
    1419              : void
    1420          173 : DefaultASTVisitor::visit (AST::TraitObjectType &type)
    1421              : {
    1422          614 :   for (auto &bound : type.get_type_param_bounds ())
    1423          441 :     visit (bound);
    1424          173 : }
    1425              : 
    1426              : void
    1427          101 : DefaultASTVisitor::visit (AST::ParenthesisedType &type)
    1428              : {
    1429          101 :   visit (type.get_type_in_parens ());
    1430          101 : }
    1431              : 
    1432              : void
    1433         1324 : DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound &type)
    1434              : {
    1435         1324 :   visit (type.get_trait_bound ());
    1436         1324 : }
    1437              : 
    1438              : void
    1439         2216 : DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound &type)
    1440              : {
    1441         2216 :   visit (type.get_trait_bound ());
    1442         2216 : }
    1443              : 
    1444              : void
    1445         6214 : DefaultASTVisitor::visit (AST::TupleType &type)
    1446              : {
    1447        15871 :   for (auto &elem : type.get_elems ())
    1448         9657 :     visit (elem);
    1449         6214 : }
    1450              : 
    1451              : void
    1452          851 : DefaultASTVisitor::visit (AST::NeverType &type)
    1453          851 : {}
    1454              : 
    1455              : void
    1456       117432 : DefaultASTVisitor::visit (AST::RawPointerType &type)
    1457              : {
    1458       117432 :   visit (type.get_type_pointed_to ());
    1459       117432 : }
    1460              : 
    1461              : void
    1462        80885 : DefaultASTVisitor::visit (AST::ReferenceType &type)
    1463              : {
    1464        80885 :   visit (type.get_lifetime ());
    1465        80885 :   visit (type.get_base_type ());
    1466        80885 : }
    1467              : 
    1468              : void
    1469        11837 : DefaultASTVisitor::visit (AST::ArrayType &type)
    1470              : {
    1471        11837 :   visit (type.get_elem_type ());
    1472        11837 :   visit (type.get_size_expr ());
    1473        11837 : }
    1474              : 
    1475              : void
    1476        12987 : DefaultASTVisitor::visit (AST::SliceType &type)
    1477              : {
    1478        12987 :   visit (type.get_elem_type ());
    1479        12987 : }
    1480              : 
    1481              : void
    1482         4428 : DefaultASTVisitor::visit (AST::InferredType &type)
    1483         4428 : {}
    1484              : 
    1485              : void
    1486          728 : DefaultASTVisitor::visit (AST::MaybeNamedParam &param)
    1487              : {
    1488          728 :   visit_outer_attrs (param);
    1489          728 :   visit (param.get_type ());
    1490          728 : }
    1491              : 
    1492              : void
    1493          916 : DefaultASTVisitor::visit (AST::BareFunctionType &type)
    1494              : {
    1495          956 :   for (auto &lifetime : type.get_for_lifetimes ())
    1496           40 :     visit (lifetime);
    1497          916 :   visit (type.get_function_qualifiers ());
    1498         1644 :   for (auto &param : type.get_function_params ())
    1499          728 :     visit (param);
    1500          916 :   if (type.is_variadic ())
    1501            0 :     for (auto attr : type.get_variadic_attr ())
    1502            0 :       visit (attr);
    1503          916 :   if (type.has_return_type ())
    1504          679 :     visit (type.get_return_type ());
    1505          916 : }
    1506              : 
    1507              : void
    1508            0 : DefaultASTVisitor::visit (AST::FormatArgs &)
    1509              : {
    1510              :   // FIXME: Do we have anything to do? any subnodes to visit? Probably, right?
    1511            0 : }
    1512              : 
    1513              : void
    1514          139 : DefaultASTVisitor::visit (AST::OffsetOf &offset_of)
    1515              : {
    1516          139 :   visit (offset_of.get_type ());
    1517          139 : }
    1518              : 
    1519              : void
    1520        10293 : DefaultASTVisitor::visit (AST::VariadicParam &param)
    1521              : {
    1522        10293 :   if (param.has_pattern ())
    1523          132 :     visit (param.get_pattern ());
    1524        10293 : }
    1525              : 
    1526              : void
    1527         4521 : ContextualASTVisitor::visit (AST::Crate &crate)
    1528              : {
    1529         4521 :   ctx.enter (Kind::CRATE);
    1530         4521 :   DefaultASTVisitor::visit (crate);
    1531         4521 :   ctx.exit ();
    1532         4521 : }
    1533              : 
    1534              : void
    1535          971 : ContextualASTVisitor::visit (AST::InherentImpl &impl)
    1536              : {
    1537          971 :   ctx.enter (Kind::INHERENT_IMPL);
    1538          971 :   DefaultASTVisitor::visit (impl);
    1539          971 :   ctx.exit ();
    1540          971 : }
    1541              : 
    1542              : void
    1543         4739 : ContextualASTVisitor::visit (AST::TraitImpl &impl)
    1544              : {
    1545         4739 :   ctx.enter (Kind::TRAIT_IMPL);
    1546         4739 :   DefaultASTVisitor::visit (impl);
    1547         4739 :   ctx.exit ();
    1548         4739 : }
    1549              : 
    1550              : void
    1551         3742 : ContextualASTVisitor::visit (AST::Trait &trait)
    1552              : {
    1553         3742 :   ctx.enter (Kind::TRAIT);
    1554         3742 :   DefaultASTVisitor::visit (trait);
    1555         3742 :   ctx.exit ();
    1556         3742 : }
    1557              : 
    1558              : } // namespace AST
    1559              : } // 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.