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



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

Returns:

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