<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -7,10 +7,52 @@ llvm_value_wrap(Value* v) {
 }
 
 VALUE
-llvm_value_get_name(VALUE self) {
-  Value *v = LLVM_VAL(self);
-  std::string name = v-&gt;getName();
-  return rb_str_new2(name.c_str());
+llvm_value_name(VALUE self) {
+  Value *v;
+  Data_Get_Struct(self, Value, v);
+
+  if(v-&gt;hasName()) {
+    const char *name = v-&gt;getNameStart();
+    int len = v-&gt;getNameLen();
+    return rb_str_new(name, len);
+  } else {
+    return Qnil;
+  }
+}
+
+VALUE
+llvm_value_set_name(VALUE self, VALUE rname) {
+  Value *v;
+  Data_Get_Struct(self, Value, v);
+  v-&gt;setName(RSTRING_PTR(rname), RSTRING_LEN(rname));
+  return rname; 
+}
+
+VALUE 
+llvm_value_num_uses(VALUE self) {
+  Value *v;
+  Data_Get_Struct(self, Value, v);
+  return INT2FIX(v-&gt;getNumUses());
+}
+
+VALUE 
+llvm_value_used_in_basic_block(VALUE self, VALUE rbb) {
+  Value *v;
+  Data_Get_Struct(self, Value, v);
+  
+  BasicBlock *bb;
+  Data_Get_Struct(rbb, BasicBlock, bb);
+
+  return v-&gt;isUsedInBasicBlock(bb) ? Qtrue : Qfalse;
+}
+
+VALUE 
+llvm_value_replace_all_uses_with(VALUE self, VALUE rv2) {
+  Value *v1, *v2;
+  Data_Get_Struct(self, Value, v1);
+  Data_Get_Struct(rv2, Value, v2);
+  v1-&gt;replaceAllUsesWith(v2);
+  return rv2;
 }
 
 VALUE </diff>
      <filename>ext/llvm_value.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -106,8 +106,11 @@ VALUE llvm_value_get_float_constant(VALUE);
 VALUE llvm_value_get_double_constant(VALUE);
 VALUE llvm_value_get_immediate_constant(VALUE);
 VALUE llvm_value_get_struct_constant(int, VALUE*, VALUE);
-VALUE llvm_value_get_name(VALUE);
-
+VALUE llvm_value_name(VALUE);
+VALUE llvm_value_set_name(VALUE, VALUE);
+VALUE llvm_value_num_uses(VALUE);
+VALUE llvm_value_used_in_basic_block(VALUE, VALUE);
+VALUE llvm_value_replace_all_uses_with(VALUE, VALUE);
 
 VALUE llvm_phi_add_incoming(VALUE, VALUE, VALUE);
 
@@ -158,7 +161,11 @@ void Init_llvmruby() {
   rb_define_module_function(cLLVMValue, &quot;get_double_constant&quot;, llvm_value_get_double_constant, 1);
   rb_define_module_function(cLLVMValue, &quot;get_immediate_constant&quot;, llvm_value_get_immediate_constant, 1);
   rb_define_module_function(cLLVMValue, &quot;get_struct_constant&quot;, llvm_value_get_struct_constant, -1);
-  rb_define_method(cLLVMValue, &quot;get_name&quot;, llvm_value_get_name, 0);
+  rb_define_method(cLLVMValue, &quot;name&quot;, llvm_value_name, 0);
+  rb_define_method(cLLVMValue, &quot;name=&quot;, llvm_value_set_name, 1);
+  rb_define_method(cLLVMValue, &quot;num_uses&quot;, llvm_value_num_uses, 0);
+  rb_define_method(cLLVMValue, &quot;used_in_basic_block?&quot;, llvm_value_used_in_basic_block, 1);
+  rb_define_method(cLLVMValue, &quot;replace_all_uses_with&quot;, llvm_value_replace_all_uses_with, 1);
 
   init_instructions();
 </diff>
      <filename>ext/llvmruby.c</filename>
    </modified>
    <modified>
      <diff>@@ -57,9 +57,24 @@ class BasicBlockTests &lt; Test::Unit::TestCase
     expected = { 'entry' =&gt; 2, 'bb5' =&gt; 6, 'bb11' =&gt; 2, 'bb15.split' =&gt; 2, 'bb19' =&gt; 4, 'bb26' =&gt; 2 }
     res = Hash.new
     bbs.each { |b|
-      res[b.get_name] = b.size
+      res[b.name] = b.size
     }
     assert_equal(expected,res)
   end
 
+  def test_manipulate_values
+    m = LLVM::Module.read_assembly(@assembly_gcd)
+    gcd = m.get_function(&quot;gcd&quot;)
+
+    bbs = gcd.get_basic_block_list
+    bb = bbs.first
+    assert_equal('entry', bb.name)
+    bb.name = 'first_block'
+    assert_equal('first_block', bb.name)
+    assert_equal(3, bb.num_uses)
+    bb2 = bbs.find {|x| x.name == 'bb19'}
+    assert(bb.used_in_basic_block?(bb2))
+    bb3 = bbs.find {|x| x.name = 'bb26'}
+    assert(!bb.used_in_basic_block?(bb3))
+  end
 end</diff>
      <filename>test/test_basic_block.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>e0eb33ec85b71d3761cb648e1fdc89a724b5bb9e</id>
    </parent>
  </parents>
  <author>
    <name>Tom Bagby</name>
    <email>tomatobagby@gmail.com</email>
  </author>
  <url>http://github.com/tombagby/llvmruby/commit/d5243b0f46107e05471f884a95fe723ec6aaee23</url>
  <id>d5243b0f46107e05471f884a95fe723ec6aaee23</id>
  <committed-date>2008-10-19T16:20:12-07:00</committed-date>
  <authored-date>2008-10-19T16:20:12-07:00</authored-date>
  <message>fix value name handling, more value methods</message>
  <tree>78be5acd5b09cc8659fb2f01a64032e50ee4015b</tree>
  <committer>
    <name>Tom Bagby</name>
    <email>tomatobagby@gmail.com</email>
  </committer>
</commit>
