rjb 1.3.4-x86-mswin32-60 → 1.3.5-x86-mswin32-60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +19 -0
- data/ext/load.c +6 -2
- data/ext/rjb.c +83 -28
- data/lib/rjbcore.so +0 -0
- data/samples/unzip.rb +66 -0
- data/test/Base.class +0 -0
- data/test/ExtBase.class +0 -0
- data/test/IBase.class +0 -0
- data/test/JTest.class +0 -0
- data/test/JarTest.class +0 -0
- data/test/Test$TestTypes.class +0 -0
- data/test/Test.class +0 -0
- data/test/Two.class +0 -0
- data/test/TwoCaller.class +0 -0
- data/test/jartest.jar +0 -0
- data/test/jp/co/infoseek/hp/arton/rjb/IBase.class +0 -0
- data/test/jp/co/infoseek/hp/arton/rjb/JTest.class +0 -0
- data/test/jp/co/infoseek/hp/arton/rjb/Test$TestTypes.class +0 -0
- data/test/jp/co/infoseek/hp/arton/rjb/Test.class +0 -0
- data/test/rjbtest.jar +0 -0
- data/test/test.rb +34 -2
- metadata +17 -6
    
        data/ChangeLog
    CHANGED
    
    | @@ -1,3 +1,22 @@ | |
| 1 | 
            +
            Mon Jul 18 arton
         | 
| 2 | 
            +
             *ext/rjb.c
         | 
| 3 | 
            +
            	fix inhiritance test.
         | 
| 4 | 
            +
            	add anonymous inner class feature (as JRuby)
         | 
| 5 | 
            +
             *test/test.rb
         | 
| 6 | 
            +
            	add anonymous inner class test
         | 
| 7 | 
            +
             *test/Two.java
         | 
| 8 | 
            +
            	for anonymous inner class test	
         | 
| 9 | 
            +
             *test/TwoCaller.java
         | 
| 10 | 
            +
            	for anonymous inner class test
         | 
| 11 | 
            +
            Sat Jul 16 arton
         | 
| 12 | 
            +
             *ext/laod.c
         | 
| 13 | 
            +
            	load server JVM if _WIN64
         | 
| 14 | 
            +
             *ext/rjb.c
         | 
| 15 | 
            +
            	RJB_VERSION -> 1.3.5
         | 
| 16 | 
            +
             *test/test.rb
         | 
| 17 | 
            +
            	add primitive_conversion and generic test.
         | 
| 18 | 
            +
             *test/Test.java
         | 
| 19 | 
            +
            	add method that takes generic map and returns it
         | 
| 1 20 | 
             
            Mon Nov 22 arton
         | 
| 2 21 | 
             
             *ext/rjb.c
         | 
| 3 22 | 
             
            	RJB_VERSION -> 1.3.4
         | 
    
        data/ext/load.c
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            /*
         | 
| 2 2 | 
             
             * Rjb - Ruby <-> Java Bridge
         | 
| 3 | 
            -
             * Copyright(c) 2004,2005,2006,2009,2010 arton
         | 
| 3 | 
            +
             * Copyright(c) 2004,2005,2006,2009,2010,2011 arton
         | 
| 4 4 | 
             
             *
         | 
| 5 5 | 
             
             * This library is free software; you can redistribute it and/or
         | 
| 6 6 | 
             
             * modify it under the terms of the GNU Lesser General Public
         | 
| @@ -12,7 +12,7 @@ | |
| 12 12 | 
             
             * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
         | 
| 13 13 | 
             
             * Lesser General Public License for more details.
         | 
| 14 14 | 
             
             *
         | 
| 15 | 
            -
             * $Id: load.c  | 
| 15 | 
            +
             * $Id: load.c 167 2011-07-15 17:40:25Z arton $
         | 
| 16 16 | 
             
             */
         | 
| 17 17 |  | 
| 18 18 | 
             
            #include <stdlib.h>
         | 
| @@ -42,6 +42,10 @@ | |
| 42 42 | 
             
             #else
         | 
| 43 43 | 
             
              #define JVMDLL "%s\\jre\\bin\\%s\\jvm.dll"
         | 
| 44 44 | 
             
              #define DIRSEPARATOR '\\'
         | 
| 45 | 
            +
              #if defined(_WIN64)
         | 
| 46 | 
            +
                #undef JVM_TYPE
         | 
| 47 | 
            +
                #define JVM_TYPE "server"
         | 
| 48 | 
            +
              #endif
         | 
| 45 49 | 
             
             #endif
         | 
| 46 50 | 
             
             #define CLASSPATH_SEP  ';'
         | 
