Skip to content

Commit 6163eab

Browse files
committed
Fix marshalling of pg tuples.
1 parent 2f8f3cc commit 6163eab

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

lib/truffle/truffle/cext.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,26 @@ def rb_obj_instance_variables(object)
620620
object.instance_variables
621621
end
622622

623+
def rb_copy_generic_ivar(clone, original)
624+
Truffle.check_frozen(clone)
625+
original_ivars = original.instance_variables
626+
clone_ivars = clone.instance_variables
627+
clone_ivars.each do |var|
628+
clone.__send__ :remove_instance_variable, var
629+
end
630+
original_ivars.each do |var|
631+
clone.instance_variable_set(var, original.instance_variable_get(var))
632+
end
633+
end
634+
635+
def rb_free_generic_ivar(original)
636+
Truffle.check_frozen(original)
637+
original_ivars = original.instance_variables
638+
original_ivars.each do |var|
639+
original.__send__ :remove_instance_variable, var
640+
end
641+
end
642+
623643
def rb_inspect(object)
624644
Truffle::Type.rb_inspect(object)
625645
end

src/main/c/cext/ruby.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1276,6 +1276,9 @@ int rb_tr_flags(VALUE value) {
12761276
if (OBJ_TAINTED(value)) {
12771277
flags |= RUBY_FL_TAINT;
12781278
}
1279+
if (rb_array_len(rb_obj_instance_variables(value)) > 0) {
1280+
flags |= RUBY_FL_EXIVAR;
1281+
}
12791282
// TODO BJF Nov-11-2017 Implement more flags
12801283
return flags;
12811284
}
@@ -4403,11 +4406,11 @@ void rb_alias_variable(ID name1, ID name2) {
44034406
}
44044407

44054408
void rb_copy_generic_ivar(VALUE clone, VALUE obj) {
4406-
rb_tr_error("rb_copy_generic_ivar not implemented");
4409+
RUBY_CEXT_INVOKE_NO_WRAP("rb_copy_generic_ivar", clone, obj);
44074410
}
44084411

44094412
void rb_free_generic_ivar(VALUE obj) {
4410-
rb_tr_error("rb_free_generic_ivar not implemented");
4413+
RUBY_CEXT_INVOKE_NO_WRAP("rb_free_generic_ivar", obj);
44114414
}
44124415

44134416
void rb_ivar_foreach(VALUE obj, int (*func)(ANYARGS), st_data_t arg) {

0 commit comments

Comments
 (0)