Module: LLVM::RubyHelpers
Overview
include this into the builder to get methods for manipulating ruby values
Constant Summary
LLVM::RubyInternals::CHAR, LLVM::RubyInternals::FIXNUM_FLAG, LLVM::RubyInternals::ID, LLVM::RubyInternals::INT, LLVM::RubyInternals::LONG, LLVM::RubyInternals::P_CHAR, LLVM::RubyInternals::P_RARRAY, LLVM::RubyInternals::P_RSTRING, LLVM::RubyInternals::P_VALUE, LLVM::RubyInternals::RARRAY, LLVM::RubyInternals::RBASIC, LLVM::RubyInternals::RSTRING, LLVM::RubyInternals::VALUE
Instance Method Summary
collapse
Instance Method Details
#alen(ary) ⇒ Object
124
125
126
127
128
|
# File 'lib/llvm.rb', line 124
def alen(ary)
val_ptr = int_to_ptr(ary, P_RARRAY)
len_ptr = struct_gep(val_ptr, 1)
load(len_ptr)
end
|
#aref(ary, idx) ⇒ Object
130
131
132
133
134
135
136
|
# File 'lib/llvm.rb', line 130
def aref(ary, idx)
val_ptr = int_to_ptr(ary, P_RARRAY)
data_ptr = struct_gep(val_ptr, 3)
data_ptr = load(data_ptr)
slot_n = gep(data_ptr, idx.llvm)
load(slot_n)
end
|
#aset(ary, idx, set) ⇒ Object
138
139
140
141
142
143
144
|
# File 'lib/llvm.rb', line 138
def aset(ary, idx, set)
val_ptr = int_to_ptr(ary, P_RARRAY)
data_ptr = struct_gep(val_ptr, 3)
data_ptr = load(data_ptr)
slot_n = gep(data_ptr, idx.llvm)
store(set, slot_n)
end
|
#fix2int(val) ⇒ Object
113
114
115
116
|
# File 'lib/llvm.rb', line 113
def fix2int(val)
x = xor(FIXNUM_FLAG, val)
lshr(val, 1.llvm)
end
|
#fixnum?(val) ⇒ Boolean
104
105
106
|
# File 'lib/llvm.rb', line 104
def fixnum?(val)
self.and(FIXNUM_FLAG, val)
end
|
#num2fix(val) ⇒ Object
108
109
110
111
|
# File 'lib/llvm.rb', line 108
def num2fix(val)
shifted = shl(val, 1.llvm)
xor(FIXNUM_FLAG, shifted)
end
|
#slen(str) ⇒ Object
118
119
120
121
122
|
# File 'lib/llvm.rb', line 118
def slen(str)
val_ptr = int_to_ptr(str, P_RSTRING)
len_ptr = struct_gep(val_ptr, 1)
load(len_ptr)
end
|