Class: MilkTea::Types::SendableCheckVisitor

Inherits:
Visitor
  • Object
show all
Defined in:
lib/milk_tea/core/types/visitor.rb

Instance Method Summary collapse

Methods inherited from Visitor

#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.



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

def initialize
  super
  @sendable = true
end

Instance Method Details

#sendable?Boolean

Returns:

  • (Boolean)


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

def sendable?
  @sendable
end

#visit_children(type) ⇒ Object



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

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

#visit_default(type) ⇒ Object



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

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



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

def visit_dyn(type)
  @sendable = false
end

#visit_event(type) ⇒ Object



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

def visit_event(type)
  @sendable = false
end

#visit_function(type) ⇒ Object



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

def visit_function(type); end

#visit_generic_instance(type) ⇒ Object



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

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



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

def visit_proc(type)
  @sendable = false
end

#visit_span(type) ⇒ Object



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

def visit_span(type)
  @sendable = false
end

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



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

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