| 47 51 | 
             
            #elif defined(__APPLE__) && defined(__MACH__)
         | 
    
        data/ext/rjb.c
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            /*
         | 
| 2 2 | 
             
             * Rjb - Ruby <-> Java Bridge
         | 
| 3 | 
            -
             * Copyright(c) 2004,2005,2006,2007,2008,2009,2010 arton
         | 
| 3 | 
            +
             * Copyright(c) 2004,2005,2006,2007,2008,2009,2010,2011 arton
         | 
| 4 4 | 
             
             *
         | 
| 5 5 | 
             
             * This library is free software; you can redistribute it and/or
         | 
| 6 6 | 
             
             * modify it under the terms of the GNU Lesser General Public
         | 
| @@ -12,10 +12,10 @@ | |
| 12 12 | 
             
             * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
         | 
| 13 13 | 
             
             * Lesser General Public License for more details.
         | 
| 14 14 | 
             
             *
         | 
| 15 | 
            -
             * $Id: rjb.c  | 
| 15 | 
            +
             * $Id: rjb.c 170 2011-07-18 12:45:13Z arton $
         | 
| 16 16 | 
             
             */
         | 
| 17 17 |  | 
| 18 | 
            -
            #define RJB_VERSION "1.3. | 
| 18 | 
            +
            #define RJB_VERSION "1.3.5"
         | 
| 19 19 |  | 
| 20 20 | 
             
            #include "ruby.h"
         | 
| 21 21 | 
             
            #include "extconf.h"
         | 
| @@ -57,12 +57,12 @@ | |
| 57 57 | 
             
                rjb_check_exception(jenv, 1)
         | 
| 58 58 | 
             
            #if defined(RUBINIUS)
         | 
| 59 59 | 
             
            #define CLASS_NEW(obj, name) rb_define_class_under(rjb, name, obj)
         | 
| 60 | 
            -
            #define CLASS_INHERITED(spr, kls) rb_funcall(spr, rb_intern(" | 
| 60 | 
            +
            #define CLASS_INHERITED(spr, kls) RTEST(rb_funcall(spr, rb_intern(">="), 1, kls))
         | 
| 61 61 | 
             
            #else
         | 
| 62 62 | 
             
            #define CLASS_NEW(obj, name) rb_define_class_under(rjb, name, obj)
         | 
| 63 | 
            -
            #define CLASS_INHERITED(spr, kls)  | 
| 63 | 
            +
            #define CLASS_INHERITED(spr, kls) RTEST(rb_funcall(spr, rb_intern(">="), 1, kls))
         | 
| 64 64 | 
             
            #endif
         | 
| 65 | 
            -
            #define IS_RJB_OBJECT(v) (CLASS_INHERITED(rjbi, rb_obj_class(v)) || rb_obj_class(v) == rjb)
         | 
| 65 | 
            +
            #define IS_RJB_OBJECT(v) (CLASS_INHERITED(rjbi, rb_obj_class(v)) || rb_obj_class(v) == rjb || CLASS_INHERITED(rjbb, rb_obj_class(v)))
         | 
| 66 66 | 
             
            #define USER_INITIALIZE "@user_initialize"
         | 
| 67 67 |  | 
| 68 68 | 
             
            static void register_class(VALUE, VALUE);
         | 
| @@ -76,15 +76,19 @@ static jarray r2objarray(JNIEnv* jenv, VALUE v, const char* cls); | |
| 76 76 | 
             
            static VALUE jv2rv_withprim(JNIEnv* jenv, jobject o);
         | 
| 77 77 | 
             
            static J2R get_arrayconv(const char* cname, char* depth);
         | 
| 78 78 | 
             
            static jarray r2barray(JNIEnv* jenv, VALUE v, const char* cls);
         | 
| 79 | 
            +
            static VALUE rjb_s_bind(VALUE self, VALUE rbobj, VALUE itfname);
         | 
| 79 80 |  | 
| 80 81 | 
             
            static VALUE rjb;
         | 
| 81 82 | 
             
            static VALUE jklass;
         | 
| 82 83 | 
             
            static VALUE rjbc;
         | 
| 83 84 | 
             
            static VALUE rjbi;
         | 
| 84 85 | 
             
            static VALUE rjbb;
         | 
| 86 | 
            +
            static VALUE rjba;
         | 
| 85 87 |  | 
| 86 88 | 
             
            static ID user_initialize;
         | 
| 87 89 | 
             
            static ID cvar_classpath;
         | 
| 90 | 
            +
            static ID anonymousblock;
         | 
| 91 | 
            +
            static ID id_call;
         | 
| 88 92 |  | 
| 89 93 | 
             
            VALUE rjb_loaded_classes;
         | 
| 90 94 | 
             
            static VALUE proxies;
         | 
| @@ -836,7 +840,12 @@ static void rv2jobject(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, in | |
| 836 840 | 
             
            				       jpcvt[PRM_LONG].ctr_id, arg);
         | 
| 837 841 | 
             
                            break;
         | 
| 838 842 | 
             
            #endif                
         | 
| 843 | 
            +
                        case T_OBJECT:
         | 
| 839 844 | 
             
                        default:
         | 
| 845 | 
            +
            #if DEBUG
         | 
| 846 | 
            +
                            fprintf(stderr, "rtype:%d, sig=%s\n", TYPE(val), psig);
         | 
| 847 | 
            +
                            fflush(stderr);
         | 
| 848 | 
            +
            #endif
         | 
