Module: MilkTea::Types

Defined in:
lib/milk_tea/core/types/types.rb,
lib/milk_tea/core/types/registry.rb

Defined Under Namespace

Modules: Registry Classes: AttributeHandle, Base, CallableHandle, Dyn, DynVtable, Enum, EnumBase, Error, Event, FieldHandle, Flags, Function, GenericInstance, GenericStructDefinition, GenericVariantDefinition, Handle, LifetimeRef, LiteralTypeArg, Matrix, MemberHandle, Null, Nullable, Opaque, Parameter, Primitive, Proc, Quaternion, ReflectionHandleType, Simd, SoA, Span, StringView, Struct, StructHandle, StructInstance, Subscription, Task, Tuple, TypeType, TypeVar, Union, Variant, VariantArmPayload, VariantInstance, Vector

Constant Summary collapse

BUILTIN_PRIMITIVE_NAMES =
MilkTea::BUILTIN_PRIMITIVE_NAMES
RESERVED_VALUE_TYPE_NAMES =
MilkTea::RESERVED_VALUE_TYPE_NAMES
RESERVED_IMPORT_ALIAS_NAMES =
MilkTea::RESERVED_IMPORT_ALIAS_NAMES
BUILTIN_TYPE_NAMES =
MilkTea::BUILTIN_TYPE_NAMES
RESERVED_TYPE_BINDING_NAMES =
BUILTIN_TYPE_NAMES
BUILTIN_STRUCT_HANDLE_TYPE =
ReflectionHandleType.new("struct_handle")
BUILTIN_FIELD_HANDLE_TYPE =
ReflectionHandleType.new("field_handle")
BUILTIN_CALLABLE_HANDLE_TYPE =
ReflectionHandleType.new("callable_handle")
BUILTIN_ATTRIBUTE_HANDLE_TYPE =
ReflectionHandleType.new("attribute_handle")
BUILTIN_MEMBER_HANDLE_TYPE =
ReflectionHandleType.new("member_handle")
BUILTIN_TYPE_META_TYPE =
TypeType.new
BUILTIN_VECTOR_ELEMENT =
Primitive.new("float")
BUILTIN_IVECTOR_ELEMENT =
Primitive.new("int")
BUILTIN_OPTION_TYPE =
GenericVariantDefinition.new("Option", ["T"]).define_arms(
  "some" => { "value" => TypeVar.new("T") },
  "none" => {},
)
BUILTIN_RESULT_TYPE =
GenericVariantDefinition.new("Result", ["T", "E"]).define_arms(
  "success" => { "value" => TypeVar.new("T") },
  "failure" => { "error" => TypeVar.new("E") },
)

Class Method Summary collapse

Class Method Details

.array_type?(type) ⇒ Boolean

Returns:

  • (Boolean)


1730
1731
1732
# File 'lib/milk_tea/core/types/types.rb', line 1730

def self.array_type?(type)
  type.is_a?(GenericInstance) && type.name == "array" && type.arguments.length == 2
end

.integer_type?(type) ⇒ Boolean

Returns:

  • (Boolean)


1726
1727
1728
# File 'lib/milk_tea/core/types/types.rb', line 1726

def self.integer_type?(type)
  type.is_a?(Primitive) && %w[int ptr_uint i8 i16 i32 i64 u8 u16 u32 u64].include?(type.name)
end

.pointer_to(type) ⇒ Object



1722
1723
1724
# File 'lib/milk_tea/core/types/types.rb', line 1722

def self.pointer_to(type)
  GenericInstance.new("ptr", [type])
end

.str_buffer_type?(type) ⇒ Boolean

Returns:

  • (Boolean)


1734
1735
1736
# File 'lib/milk_tea/core/types/types.rb', line 1734

def self.str_buffer_type?(type)
  type.is_a?(GenericInstance) && type.name == "str_buffer" && type.arguments.length == 1
end

.substitute_type_variables(type, substitutions) ⇒ Object



15
16
17
# File 'lib/milk_tea/core/types/types.rb', line 15

def self.substitute_type_variables(type, substitutions)
  SubstituteTypeVisitor.new(substitutions).apply(type)
end