Module: LLVM::RubyHelpers

Includes:
RubyInternals
Defined in:
lib/llvm.rb

Overview

include this into the builder to get methods for manipulating ruby values

Constant Summary

Constants included from RubyInternals

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

Returns:

  • (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