Class: MilkTea::ContainsRefTypeVisitor

Inherits:
TypeVisitor show all
Defined in:
lib/milk_tea/core/types/visitor.rb

Instance Method Summary collapse

Methods inherited from TypeVisitor

#dispatch, #visit, #visit_children, #visit_default, #visit_dyn, #visit_event, #visit_function, #visit_generic_struct_definition, #visit_generic_variant_definition, #visit_lifetime_ref, #visit_null, #visit_nullable, #visit_parameter, #visit_proc, #visit_simd, #visit_soa, #visit_span, #visit_struct, #visit_struct_instance, #visit_task, #visit_tuple, #visit_type_var, #visit_union, #visit_variant, #visit_variant_arm_payload, #visit_variant_instance

Constructor Details

#initialize(allow_lifetimes: []) ⇒ ContainsRefTypeVisitor

Returns a new instance of ContainsRefTypeVisitor.



95
96
97
98
99
# File 'lib/milk_tea/core/types/visitor.rb', line 95

def initialize(allow_lifetimes: [])
  super()
  @found = false
  @allow_lifetimes = allow_lifetimes
end

Instance Method Details

#found?Boolean

Returns:

  • (Boolean)


101
102
103
# File 'lib/milk_tea/core/types/visitor.rb', line 101

def found?
  @found
end

#visit_generic_instance(type) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/milk_tea/core/types/visitor.rb', line 105

def visit_generic_instance(type)
  if type.name == "ref" && [1, 2].include?(type.arguments.length)
    if type.arguments.length == 2
      lt = type.arguments.first
      if lt.is_a?(String) && @allow_lifetimes.include?(lt)
        visit_children(type)
        return
      end
    end
    @found = true
    return
  end
  visit_children(type)
end