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
120
121
122
123
124
|
# File 'lib/llvm.rb', line 120
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
126
127
128
129
130
131
132
|
# File 'lib/llvm.rb', line 126
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
134
135
136
137
138
139
140
|
# File 'lib/llvm.rb', line 134
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
109
110
111
112
|
# File 'lib/llvm.rb', line 109
def fix2int(val)
x = xor(FIXNUM_FLAG, val)
lshr(val, 1.llvm)
end
|
#fixnum?(val) ⇒ Boolean
100
101
102
|
# File 'lib/llvm.rb', line 100
def fixnum?(val)
self.and(FIXNUM_FLAG, val)
end
|
#num2fix(val) ⇒ Object
104
105
106
107
|
# File 'lib/llvm.rb', line 104
def num2fix(val)
shifted = shl(val, 1.llvm)
xor(FIXNUM_FLAG, shifted)
end
|
#slen(str) ⇒ Object
114
115
116
117
118
|
# File 'lib/llvm.rb', line 114
def slen(str)
val_ptr = int_to_ptr(str, P_RSTRING)
len_ptr = struct_gep(val_ptr, 1)
load(len_ptr)
end
|