| 840 849 | 
             
                            rb_raise(rb_eRuntimeError, "can't convert to java type");
         | 
| 841 850 | 
             
                            break;
         | 
| 842 851 | 
             
            	    }
         | 
| @@ -858,8 +867,8 @@ static void rv2jobject(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, in | |
| 858 867 |  | 
| 859 868 | 
             
            static void check_fixnumarray(VALUE v)
         | 
| 860 869 | 
             
            {
         | 
| 861 | 
            -
                 | 
| 862 | 
            -
                 | 
| 870 | 
            +
                size_t i;
         | 
| 871 | 
            +
                size_t len = RARRAY_LEN(v);
         | 
| 863 872 | 
             
                VALUE* p = RARRAY_PTR(v);
         | 
| 864 873 | 
             
                /* check all fixnum (overflow is permit) */
         | 
| 865 874 | 
             
                for (i = 0; i < len; i++)
         | 
| @@ -1140,7 +1149,7 @@ static void rv2jarray(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, int | |
| 1140 1149 | 
             
                }
         | 
| 1141 1150 | 
             
                else
         | 
| 1142 1151 | 
             
                {
         | 
| 1143 | 
            -
                     | 
| 1152 | 
            +
                    size_t i;
         | 
| 1144 1153 | 
             
                    jarray ja = NULL;
         | 
| 1145 1154 | 
             
            	if (NIL_P(val))
         | 
| 1146 1155 | 
             
            	{
         | 
| @@ -1181,7 +1190,7 @@ static void rv2jarray(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, int | |
| 1181 1190 | 
             
             */
         | 
| 1182 1191 | 
             
            static R2J get_r2j(JNIEnv* jenv, jobject o, int* siglen,  char* sigp)
         | 
| 1183 1192 | 
             
            {
         | 
| 1184 | 
            -
                 | 
| 1193 | 
            +
                size_t len, i;
         | 
| 1185 1194 | 
             
                const char* cname;
         | 
| 1186 1195 | 
             
                R2J result = NULL;
         | 
| 1187 1196 | 
             
                jstring nm = (*jenv)->CallObjectMethod(jenv, o, rjb_class_getName);
         | 
| @@ -1227,8 +1236,8 @@ static R2J get_r2j(JNIEnv* jenv, jobject o, int* siglen,  char* sigp) | |
| 1227 1236 |  | 
| 1228 1237 | 
             
            static J2R get_arrayconv(const char* cname, char* pdepth)
         | 
| 1229 1238 | 
             
            {
         | 
| 1230 | 
            -
                 | 
| 1231 | 
            -
                 | 
| 1239 | 
            +
                size_t i;
         | 
| 1240 | 
            +
                size_t start;
         | 
| 1232 1241 | 
             
                for (start = 1; *(cname + start) == '['; start++);
         | 
| 1233 1242 | 
             
                *pdepth = (char)start;
         | 
| 1234 1243 | 
             
                for (i = 0; i < COUNTOF(jcvt); i++)
         | 
| @@ -1248,7 +1257,7 @@ static J2R get_arrayconv(const char* cname, char* pdepth) | |
| 1248 1257 |  | 
| 1249 1258 | 
             
            static J2R get_j2r(JNIEnv* jenv, jobject cls, char* psig, char* pdepth, char* ppsig, off_t* piv, int static_method)
         | 
| 1250 1259 | 
             
            {
         | 
| 1251 | 
            -
                 | 
| 1260 | 
            +
                size_t i;
         | 
| 1252 1261 | 
             
                J2R result = NULL;
         | 
| 1253 1262 | 
             
                const char* cname;
         | 
| 1254 1263 | 
             
                const char* jname = NULL;
         | 
| @@ -2065,6 +2074,17 @@ static VALUE import_class(JNIEnv* jenv, jclass jcls, VALUE clsname) | |
| 2065 2074 | 
             
                return v;
         | 
| 2066 2075 | 
             
            }
         | 
| 2067 2076 |  | 
| 2077 | 
            +
            static VALUE rjb_a_initialize(VALUE self, VALUE proc)
         | 
| 2078 | 
            +
            {
         | 
| 2079 | 
            +
                rb_ivar_set(self, anonymousblock, proc);
         | 
| 2080 | 
            +
            }
         | 
| 2081 | 
            +
             | 
| 2082 | 
            +
            static VALUE rjb_a_missing(int argc, VALUE* argv, VALUE self)
         | 
| 2083 | 
            +
            {
         | 
| 2084 | 
            +
                VALUE proc = rb_ivar_get(self, anonymousblock);
         | 
| 2085 | 
            +
                return rb_funcall2(proc, id_call, argc, argv);
         | 
| 2086 | 
            +
            }
         | 
| 2087 | 
            +
             | 
| 2068 2088 | 
             
            static VALUE rjb_i_prepare_proxy(VALUE self)
         | 
| 2069 2089 | 
             
            {
         | 
| 2070 2090 | 
             
                return rb_funcall(self, rb_intern("instance_eval"), 1, 
         | 
| @@ -2095,15 +2115,14 @@ static VALUE register_instance(JNIEnv* jenv, VALUE klass, struct jv_data* org, j | |
| 2095 2115 | 
             
             * temporary signature check
         | 
| 2096 2116 | 
             
             * return !0 if found
         | 
| 2097 2117 | 
             
             */
         | 
| 2098 | 
            -
            static int check_rtype(JNIEnv* jenv, VALUE  | 
| 2118 | 
            +
            static int check_rtype(JNIEnv* jenv, VALUE* pv, char* p)
         | 
| 2099 2119 | 
             
            {
         | 
| 2100 2120 | 
             
                char* pcls = NULL;
         | 
| 2101 2121 | 
             
                if (*p == 'L')
         | 
| 2102 2122 | 
             
                {
         | 
| 2103 2123 | 
             
                    char* pt = strchr(p, ';');
         | 
| 2104 | 
            -
            	if (pt)
         | 
| 2105 | 
            -
             | 
| 2106 | 
            -
            	    int len = pt - p - 1;
         | 
| 2124 | 
            +
            	if (pt) {
         | 
| 2125 | 
            +
            	    size_t len = pt - p - 1;
         | 
| 2107 2126 | 
             
            	    pcls = ALLOCA_N(char, len + 1);
         | 
| 2108 2127 | 
             
                        strncpy(pcls, p + 1, len);
         | 
| 2109 2128 | 
             
            	    *(pcls + len) = '\0';
         | 
| @@ -2113,7 +2132,7 @@ static int check_rtype(JNIEnv* jenv, VALUE v, char* p) | |
| 2113 2132 | 
             
                {
         | 
| 2114 2133 | 
             
                    return 1;
         | 
| 2115 2134 | 
             
                }
         | 
| 2116 | 
            -
                switch (TYPE( | 
| 2135 | 
            +
                switch (TYPE(*pv))
         | 
| 2117 2136 | 
             
                {
         | 
| 2118 2137 | 
             
                case T_FIXNUM:
         | 
| 2119 2138 | 
             
                    return strchr("BCDFIJS", *p) != NULL;
         | 
| @@ -2127,22 +2146,25 @@ static int check_rtype(JNIEnv* jenv, VALUE v, char* p) | |
| 2127 2146 | 
             
                case T_ARRAY:
         | 
| 2128 2147 | 
             
                    return *p == '[';
         | 
| 2129 2148 | 
             
                case T_DATA:
         | 
| 2130 | 
            -
                    if (IS_RJB_OBJECT( | 
| 2149 | 
            +
                    if (IS_RJB_OBJECT(*pv) && pcls)
         | 
| 2131 2150 | 
             
            	{
         | 
| 2132 2151 | 
             
            	    /* imported object */
         | 
| 2133 2152 | 
             
            	    jclass cls;
         | 
| 2134 2153 | 
             
                        struct jvi_data* ptr;
         | 
| 2135 2154 | 
             
            	    int result = 0;
         | 
| 2136 2155 | 
             
                        if (!strcmp("java.lang.String", pcls)) return 1;
         | 
| 2137 | 
            -
            	    Data_Get_Struct( | 
| 2156 | 
            +
            	    Data_Get_Struct(*pv, struct jvi_data, ptr);
         | 
| 2138 2157 | 
             
                        RJB_FIND_CLASS(cls, java2jniname(pcls));
         | 
| 2139 2158 | 
             
            	    if (cls)
         | 
| 2140 | 
            -
             | 
| 2159 | 
            +
                    	    {
         | 
| 2141 2160 | 
             
            	        result = (cls && (*jenv)->IsInstanceOf(jenv, ptr->obj, cls));
         | 
| 2142 2161 | 
             
            	        (*jenv)->DeleteLocalRef(jenv, cls);
         | 
| 2143 2162 | 
             
            	    }
         | 
| 2144 2163 | 
             
            	    return result;
         | 
| 2145 | 
            -
            	}
         | 
| 2164 | 
            +
            	} else if (pcls) {
         | 
| 2165 | 
            +
                        VALUE blockobj = rb_class_new_instance(1, pv, rjba);
         | 
| 2166 | 
            +
                        *pv = rjb_s_bind(rjbb, blockobj, rb_str_new2(pcls));
         | 
| 2167 | 
            +
                    }
         | 
| 2146 2168 | 
             
            	/* fall down to the next case */
         | 
| 2147 2169 | 
             
                case T_OBJECT:
         | 
| 2148 2170 | 
             
            	/* fall down to the next case */
         | 
| @@ -2212,7 +2234,7 @@ static VALUE rjb_newinstance(int argc, VALUE* argv, VALUE self) | |
| 2212 2234 | 
             
            		psig = (*pc)->method_signature;
         | 
| 2213 2235 | 
             
            		for (i = 0; i < argc; i++)
         | 
| 2214 2236 | 
             
            		{
         | 
| 2215 | 
            -
            		    if (!check_rtype(jenv,  | 
| 2237 | 
            +
            		    if (!check_rtype(jenv, argv + i, psig))
         | 
| 2216 2238 | 
             
                                {
         | 
| 2217 2239 | 
             
            		        found = 0;
         | 
| 2218 2240 | 
             
            			break;
         | 
| @@ -2375,6 +2397,17 @@ static VALUE rjb_class_eval(int argc, VALUE* argv, VALUE self) | |
| 2375 2397 | 
             
                return self;
         | 
| 2376 2398 | 
             
            }
         | 
| 2377 2399 |  | 
| 2400 | 
            +
            static VALUE rjb_s_impl(VALUE self)
         | 
| 2401 | 
            +
            {
         | 
| 2402 | 
            +
                VALUE obj;
         | 
| 2403 | 
            +
                VALUE proc;
         | 
| 2404 | 
            +
                rb_need_block();
         | 
| 2405 | 
            +
                proc = rb_block_proc();
         | 
| 2406 | 
            +
                obj = rb_class_new_instance(1, &proc, rjba);
         | 
| 2407 | 
            +
                return rjb_s_bind(rjbb, obj, rb_funcall(self, rb_intern("name"), 0));
         | 
| 2408 | 
            +
            }
         | 
| 2409 | 
            +
             | 
| 2410 | 
            +
             | 
| 2378 2411 | 
             
            /*
         | 
| 2379 2412 | 
             
             * jclass Rjb::bind(rbobj, interface_name)
         | 
| 2380 2413 | 
             
             */
         | 
| @@ -2774,6 +2807,15 @@ static VALUE invoke(JNIEnv* jenv, struct cls_method* pm, struct jvi_data* ptr, | |
| 2774 2807 | 
             
                char* psig;
         | 
| 2775 2808 | 
             
                struct cls_method* orgpm = pm;
         | 
| 2776 2809 |  | 
| 2810 | 
            +
                if (rb_block_given_p())
         | 
| 2811 | 
            +
                {
         | 
| 2812 | 
            +
                    VALUE* pargs = ALLOCA_N(VALUE, argc + 1);
         | 
| 2813 | 
            +
                    memcpy(pargs, argv, argc * sizeof(VALUE));
         | 
| 2814 | 
            +
                    *(pargs + argc) = rb_block_proc();
         | 
| 2815 | 
            +
                    ++argc;
         | 
| 2816 | 
            +
                    argv = pargs;
         | 
| 2817 | 
            +
                }
         | 
| 2818 | 
            +
             | 
| 2777 2819 | 
             
                for (found = 0; pm; pm = pm->next)
         | 
| 2778 2820 | 
             
                {
         | 
| 2779 2821 | 
             
                    if (argc == pm->basic.arg_count)
         | 
| @@ -2792,7 +2834,7 @@ static VALUE invoke(JNIEnv* jenv, struct cls_method* pm, struct jvi_data* ptr, | |
| 2792 2834 | 
             
                            found = 1;
         | 
| 2793 2835 | 
             
                            for (i = 0; i < argc; i++)
         | 
| 2794 2836 | 
             
                            {
         | 
| 2795 | 
            -
            		    if (!check_rtype(jenv,  | 
| 2837 | 
            +
            		    if (!check_rtype(jenv, argv + i, psig))
         | 
| 2796 2838 | 
             
                                {
         | 
| 2797 2839 | 
             
                                    found = 0;
         | 
| 2798 2840 | 
             
                                    break;
         | 
| @@ -2895,7 +2937,6 @@ static VALUE invoke_by_instance(ID rmid, int argc, VALUE* argv, | |
| 2895 2937 | 
             
                struct cls_field* pf;
         | 
| 2896 2938 | 
             
                struct cls_method* pm;
         | 
| 2897 2939 | 
             
                const char* tname = rb_id2name(rmid);
         | 
| 2898 | 
            -
                
         | 
| 2899 2940 | 
             
                if (argc == 0 && st_lookup(ptr->fields, rmid, (st_data_t*)&pf))
         | 
| 2900 2941 | 
             
                {
         | 
| 2901 2942 | 
             
                    ret = getter(jenv, pf, ptr);
         | 
| @@ -2944,7 +2985,7 @@ static VALUE rjb_i_missing(int argc, VALUE* argv, VALUE self) | |
| 2944 2985 | 
             
            {
         | 
| 2945 2986 | 
             
                struct jvi_data* ptr;
         | 
| 2946 2987 | 
             
                ID rmid = rb_to_id(argv[0]);
         | 
| 2947 | 
            -
             | 
| 2988 | 
            +
             | 
| 2948 2989 | 
             
                Data_Get_Struct(self, struct jvi_data, ptr);
         | 
| 2949 2990 |  | 
| 2950 2991 | 
             
                return invoke_by_instance(rmid, argc -1, argv + 1, ptr, NULL);
         | 
| @@ -3033,11 +3074,17 @@ static VALUE find_const(VALUE pv) | |
| 3033 3074 | 
             
                return rb_const_get(*p, (ID)*(p + 1));
         | 
| 3034 3075 | 
             
            }
         | 
| 3035 3076 |  | 
| 3077 | 
            +
            static VALUE call_blcock(int argc, VALUE* argv)
         | 
| 3078 | 
            +
            {
         | 
| 3079 | 
            +
                return rb_yield_values2(argc, argv);
         | 
| 3080 | 
            +
            }
         | 
| 3081 | 
            +
             | 
| 3036 3082 | 
             
            static VALUE rjb_missing(int argc, VALUE* argv, VALUE self)
         | 
| 3037 3083 | 
             
            {
         | 
| 3038 3084 | 
             
                struct jv_data* ptr;
         | 
| 3039 3085 | 
             
                ID rmid = rb_to_id(argv[0]);
         | 
| 3040 3086 | 
             
                const char* rmname = rb_id2name(rmid);
         | 
| 3087 | 
            +
             | 
| 3041 3088 | 
             
                if (isupper(*rmname))
         | 
| 3042 3089 | 
             
                {
         | 
| 3043 3090 | 
             
                    VALUE r, args[2];
         | 
| @@ -3116,6 +3163,7 @@ void Init_rjbcore() | |
| 3116 3163 | 
             
                rjbc = CLASS_NEW(rb_cObject, "Rjb_JavaClass");
         | 
| 3117 3164 | 
             
                rb_gc_register_address(&rjbc);
         | 
| 3118 3165 | 
             
                rb_define_method(rjbc, "method_missing", rjb_missing, -1);
         | 
| 3166 | 
            +
                rb_define_method(rjbc, "impl", rjb_s_impl, 0);
         | 
| 3119 3167 | 
             
                rb_define_method(rjbc, "_invoke", rjb_invoke, -1);
         | 
| 3120 3168 | 
             
                rb_define_method(rjbc, "_classname", rjb_i_class, 0);
         | 
| 3121 3169 |  | 
| @@ -3131,12 +3179,20 @@ void Init_rjbcore() | |
| 3131 3179 | 
             
                /* Ruby-Java Bridge object */
         | 
| 3132 3180 | 
             
                rjbb = CLASS_NEW(rb_cObject, "Rjb_JavaBridge");
         | 
| 3133 3181 | 
             
                rb_gc_register_address(&rjbb);
         | 
| 3182 | 
            +
             | 
| 3183 | 
            +
                /* anonymous interface object */
         | 
| 3184 | 
            +
                rjba = CLASS_NEW(rb_cObject, "Rjb_AnonymousClass");
         | 
| 3185 | 
            +
                rb_gc_register_address(&rjba);
         | 
| 3186 | 
            +
                rb_define_method(rjba, "initialize", rjb_a_initialize, 1);
         | 
| 3187 | 
            +
                rb_define_method(rjba, "method_missing", rjb_a_missing, -1);
         | 
| 3188 | 
            +
                anonymousblock = rb_intern("@anon_block");
         | 
| 3189 | 
            +
                id_call = rb_intern("call");
         | 
| 3134 3190 | 
             
            }
         | 
| 3135 3191 |  | 
| 3136 3192 | 
             
            VALUE rjb_safe_funcall(VALUE args)
         | 
| 3137 3193 | 
             
            {
         | 
| 3138 3194 | 
             
                VALUE* argp = (VALUE*)args;
         | 
| 3139 | 
            -
                return rb_funcall2(*argp, *(argp + 1), *(argp + 2), argp + 3);
         | 
| 3195 | 
            +
                return rb_funcall2(*argp, *(argp + 1), (int)*(argp + 2), argp + 3);
         | 
| 3140 3196 | 
             
            }
         | 
| 3141 3197 |  | 
| 3142 3198 | 
             
            /**
         | 
| @@ -3148,7 +3204,6 @@ JNIEXPORT jobject JNICALL Java_jp_co_infoseek_hp_arton_rjb_RBridge_call | |
| 3148 3204 | 
             
                int i;
         | 
| 3149 3205 | 
             
                jvalue j;
         | 
| 3150 3206 | 
             
                memset(&j, 0, sizeof(j));
         | 
| 3151 | 
            -
             | 
| 3152 3207 | 
             
                for (i = 0; i < RARRAY_LEN(proxies); i++)
         | 
| 3153 3208 | 
             
                {
         | 
| 3154 3209 | 
             
            	struct rj_bridge* ptr;
         | 
    
        data/lib/rjbcore.so
    CHANGED
    
    | Binary file | 
    
        data/samples/unzip.rb
    ADDED
    
    | @@ -0,0 +1,66 @@ | |
| 1 | 
            +
            require 'rjb'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            if Rjb::VERSION < '1.3.4'
         | 
| 4 | 
            +
              $stderr.puts "require rjb-1.3.4 or later, bye."
         | 
| 5 | 
            +
              exit 1
         | 
| 6 | 
            +
            end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            class ZipFile
         | 
| 9 | 
            +
              include Enumerable
         | 
| 10 | 
            +
              Zip = Rjb::import('java.util.zip.ZipFile')
         | 
| 11 | 
            +
              def initialize(file, &block)
         | 
| 12 | 
            +
                @zipfile = Zip.new(file)
         | 
| 13 | 
            +
                if block
         | 
| 14 | 
            +
                  yield self
         | 
| 15 | 
            +
                  @zipfile.close
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
              def close
         | 
| 19 | 
            +
                @zipfile.close
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
              def each(&block)
         | 
| 22 | 
            +
                unless block
         | 
| 23 | 
            +
                  Enumerator.new(self)
         | 
| 24 | 
            +
                else
         | 
| 25 | 
            +
                  e = @zipfile.entries
         | 
| 26 | 
            +
                  while e.has_more_elements
         | 
| 27 | 
            +
                    yield e.next_element
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
              def size
         | 
| 32 | 
            +
                @zipfile.size
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
              def unzip(ent)
         | 
| 35 | 
            +
                if String === ent
         | 
| 36 | 
            +
                  ent = @zipfile.entry(ent)
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
                is = @zipfile.input_stream(ent)
         | 
| 39 | 
            +
                buff = "\0" * 4096
         | 
| 40 | 
            +
                File.open(ent.name, 'wb') do |fout|
         | 
| 41 | 
            +
                  loop do
         | 
| 42 | 
            +
                    len = is.read(buff, 0, buff.size)
         | 
| 43 | 
            +
                    break if len < 0
         | 
| 44 | 
            +
                    fout.write(buff[0, len])
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
                  is.close
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
            end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            if __FILE__ == $0
         | 
| 52 | 
            +
              if ARGV.size == 0
         | 
| 53 | 
            +
                puts 'usage: ruby unzip.rb filename'
         | 
| 54 | 
            +
              else
         | 
| 55 | 
            +
                ARGV.each do |file|
         | 
| 56 | 
            +
                  ZipFile.new(file) do |zip|
         | 
| 57 | 
            +
                    zip.each do |f|
         | 
| 58 | 
            +
                      puts "#{f.name}, #{f.size}"
         | 
| 59 | 
            +
                      unless f.directory?
         | 
| 60 | 
            +
                        zip.unzip(f)
         | 
| 61 | 
            +
                      end
         | 
| 62 | 
            +
                    end
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
            end
         | 
    
        data/test/Base.class
    ADDED
    
    | Binary file | 
    
        data/test/ExtBase.class
    ADDED
    
    | Binary file | 
    
        data/test/IBase.class
    ADDED
    
    | Binary file | 
    
        data/test/JTest.class
    ADDED
    
    | Binary file | 
    
        data/test/JarTest.class
    ADDED
    
    | Binary file | 
| Binary file | 
    
        data/test/Test.class
    ADDED
    
    | Binary file | 
    
        data/test/Two.class
    ADDED
    
    | Binary file | 
| Binary file | 
    
        data/test/jartest.jar
    CHANGED
    
    | Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
    
        data/test/rjbtest.jar
    CHANGED
    
    | Binary file | 
    
        data/test/test.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            #!/usr/local/env ruby -Ku
         | 
| 2 2 | 
             
            # encoding: utf-8
         | 
| 3 | 
            -
            # $Id: test.rb  | 
| 3 | 
            +
            # $Id: test.rb 170 2011-07-18 12:45:13Z arton $
         | 
| 4 4 |  | 
| 5 5 | 
             
            begin
         | 
| 6 6 | 
             
              require 'rjb'
         | 
| @@ -638,10 +638,22 @@ class TestRjb < Test::Unit::TestCase | |
| 638 638 |  | 
| 639 639 | 
             
              #rjb-bugs-15430 rebported by Bryan Duxbury
         | 
| 640 640 | 
             
              def test_generics_map
         | 
| 641 | 
            -
                 | 
| 641 | 
            +
                
         | 
| 642 | 
            +
                ctest = import('jp.co.infoseek.hp.arton.rjb.Test')
         | 
| 643 | 
            +
                test = ctest.new
         | 
| 642 644 | 
             
                map = test.sorted_map
         | 
| 643 645 | 
             
                assert_equal "\0\x1\x2\x3\x4", map.get('abc')
         | 
| 644 646 | 
             
                assert_equal "\x5\x6\x7\x8\x9", map.get('def')
         | 
| 647 | 
            +
             | 
| 648 | 
            +
                cmap = import('java.util.TreeMap')
         | 
| 649 | 
            +
                map = cmap.new
         | 
| 650 | 
            +
                map.put('abc', @jString.new('abc').bytes)
         | 
| 651 | 
            +
                map.put('012', @jString.new('012').bytes)
         | 
| 652 | 
            +
             | 
| 653 | 
            +
                Rjb::primitive_conversion = true    
         | 
| 654 | 
            +
                map2 = test.throughSortedMap(map)
         | 
| 655 | 
            +
                assert_equal '012', map2.get('012')
         | 
| 656 | 
            +
                assert_equal 'abc', map2.get('abc')
         | 
| 645 657 | 
             
              end
         | 
| 646 658 |  | 
| 647 659 | 
             
              def x_test_zzunload
         | 
| @@ -760,5 +772,25 @@ class TestRjb < Test::Unit::TestCase | |
| 760 772 | 
             
                ba.close
         | 
| 761 773 | 
             
                assert_equal org, buff
         | 
| 762 774 | 
             
              end
         | 
| 775 | 
            +
              def test_anoninterface
         | 
| 776 | 
            +
                arrays = import('java.util.Arrays')
         | 
| 777 | 
            +
                a = [3, -4, 5, -6, 8, -10, -14]
         | 
| 778 | 
            +
                index = arrays.binary_search(a, 6) do |m, o1, o2|
         | 
| 779 | 
            +
                  o1.abs - o2.abs
         | 
| 780 | 
            +
                end
         | 
| 781 | 
            +
                assert_equal 3, index
         | 
| 782 | 
            +
                index = arrays.binary_search(a, 7) do |m, o1, o2|
         | 
| 783 | 
            +
                  o1.abs - o2.abs
         | 
| 784 | 
            +
                end
         | 
| 785 | 
            +
                assert_equal -5, index
         | 
| 786 | 
            +
              end
         | 
| 787 | 
            +
              def test_impl
         | 
| 788 | 
            +
                two = import('Two')
         | 
| 789 | 
            +
                t = two.impl { |m| m.to_s }
         | 
| 790 | 
            +
                a = import('TwoCaller').new
         | 
| 791 | 
            +
                ret = a.foo(t)
         | 
| 792 | 
            +
                assert_equal 'method1', ret[0]
         | 
| 793 | 
            +
                assert_equal 'method2', ret[1]
         | 
| 794 | 
            +
              end
         | 
| 763 795 | 
             
            end
         | 
| 764 796 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: rjb
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash:  | 
| 5 | 
            -
              prerelease:  | 
| 4 | 
            +
              hash: 17
         | 
| 5 | 
            +
              prerelease: 
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 1
         | 
| 8 8 | 
             
              - 3
         | 
| 9 | 
            -
              -  | 
| 10 | 
            -
              version: 1.3. | 
| 9 | 
            +
              - 5
         | 
| 10 | 
            +
              version: 1.3.5
         | 
| 11 11 | 
             
            platform: x86-mswin32-60
         | 
| 12 12 | 
             
            authors: 
         | 
| 13 13 | 
             
            - arton
         | 
| @@ -15,7 +15,7 @@ autorequire: | |
| 15 15 | 
             
            bindir: bin
         | 
| 16 16 | 
             
            cert_chain: []
         | 
| 17 17 |  | 
| 18 | 
            -
            date:  | 
| 18 | 
            +
            date: 2011-07-18 00:00:00 +09:00
         | 
| 19 19 | 
             
            default_executable: 
         | 
| 20 20 | 
             
            dependencies: []
         | 
| 21 21 |  | 
| @@ -45,13 +45,24 @@ files: | |
| 45 45 | 
             
            - lib/rjb.rb
         | 
| 46 46 | 
             
            - lib/rjbextension.rb
         | 
| 47 47 | 
             
            - samples/filechooser.rb
         | 
| 48 | 
            +
            - samples/unzip.rb
         | 
| 48 49 | 
             
            - test/test.rb
         | 
| 49 50 | 
             
            - test/exttest.rb
         | 
| 50 51 | 
             
            - test/test_osxjvm.rb
         | 
| 51 52 | 
             
            - test/gctest.rb
         | 
| 53 | 
            +
            - test/jp/co/infoseek/hp/arton/rjb/JTest.class
         | 
| 52 54 | 
             
            - test/jp/co/infoseek/hp/arton/rjb/IBase.class
         | 
| 53 55 | 
             
            - test/jp/co/infoseek/hp/arton/rjb/Test.class
         | 
| 54 56 | 
             
            - test/jp/co/infoseek/hp/arton/rjb/Test$TestTypes.class
         | 
| 57 | 
            +
            - test/Base.class
         | 
| 58 | 
            +
            - test/JTest.class
         | 
| 59 | 
            +
            - test/IBase.class
         | 
| 60 | 
            +
            - test/Test.class
         | 
| 61 | 
            +
            - test/Test$TestTypes.class
         | 
| 62 | 
            +
            - test/TwoCaller.class
         | 
| 63 | 
            +
            - test/Two.class
         | 
| 64 | 
            +
            - test/JarTest.class
         | 
| 65 | 
            +
            - test/ExtBase.class
         | 
| 55 66 | 
             
            - test/rjbtest.jar
         | 
| 56 67 | 
             
            - test/jartest.jar
         | 
| 57 68 | 
             
            - COPYING
         | 
| @@ -93,7 +104,7 @@ requirements: | |
| 93 104 | 
             
            - JDK 5.0
         | 
| 94 105 | 
             
            - " VC6 version of Ruby"
         | 
| 95 106 | 
             
            rubyforge_project: rjb
         | 
| 96 | 
            -
            rubygems_version: 1. | 
| 107 | 
            +
            rubygems_version: 1.5.2
         | 
| 97 108 | 
             
            signing_key: 
         | 
| 98 109 | 
             
            specification_version: 3
         | 
| 99 110 | 
             
            summary: Ruby Java bridge
         |