This file is indexed.

/usr/lib/ruby/vendor_ruby/treetop/compiler/node_classes/parsing_expression.rb is in ruby-treetop 1.4.10-5.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
module Treetop
  module Compiler
    class ParsingExpression < Runtime::SyntaxNode
      attr_reader :address, :builder, :subexpression_address, :var_symbols, :parent_expression
    
      def compile(address, builder, parent_expression)
        @address = address
        @builder = builder
        @parent_expression = parent_expression
      end
      
      def node_class_name
        parent_expression && parent_expression.node_class_name || 'SyntaxNode'
      end
      
      def declared_module_name
        parent_expression && parent_expression.node_class_name
      end
      
      def inline_module_name
        parent_expression && parent_expression.inline_module_name
      end
      
      def decorated?
        parent_expression && (parent_expression.node_class_name || parent_expression.node_class_name || parent_expression.inline_module_name)
      end
      
      def optional_arg(arg)
        if arg
          ", #{arg}"
        else
          ''
        end
      end
    
      def use_vars(*var_symbols)
        @var_symbols = var_symbols
        builder << var_initialization
      end
    
      def result_var
        var(:result)
      end
    
      def accumulator_var
        var(:accumulator)
      end
      
      def start_index_var
        var(:start_index)
      end
    
      def subexpression_result_var
        "r#{subexpression_address}"
      end
    
      def subexpression_success?
        subexpression_result_var
      end
    
      def obtain_new_subexpression_address
        @subexpression_address = builder.next_address
      end
        
      def accumulate_subexpression_result
        builder.accumulate accumulator_var, subexpression_result_var
      end
    
      def assign_result(value_ruby)
        builder.assign result_var, value_ruby
      end
      
      def extend_result(module_name)
        builder.extend result_var, module_name
      end

      def extend_result_with_declared_module
        extend_result declared_module_name if declared_module_name
      end
      
      def extend_result_with_inline_module
        extend_result inline_module_name if inline_module_name
      end
    
      def reset_index
        builder.assign '@index', start_index_var
      end
      
      def epsilon_node
        "instantiate_node(SyntaxNode,input, index...index)"
      end
      
      def assign_failure(start_index_var)
        assign_result("nil")
      end
      
      def assign_lazily_instantiated_node
        assign_result("true")
      end
    
      def var_initialization
        left, right = [], []
        var_symbols.each do |symbol|
          if init_value(symbol)
            left << var(symbol)
            right << init_value(symbol)
          end
        end
        if left.empty?
          ""
        else
          left.join(', ') + ' = ' + right.join(', ')
        end
      end
    
      def var(var_symbol)
        case var_symbol
        when :result then "r#{address}"
        when :accumulator then "s#{address}"
        when :start_index then "i#{address}"
        else raise "Unknown var symbol #{var_symbol}."
        end
      end
    
      def init_value(var_symbol)
        case var_symbol
        when :accumulator then '[]'
        when :start_index then 'index'
        else nil
        end
      end
      
      def begin_comment(expression)
        #builder << "# begin #{on_one_line(expression)}"
      end
      
      def end_comment(expression)
        #builder << "# end #{on_one_line(expression)}"
      end
      
      def on_one_line(expression)
        expression.text_value.tr("\n", ' ')
      end
    end
  end
end