19 #include <ruby/ruby.h>
36 #ifdef RUBY_TYPED_FREE_IMMEDIATELY
37 RUBY_TYPED_FREE_IMMEDIATELY
50 the_key = StringValuePtr(
key);
54 the_key = rb_id2name(SYM2ID(
key));
58 rb_raise(rb_eTypeError,
"bad chan arg: got <%s>, want <String|Symbol>",
59 rb_obj_classname(
key));
65 if (
args->num_args <= 0) {
66 rb_raise(rb_eRuntimeError,
"hash_cb bug: num_args is %lu for key:%s",
67 args->num_args, StringValueCStr(
key));
71 args->args[
args->num_args - 1].key = (
char*)the_key;
75 args->args[
args->num_args - 1].value.string =
76 (
char*)rb_id2name(SYM2ID(val));
82 args->args[
args->num_args - 1].value.string = StringValueCStr(val);
88 args->args[
args->num_args - 1].value.integer = NUM2INT(val);
93 rb_raise(rb_eTypeError,
"%s: bad value: got <%s>, want <String|Fixnum>",
94 StringValueCStr(
key), rb_obj_classname(val));
97 rb_raise(rb_eRuntimeError,
"impl bug: hash_cb reached to far while on key:%s",
98 StringValueCStr(
key));
112 ID id_size = rb_intern(
"size");
118 rb_raise(rb_eTypeError,
"bad channel args: got:<%s> want: a hash or nil",
119 rb_obj_classname(params->
src_hash));
124 num_args = NUM2INT(rb_funcall(params->
src_hash, id_size, 0));
149 if (
dst->args != NULL) {