Class: RLTK::CG::Type Abstract

Inherits:
Object
  • Object
show all
Includes:
Filigree::AbstractClass, BindingClass
Defined in:
lib/rltk/cg/type.rb

Overview

This class is abstract.

Root of the type class hierarchy.

The Type class and its sub-classes are used to describe the size and structure of various data objects inside LLVM and how different operations interact with them. When instantiating objects of the Value class you will often need to pass in some type information.

Instance Attribute Summary

Attributes included from BindingClass

#ptr

Class Method Summary collapse

Instance Method Summary collapse

Methods included from BindingClass

#==

Constructor Details

#initialize(context = nil) ⇒ Type

The default constructor for Type objects.

Parameters:

  • context (Context, nil) (defaults to: nil)

    An optional context in which to create the type.



66
67
68
69
70
71
72
73
74
75
# File 'lib/rltk/cg/type.rb', line 66

def initialize(context = nil)
	bname = Bindings.get_bname(self.class.short_name)
	
	@ptr =
	if context
		Bindings.send((bname.to_s + '_in_context').to_sym, check_type(context, Context, 'context'))
	else
		Bindings.send(bname)
	end
end

Class Method Details

.from_ptr(ptr) ⇒ Type

Instantiate a Type object from a pointer. This function is used internally, and as a library user you should never have to call it.

Parameters:

  • ptr (FFI::Pointer)

Returns:

  • (Type)

    A object of type Type or one of its sub-classes.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/rltk/cg/type.rb', line 42

def self.from_ptr(ptr)
	case Bindings.get_type_kind(ptr)
	when :array		then ArrayType.new(ptr)
	when :half          then HalfType.new
	when :double		then DoubleType.new
	when :float		then FloatType.new
	when :function		then FunctionType.new(ptr)
	when :fp128		then FP128Type.new
	when :integer		then IntType.new
	when :label		then LabelType.new
	when :metadata		then raise "Can't generate a Type object for objects of type Metadata."
	when :pointer		then PointerType.new(ptr)
	when :ppc_fp128	then PPCFP128Type.new
	when :struct		then StructType.new(ptr)
	when :vector		then VectorType.new(ptr)
	when :void		then VoidType.new
	when :x86_fp80		then X86FP80Type.new
	when :x86_mmx		then X86MMXType.new
	end
end

Instance Method Details

#allignmentNativeInt

Returns Alignment of the type.

Returns:



78
79
80
# File 'lib/rltk/cg/type.rb', line 78

def allignment
	NativeInt.new(Bindings.align_of(@ptr))
end

#contextContext

Returns Context in which this type was created.

Returns:

  • (Context)

    Context in which this type was created.



83
84
85
# File 'lib/rltk/cg/type.rb', line 83

def context
	Context.new(Bindings.get_type_context(@ptr))
end

#dumpvoid

This method returns an undefined value.

Dump a string representation of the type to stdout.



90
91
92
# File 'lib/rltk/cg/type.rb', line 90

def dump
	Bindings.dump_type(@ptr)
end

#hashFixnum

Returns Hashed value of the pointer representing this type.

Returns:

  • (Fixnum)

    Hashed value of the pointer representing this type.



95
96
97
# File 'lib/rltk/cg/type.rb', line 95

def hash
	@ptr.address.hash
end

#kindSymbol

Returns The kind of this type.

Returns:

  • (Symbol)

    The kind of this type.

See Also:



102
103
104
# File 'lib/rltk/cg/type.rb', line 102

def kind
	Bindings.get_type_kind(@ptr)
end

#sizeNativeInt

Returns Size of objects of this type.

Returns:

  • (NativeInt)

    Size of objects of this type.



107
108
109
# File 'lib/rltk/cg/type.rb', line 107

def size
	Int64.new(Bindings.size_of(@ptr))
end

#to_sString

Returns LLVM IR representation of the type.

Returns:

  • (String)

    LLVM IR representation of the type



112
113
114
# File 'lib/rltk/cg/type.rb', line 112

def to_s
	Bindings.print_type_to_string(@ptr)
end