class
Crystal::LLVMId
Overview
This class assigns a pair of IDs {min, max} to every type in the program.
For a regular class or struct (not metaclass), this pair
of ids is such that min is the minimum ID of its subtypes,
and max is 1 + the maximum ID of its subtypes. In this way
we can quickly know if a type implements another type: its ID
must be between {min, max} of such type.
For example, ids could be assigned like this:
- Foo: {1, 8}
- Bar: {1, 2}
- Baz: {1, 1}
- Qux: {3, 3}
- Gen(T): {5, 7}
- Gen(Int32): {4, 4}
- Gen2(T): {5, 6}
- Gen2(Char): {5, 5}
- Bar: {1, 2}
Note that generic instances and generic subtypes are considered as subtypes of a generic type.
For metaclasses IDs are assigned sequentially as they are needed, because dispatch on metaclasses is less often.
Defined in:
compiler/crystal/codegen/llvm_id.crConstructors
Instance Method Summary
- #id_to_metaclass : Hash(Int32, Int32)
- #min_max_type_id(type)
- #type_id(type : TypeDefType)
- #type_id(type : VirtualType | VirtualMetaclassType)
- #type_id(type)
Instance methods inherited from class Reference
==(other : self)==(other : JSON::Any)
==(other : YAML::Any)
==(other) ==, dup dup, hash(hasher) hash, initialize initialize, inspect(io : IO) : Nil inspect, object_id : UInt64 object_id, pretty_print(pp) : Nil pretty_print, same?(other : Reference) : Bool
same?(other : Nil) same?, to_s(io : IO) : Nil to_s
Constructor methods inherited from class Reference
new
new,
unsafe_construct(address : Pointer, *args, **opts) : self
unsafe_construct
Class methods inherited from class Reference
pre_initialize(address : Pointer)
pre_initialize
Instance methods inherited from class Object
! : Bool
!,
!=(other)
!=,
!~(other)
!~,
==(other)
==,
===(other : JSON::Any)===(other : YAML::Any)
===(other) ===, =~(other) =~, as(type : Class) as, as?(type : Class) as?, class class, dup dup, hash(hasher)
hash hash, in?(collection : Object) : Bool
in?(*values : Object) : Bool in?, inspect(io : IO) : Nil
inspect : String inspect, is_a?(type : Class) : Bool is_a?, itself itself, nil? : Bool nil?, not_nil!(message)
not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, responds_to?(name : Symbol) : Bool responds_to?, tap(&) tap, to_json(io : IO) : Nil
to_json : String to_json, to_pretty_json(indent : String = " ") : String
to_pretty_json(io : IO, indent : String = " ") : Nil to_pretty_json, to_s(io : IO) : Nil
to_s : String to_s, to_yaml(io : IO) : Nil
to_yaml : String to_yaml, try(&) try, unsafe_as(type : T.class) forall T unsafe_as
Class methods inherited from class Object
from_json(string_or_io : String | IO, root : String)from_json(string_or_io : String | IO) from_json, from_yaml(string_or_io : String | IO) from_yaml