Index: test/Test.java =================================================================== --- test/Test.java (リビジョン 42) +++ test/Test.java (作業コピー) @@ -87,10 +87,26 @@ public enum TestTypes { ONE, TWO, THREE } + public SortedMap getSortedMap() { SortedMap map = new TreeMap(); map.put("abc", new byte[]{0,1,2,3,4}); map.put("def", new byte[]{5,6,7,8,9}); return map; } + + public static SortedMap getSortedMapS() { + SortedMap map = new TreeMap(); + map.put("abc", new byte[]{0,1,2,3,4}); + map.put("def", new byte[]{5,6,7,8,9}); + return map; + } + + public void setSortedMap(SortedMap map) { + SortedMap value = map; + } + + public static void setSortedMapS(SortedMap map) { + SortedMap value = map; + } } Index: test/test.rb =================================================================== --- test/test.rb (リビジョン 42) +++ test/test.rb (作業コピー) @@ -11,6 +11,8 @@ load('.') Rjb::primitive_conversion = false + $KCODE = 'none' + @jString = import('java.lang.String') @jInteger = Rjb::import('java.lang.Integer') @jShort = Rjb::import('java.lang.Short') @@ -541,6 +543,27 @@ map = test.sorted_map assert_equal "\0\x1\x2\x3\x4", map.get('abc') assert_equal "\x5\x6\x7\x8\x9", map.get('def') + test.setSortedMap(map) end + + def test_generics_map_for_static + test = import('jp.co.infoseek.hp.arton.rjb.Test') + map = test.sorted_map_s + assert_equal "\0\x1\x2\x3\x4", map.get('abc') + assert_equal "\x5\x6\x7\x8\x9", map.get('def') + test.setSortedMapS(map) + end + + def test_generics_unsafe + assert_equal(false, Rjb::primitive_conversion) + test = import('jp.co.infoseek.hp.arton.rjb.Test') + tr = import('java.util.TreeMap') + tree = tr.new + tree.put(1, 128) + tree.put(2, 256) + test.setSortedMapS(tree) + assert_equal 128, tree.get(1).intValue + assert_equal 256, tree.get(2).intValue + end end Index: ext/depend =================================================================== --- ext/depend (リビジョン 42) +++ ext/depend (作業コピー) @@ -1,7 +1,7 @@ -riconv.o : riconv.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h jp_co_infoseek_hp_arton_rjb_RBridge.h -rjb.o : rjb.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h jp_co_infoseek_hp_arton_rjb_RBridge.h riconv.h rjb.h -rjbexception.o : rjbexception.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h jp_co_infoseek_hp_arton_rjb_RBridge.h riconv.h rjb.h -load.o : load.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h jp_co_infoseek_hp_arton_rjb_RBridge.h +riconv.o : riconv.c jp_co_infoseek_hp_arton_rjb_RBridge.h +rjb.o : rjb.c jp_co_infoseek_hp_arton_rjb_RBridge.h riconv.h rjb.h +rjbexception.o : rjbexception.c jp_co_infoseek_hp_arton_rjb_RBridge.h riconv.h rjb.h +load.o : load.c jp_co_infoseek_hp_arton_rjb_RBridge.h jp_co_infoseek_hp_arton_rjb_RBridge.h : jniwrap.h ../data/rjb/jp/co/infoseek/hp/arton/rjb/RBridge.class javah -classpath ../data/rjb jp.co.infoseek.hp.arton.rjb.RBridge ../data/rjb/jp/co/infoseek/hp/arton/rjb/RBridge.class : RBridge.java Index: ext/load.c =================================================================== --- ext/load.c (リビジョン 42) +++ ext/load.c (作業コピー) @@ -18,9 +18,16 @@ #include #include #include "ruby.h" +#include "extconf.h" +#if RJB_RUBY_VERSION_CODE < 190 #include "intern.h" #include "st.h" #include "util.h" +#else +#include "ruby/intern.h" +#include "ruby/st.h" +#include "ruby/util.h" +#endif #include "jniwrap.h" #include "jp_co_infoseek_hp_arton_rjb_RBridge.h" #include "rjb.h" @@ -60,22 +67,24 @@ #define CLASSPATH_SEP ':' #endif -typedef void (*GETDEFAULTJAVAVMINITARGS)(void*); -typedef int (*CREATEJAVAVM)(JavaVM**, void**, void*); +typedef int (*GETDEFAULTJAVAVMINITARGS)(void*); +typedef int (*CREATEJAVAVM)(JavaVM**, JNIEnv**, void*); + static VALUE jvmdll = Qnil; -static VALUE GetDefaultJavaVMInitArgs; -static VALUE CreateJavaVM; +static VALUE getdefaultjavavminitargsfunc; +static VALUE createjavavmfunc; /* * not completed, only valid under some circumstances. */ -static VALUE load_jvm(char* jvmtype) +static int load_jvm(char* jvmtype) { char* libpath; char* java_home; char* jh; VALUE dl; + VALUE importer; #if defined(__APPLE__) && defined(__MACH__) jh = "/System/Library/Frameworks/JavaVM.framework"; @@ -84,7 +93,7 @@ #endif if (!jh) { - return Qnil; + return 0; } #if defined(_WIN32) if (*jh == '"' && *(jh + strlen(jh) - 1) == '"') @@ -113,16 +122,24 @@ + strlen(ARCH) + strlen(jvmtype) + 1); sprintf(libpath, JVMDLL, java_home, ARCH, jvmtype); #endif + rb_require("dl"); - dl = rb_eval_string("DL"); - jvmdll = rb_funcall(dl, rb_intern("dlopen"), 1, rb_str_new2(libpath)); - GetDefaultJavaVMInitArgs = rb_funcall(jvmdll, rb_intern("sym"), - 2, rb_str_new2("JNI_GetDefaultJavaVMInitArgs"), - rb_str_new2("0p")); - CreateJavaVM = rb_funcall(jvmdll, rb_intern("sym"), - 2, rb_str_new2("JNI_CreateJavaVM"), - rb_str_new2("pppp")); - return Qtrue; + if (!rb_const_defined_at(rb_cObject, rb_intern("DL"))) + { + rb_raise(rb_eRuntimeError, "Constants DL is not defined."); + return 0; + } + + jvmdll = rb_funcall(rb_const_get(rb_cObject, rb_intern("DL")), rb_intern("dlopen"), 1, rb_str_new2(libpath)); + +#if RJB_RUBY_VERSION_CODE < 190 + getdefaultjavavminitargsfunc = rb_funcall(rb_funcall(rb_funcall(jvmdll, rb_intern("[]"), 2, rb_str_new2("JNI_GetDefaultJavaVMInitArgs"), rb_str_new2("IP")), rb_intern("to_ptr"), 0), rb_intern("to_i"), 0); + createjavavmfunc = rb_funcall(rb_funcall(rb_funcall(jvmdll, rb_intern("[]"), 2, rb_str_new2("JNI_CreateJavaVM"), rb_str_new2("IPPP")), rb_intern("to_ptr"), 0), rb_intern("to_i"), 0); +#else + getdefaultjavavminitargsfunc = rb_funcall(jvmdll, rb_intern("[]"), 1, rb_str_new2("JNI_GetDefaultJavaVMInitArgs")); + createjavavmfunc = rb_funcall(jvmdll, rb_intern("[]"), 1, rb_str_new2("JNI_CreateJavaVM")); +#endif + return 1; } static int load_bridge(JNIEnv* jenv) @@ -199,17 +216,24 @@ int i; VALUE optval; - if (jvmdll == Qnil) + if (!RTEST(jvmdll)) { - if (load_jvm(JVM_TYPE) == Qnil) + if (!load_jvm(JVM_TYPE)) { return -1; } } - ptr = rb_funcall(GetDefaultJavaVMInitArgs, rb_intern("to_i"), 0); - initargs = *(GETDEFAULTJAVAVMINITARGS*)FIX2INT(ptr); - initargs(vm_args); + if (NIL_P(getdefaultjavavminitargsfunc)) + { + return -1; + } + initargs = (GETDEFAULTJAVAVMINITARGS)NUM2ULONG(getdefaultjavavminitargsfunc); + result = initargs(vm_args); + if (0 > result) + { + return result; + } len = strlen(userpath); if (getenv("CLASSPATH")) { @@ -248,9 +272,12 @@ vm_args->nOptions = optlen; vm_args->options = options; vm_args->ignoreUnrecognized = JNI_TRUE; - ptr = rb_funcall(CreateJavaVM, rb_intern("to_i"), 0); - createjavavm = *(CREATEJAVAVM*)FIX2INT(ptr); - result = createjavavm(&rjb_jvm, (void**)pjenv, vm_args); + if (NIL_P(createjavavmfunc)) + { + return -1; + } + createjavavm = (CREATEJAVAVM)NUM2ULONG(createjavavmfunc); + result = createjavavm(&rjb_jvm, pjenv, vm_args); if (!result) { result = load_bridge(*pjenv); Index: ext/riconv.c =================================================================== --- ext/riconv.c (リビジョン 42) +++ ext/riconv.c (作業コピー) @@ -16,6 +16,8 @@ */ #include "ruby.h" +#if RJB_RUBY_VERSION_CODE < 190 +#endif #include "extconf.h" #if defined _WIN32 || defined __CYGWIN__ Index: ext/rjb.h =================================================================== --- ext/rjb.h (リビジョン 42) +++ ext/rjb.h (作業コピー) @@ -34,6 +34,7 @@ #define _I64_MAX 9223372036854775807i64 #endif + /* in load.c */ extern int rjb_create_jvm(JNIEnv** pjenv, JavaVMInitArgs*, char*, VALUE); Index: ext/extconf.rb =================================================================== --- ext/extconf.rb (リビジョン 42) +++ ext/extconf.rb (作業コピー) @@ -42,11 +42,12 @@ end def create_rjb_makefile - if have_header("jni.h") + if have_header("jni.h") && have_header("dl.h") || have_header("ruby/dl.h") have_func("locale_charset", "iconv.h") have_func("nl_langinfo", "langinfo.h") have_func("setlocale", "locale.h") have_func("getenv") + $defs << "-DRJB_RUBY_VERSION_CODE="+RUBY_VERSION.gsub(/\./, '') create_header create_makefile("rjbcore") end Index: ext/jp_co_infoseek_hp_arton_rjb_RBridge.h =================================================================== --- ext/jp_co_infoseek_hp_arton_rjb_RBridge.h (リビジョン 42) +++ ext/jp_co_infoseek_hp_arton_rjb_RBridge.h (作業コピー) @@ -1,21 +1,21 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class jp_co_infoseek_hp_arton_rjb_RBridge */ - -#ifndef _Included_jp_co_infoseek_hp_arton_rjb_RBridge -#define _Included_jp_co_infoseek_hp_arton_rjb_RBridge -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: jp_co_infoseek_hp_arton_rjb_RBridge - * Method: call - * Signature: (Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; - */ -JNIEXPORT jobject JNICALL Java_jp_co_infoseek_hp_arton_rjb_RBridge_call - (JNIEnv *, jobject, jstring, jobject, jobjectArray); - -#ifdef __cplusplus -} -#endif -#endif +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class jp_co_infoseek_hp_arton_rjb_RBridge */ + +#ifndef _Included_jp_co_infoseek_hp_arton_rjb_RBridge +#define _Included_jp_co_infoseek_hp_arton_rjb_RBridge +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: jp_co_infoseek_hp_arton_rjb_RBridge + * Method: call + * Signature: (Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; + */ +JNIEXPORT jobject JNICALL Java_jp_co_infoseek_hp_arton_rjb_RBridge_call + (JNIEnv *, jobject, jstring, jobject, jobjectArray); + +#ifdef __cplusplus +} +#endif +#endif Index: ext/rjbexception.c =================================================================== --- ext/rjbexception.c (リビジョン 42) +++ ext/rjbexception.c (作業コピー) @@ -16,7 +16,12 @@ */ #include "ruby.h" +#include "extconf.h" +#if RJB_RUBY_VERSION_CODE < 190 #include "st.h" +#else +#include "ruby/st.h" +#endif #include "jniwrap.h" #include "riconv.h" #include "rjb.h" @@ -49,7 +54,7 @@ if (rexp == Qnil) { rexp = rb_define_class(pcls, rb_eStandardError); - st_insert(RHASH(rjb_loaded_classes)->tbl, cname, rexp); + st_insert(RHASH_TBL(rjb_loaded_classes), cname, rexp); } return rexp; } Index: ext/rjb.c =================================================================== --- ext/rjb.c (リビジョン 42) +++ ext/rjb.c (作業コピー) @@ -18,7 +18,16 @@ #define RJB_VERSION "1.0.12" #include "ruby.h" +#include "extconf.h" +#if RJB_RUBY_VERSION_CODE < 190 +//#define RARRAY_PTR(v) RARRAY(v)->ptr +//#define RARRAY_LEN(v) RARRAY(v)->len +//#define RSTRING_PTR(v) RSTRING(v)->ptr +//#define RSTRING_LEN(v) RSTRING(v)->len #include "st.h" +#else +#include "ruby/st.h" +#endif #include "jniwrap.h" #include "jp_co_infoseek_hp_arton_rjb_RBridge.h" #include "riconv.h" @@ -273,11 +282,11 @@ static VALUE jv2rv(JNIEnv* jenv, jvalue val) { - if (primitive_conversion == Qfalse) + if (RTEST(primitive_conversion)) { - return jv2rv_r(jenv, val); + return jv2rv_withprim(jenv, val.l); } - return jv2rv_withprim(jenv, val.l); + return jv2rv_r(jenv, val); } static VALUE jvoid2rv(JNIEnv* jenv, jvalue val) @@ -426,8 +435,8 @@ char* cp = (char*)p; jsize len = (*jenv)->GetArrayLength(jenv, val.l); VALUE v = rb_ary_new2(len); - VALUE* pv = RARRAY(v)->ptr; - RARRAY(v)->len = len; + VALUE* pv = RARRAY_PTR(v); + RARRAY_LEN(v) = len; for (i = 0; i < len; i++) { *pv++ =conv(jenv, cp); @@ -526,8 +535,11 @@ { jvalue jv; int i; - jclass klass = (*jenv)->GetObjectClass(jenv, o); + jclass klass; jv.j = 0; + if (!o) + rb_raise(rb_eRuntimeError, "Object is NULL"); + klass = (*jenv)->GetObjectClass(jenv, o); for (i = PRM_INT; i < PRM_LAST; i++) { if ((*jenv)->IsSameObject(jenv, jpcvt[i].klass, klass)) @@ -645,7 +657,7 @@ static void rv2jboolean(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, int release) { if (!release) - jv->z = (val == Qnil || val == Qfalse) ? JNI_FALSE : JNI_TRUE; + jv->z = (RTEST(val)) ? JNI_TRUE : JNI_FALSE; } static void rv2jstring(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, int release) { @@ -803,8 +815,8 @@ static void check_fixnumarray(VALUE v) { int i; - int len = RARRAY(v)->len; - VALUE* p = RARRAY(v)->ptr; + int len = RARRAY_LEN(v); + VALUE* p = RARRAY_PTR(v); // check all fixnum (overflow is permit) for (i = 0; i < len; i++) { @@ -820,20 +832,20 @@ jarray ary = NULL; if (TYPE(v) == T_STRING) { - ary = (*jenv)->NewByteArray(jenv, RSTRING(v)->len); - (*jenv)->SetByteArrayRegion(jenv, ary, 0, RSTRING(v)->len, - RSTRING(v)->ptr); + ary = (*jenv)->NewByteArray(jenv, RSTRING_LEN(v)); + (*jenv)->SetByteArrayRegion(jenv, ary, 0, RSTRING_LEN(v), + RSTRING_PTR(v)); } else if (TYPE(v) == T_ARRAY) { int i; jbyte* pb; check_fixnumarray(v); - ary = (*jenv)->NewByteArray(jenv, RARRAY(v)->len); + ary = (*jenv)->NewByteArray(jenv, RARRAY_LEN(v)); pb = (*jenv)->GetByteArrayElements(jenv, ary, NULL); - for (i = 0; i < RARRAY(v)->len; i++) + for (i = 0; i < RARRAY_LEN(v); i++) { - *(pb + i) = (jbyte)FIX2ULONG(RARRAY(v)->ptr[i]); + *(pb + i) = (jbyte)FIX2ULONG(RARRAY_PTR(v)[i]); } (*jenv)->ReleaseByteArrayElements(jenv, ary, pb, 0); } @@ -852,11 +864,11 @@ int i; jchar* pb; check_fixnumarray(v); - ary = (*jenv)->NewCharArray(jenv, RARRAY(v)->len); + ary = (*jenv)->NewCharArray(jenv, RARRAY_LEN(v)); pb = (*jenv)->GetCharArrayElements(jenv, ary, NULL); - for (i = 0; i < RARRAY(v)->len; i++) + for (i = 0; i < RARRAY_LEN(v); i++) { - *(pb + i) = (jchar)FIX2ULONG(RARRAY(v)->ptr[i]); + *(pb + i) = (jchar)FIX2ULONG(RARRAY_PTR(v)[i]); } (*jenv)->ReleaseCharArrayElements(jenv, ary, pb, 0); return ary; @@ -871,11 +883,11 @@ { int i; jdouble* pb; - ary = (*jenv)->NewDoubleArray(jenv, RARRAY(v)->len); + ary = (*jenv)->NewDoubleArray(jenv, RARRAY_LEN(v)); pb = (*jenv)->GetDoubleArrayElements(jenv, ary, NULL); - for (i = 0; i < RARRAY(v)->len; i++) + for (i = 0; i < RARRAY_LEN(v); i++) { - *(pb + i) = (jdouble)rb_num2dbl(RARRAY(v)->ptr[i]); + *(pb + i) = (jdouble)rb_num2dbl(RARRAY_PTR(v)[i]); } (*jenv)->ReleaseDoubleArrayElements(jenv, ary, pb, 0); return ary; @@ -890,11 +902,11 @@ { int i; jfloat* pb; - ary = (*jenv)->NewFloatArray(jenv, RARRAY(v)->len); + ary = (*jenv)->NewFloatArray(jenv, RARRAY_LEN(v)); pb = (*jenv)->GetFloatArrayElements(jenv, ary, NULL); - for (i = 0; i < RARRAY(v)->len; i++) + for (i = 0; i < RARRAY_LEN(v); i++) { - *(pb + i) = (jfloat)rb_num2dbl(RARRAY(v)->ptr[i]); + *(pb + i) = (jfloat)rb_num2dbl(RARRAY_PTR(v)[i]); } (*jenv)->ReleaseFloatArrayElements(jenv, ary, pb, 0); return ary; @@ -910,11 +922,11 @@ int i; jint* pb; check_fixnumarray(v); - ary = (*jenv)->NewIntArray(jenv, RARRAY(v)->len); + ary = (*jenv)->NewIntArray(jenv, RARRAY_LEN(v)); pb = (*jenv)->GetIntArrayElements(jenv, ary, NULL); - for (i = 0; i < RARRAY(v)->len; i++) + for (i = 0; i < RARRAY_LEN(v); i++) { - *(pb + i) = (jint)FIX2LONG(RARRAY(v)->ptr[i]); + *(pb + i) = (jint)FIX2LONG(RARRAY_PTR(v)[i]); } (*jenv)->ReleaseIntArrayElements(jenv, ary, pb, 0); return ary; @@ -929,14 +941,14 @@ { int i; jlong* pb; - ary = (*jenv)->NewLongArray(jenv, RARRAY(v)->len); + ary = (*jenv)->NewLongArray(jenv, RARRAY_LEN(v)); pb = (*jenv)->GetLongArrayElements(jenv, ary, NULL); - for (i = 0; i < RARRAY(v)->len; i++) + for (i = 0; i < RARRAY_LEN(v); i++) { #if HAVE_LONG_LONG - *(pb + i) = (jlong)rb_num2ll(RARRAY(v)->ptr[i]); + *(pb + i) = (jlong)rb_num2ll(RARRAY_PTR(v)[i]); #else - *(pb + i) = (jlong)FIX2LONG(RARRAY(v)->ptr[i]); + *(pb + i) = (jlong)FIX2LONG(RARRAY_PTR(v)[i]); #endif } (*jenv)->ReleaseLongArrayElements(jenv, ary, pb, 0); @@ -953,11 +965,11 @@ int i; jshort* pb; check_fixnumarray(v); - ary = (*jenv)->NewShortArray(jenv, RARRAY(v)->len); + ary = (*jenv)->NewShortArray(jenv, RARRAY_LEN(v)); pb = (*jenv)->GetShortArrayElements(jenv, ary, NULL); - for (i = 0; i < RARRAY(v)->len; i++) + for (i = 0; i < RARRAY_LEN(v); i++) { - *(pb + i) = (jshort)FIX2LONG(RARRAY(v)->ptr[i]); + *(pb + i) = (jshort)FIX2LONG(RARRAY_PTR(v)[i]); } (*jenv)->ReleaseShortArrayElements(jenv, ary, pb, 0); return ary; @@ -972,12 +984,12 @@ { int i; jboolean* pb; - ary = (*jenv)->NewBooleanArray(jenv, RARRAY(v)->len); + ary = (*jenv)->NewBooleanArray(jenv, RARRAY_LEN(v)); pb = (*jenv)->GetBooleanArrayElements(jenv, ary, NULL); - for (i = 0; i < RARRAY(v)->len; i++) + for (i = 0; i < RARRAY_LEN(v); i++) { *(pb + i) - = (NIL_P(RARRAY(v)->ptr[i]) || RARRAY(v)->ptr[i] == Qfalse) + = (!RTEST(RARRAY_PTR(v)[i])) ? JNI_FALSE : JNI_TRUE; } (*jenv)->ReleaseBooleanArrayElements(jenv, ary, pb, 0); @@ -997,12 +1009,12 @@ if (TYPE(v) == T_ARRAY) { int i; - ary = (*jenv)->NewObjectArray(jenv, RARRAY(v)->len, j_object, NULL); + ary = (*jenv)->NewObjectArray(jenv, RARRAY_LEN(v), j_object, NULL); rjb_check_exception(jenv, 0); - for (i = 0; i < RARRAY(v)->len; i++) + for (i = 0; i < RARRAY_LEN(v); i++) { jvalue jv; - rv2jobject(jenv, RARRAY(v)->ptr[i], &jv, NULL, 0); + rv2jobject(jenv, RARRAY_PTR(v)[i], &jv, NULL, 0); (*jenv)->SetObjectArrayElement(jenv, ary, i, jv.l); } return ary; @@ -1079,12 +1091,12 @@ if (TYPE(val) != T_ARRAY) { rb_raise(rb_eRuntimeError, "array's rank unmatch"); } - ja = (*jenv)->NewObjectArray(jenv, RARRAY(val)->len, j_object, NULL); + ja = (*jenv)->NewObjectArray(jenv, RARRAY_LEN(val), j_object, NULL); rjb_check_exception(jenv, 0); - for (i = 0; i < RARRAY(val)->len; i++) + for (i = 0; i < RARRAY_LEN(val); i++) { jvalue jv; - rv2jarray(jenv, RARRAY(val)->ptr[i], &jv, psig + 1, 0); + rv2jarray(jenv, RARRAY_PTR(val)[i], &jv, psig + 1, 0); (*jenv)->SetObjectArrayElement(jenv, ja, i, jv.l); } } @@ -1751,7 +1763,7 @@ } static VALUE rjb_s_unload(int argc, VALUE* argv, VALUE self) { - st_foreach(RHASH(rjb_loaded_classes)->tbl, clear_classes, 0); + st_foreach(RHASH_TBL(rjb_loaded_classes), clear_classes, 0); if (rjb_jvm) { (*rjb_jvm)->DestroyJavaVM(rjb_jvm); @@ -1775,7 +1787,7 @@ */ static VALUE rjb_s_set_pconversion(VALUE self, VALUE val) { - primitive_conversion = (val == Qnil || val == Qfalse) ? Qfalse : Qtrue; + primitive_conversion = (RTEST(val)) ? Qtrue : Qfalse; return val; } @@ -2165,7 +2177,7 @@ /* * the hash was frozen, so it need to call st_ func directly. */ - st_insert(RHASH(rjb_loaded_classes)->tbl, clsname, self); + st_insert(RHASH_TBL(rjb_loaded_classes), clsname, self); } /* @@ -2755,10 +2767,10 @@ jvalue j; memset(&j, 0, sizeof(j)); - for (i = 0; i < RARRAY(proxies)->len; i++) + for (i = 0; i < RARRAY_LEN(proxies); i++) { struct rj_bridge* ptr; - VALUE val = RARRAY(proxies)->ptr[i]; + VALUE val = RARRAY_PTR(proxies)[i]; Data_Get_Struct(val, struct rj_bridge, ptr); if ((*jenv)->IsSameObject(jenv, proxy, ptr->proxy)) {