Class: MilkTea::SendableCheckVisitor

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

Instance Method Summary collapse

Methods inherited from TypeVisitor

#dispatch, #visit, #visit_generic_struct_definition, #visit_generic_variant_definition, #visit_lifetime_ref, #visit_null, #visit_nullable, #visit_parameter, #visit_simd, #visit_soa, #visit_task, #visit_tuple, #visit_type_var, #visit_union, #visit_variant, #visit_variant_arm_payload, #visit_variant_instance

Constructor Details

#initializeSendableCheckVisitor

Returns a new instance of SendableCheckVisitor.



202
203
204
205
# File 'lib/milk_tea/core/types/visitor.rb', line 202

def initialize
  super
  @sendable = true
end

Instance Method Details

#sendable?Boolean

Returns:

  • (Boolean)


207
208
209
# File 'lib/milk_tea/core/types/visitor.rb', line 207

def sendable?
  @sendable
end

#visit_children(type) ⇒ Object



211
212
213
214
215
216
# File 'lib/milk_tea/core/types/visitor.rb', line 211

def visit_children(type)
  type.children.each do |child|
    visit(child)
    return unless @sendable
  end
end

#visit_default(type) ⇒ Object



259
260
261
262
263
264
265
266
# File 'lib/milk_tea/core/types/visitor.rb', line 259

def visit_default(type)
  case type
  when Types::Primitive
    @sendable = false if type.name == "str"
  when Types::Error, Types::Opaque, Types::StringView
    @sendable = false
  end
end

#visit_dyn(type) ⇒ Object



222
223
224
# File 'lib/milk_tea/core/types/visitor.rb', line 222

def visit_dyn(type)
  @sendable = false
end

#visit_event(type) ⇒ Object



218
219
220
# File 'lib/milk_tea/core/types/visitor.rb', line 218

def visit_event(type)
  @sendable = false
end

#visit_function(type) ⇒ Object



234
# File 'lib/milk_tea/core/types/visitor.rb', line 234

def visit_function(type); end

#visit_generic_instance(type) ⇒ Object



236
237
238
239
240
241
242
243
244
245
246
247
248
# File 'lib/milk_tea/core/types/visitor.rb', line 236

def visit_generic_instance(type)
  case type.name
  when "ptr", "const_ptr", "own", "ref"
    @sendable = false
  when "array"
    el = type.arguments.first
    visit(el) unless el.is_a?(Types::LiteralTypeArg)
  when "str_buffer", "atomic"
    # sendable
  else
    @sendable = false
  end
end

#visit_proc(type) ⇒ Object



230
231
232
# File 'lib/milk_tea/core/types/visitor.rb', line 230

def visit_proc(type)
  @sendable = false
end

#visit_span(type) ⇒ Object



226
227
228
# File 'lib/milk_tea/core/types/visitor.rb', line 226

def visit_span(type)
  @sendable = false
end

#visit_struct(type) ⇒ Object Also known as: visit_struct_instance



250
251
252
253
254
255
256
# File 'lib/milk_tea/core/types/visitor.rb', line 250

def visit_struct(type)
  if type.respond_to?(:has_events?) && type.has_events?
    @sendable = false
    return
  end
  visit_children(type)
end