Class: MilkTea::Types::Dyn

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#accept, #bitwise?, #boolean?, #field_c_name, #float?, #integer?, #numeric?, #sendable?, #void?

Constructor Details

#initialize(interface_binding, type_arguments = []) ⇒ Dyn

Returns a new instance of Dyn.



1645
1646
1647
1648
1649
1650
# File 'lib/milk_tea/core/types.rb', line 1645

def initialize(interface_binding, type_arguments = [])
  @interface_binding = interface_binding
  @type_arguments = type_arguments
  @hash = [self.class, interface_binding, type_arguments].hash
  freeze
end

Instance Attribute Details

#hashObject (readonly)

Returns the value of attribute hash.



1658
1659
1660
# File 'lib/milk_tea/core/types.rb', line 1658

def hash
  @hash
end

#interface_bindingObject (readonly)

Returns the value of attribute interface_binding.



1643
1644
1645
# File 'lib/milk_tea/core/types.rb', line 1643

def interface_binding
  @interface_binding
end

#type_argumentsObject (readonly)

Returns the value of attribute type_arguments.



1643
1644
1645
# File 'lib/milk_tea/core/types.rb', line 1643

def type_arguments
  @type_arguments
end

Instance Method Details

#childrenObject



1673
1674
1675
# File 'lib/milk_tea/core/types.rb', line 1673

def children
  type_arguments
end

#eql?(other) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


1652
1653
1654
# File 'lib/milk_tea/core/types.rb', line 1652

def eql?(other)
  other.is_a?(Dyn) && other.interface_binding == interface_binding && other.type_arguments == type_arguments
end

#field(name) ⇒ Object



1668
1669
1670
1671
# File 'lib/milk_tea/core/types.rb', line 1668

def field(name)
  void_ptr = GenericInstance.new("ptr", [Primitive.new("void")])
  { "data" => void_ptr, "vtable" => void_ptr }[name]
end

#to_sObject



1660
1661
1662
1663
1664
1665
1666
# File 'lib/milk_tea/core/types.rb', line 1660

def to_s
  if type_arguments.any?
    "dyn[#{interface_binding.name}[#{type_arguments.map(&:to_s).join(', ')}]]"
  else
    "dyn[#{interface_binding.name}]"
  end
end