def transform_to_c(self): if self.transfer_ownership: tmp = self.c_name + '_tmp' return TypeTransform([ C.Decl(self.c_type, self.c_name), C.Decl(self.c_type, tmp), ], [ C.IfElse(ifs=[self.jni_name], bodies=[[ C.Assign(tmp, C.Env('GetStringUTFChars', self.jni_name, 'NULL'), cast=self.c_type), C.ExceptionCheck.default(self), C.Assign(self.c_name, C.Call('g_strdup', tmp)), ], [ C.Assign(self.c_name, 'NULL'), ]]) ], [ C.If(self.jni_name, C.Env('ReleaseStringUTFChars', self.jni_name, tmp)), ]) else: return TypeTransform([ C.Decl(self.c_type, self.c_name), ], [ C.IfElse(ifs=[self.jni_name], bodies=[[ C.Assign(self.c_name, C.Env('GetStringUTFChars', self.jni_name, 'NULL'), cast=self.c_type), C.ExceptionCheck.default(self), ], [ C.Assign(self.c_name, 'NULL'), ]]), ], [ C.If( self.jni_name, C.Env('ReleaseStringUTFChars', self.jni_name, self.c_name)), ])
def transform_to_jni(self): return TypeTransform([ C.Decl(self.jni_type, self.jni_name), ], [ C.IfElse(ifs=[self.c_name], bodies=[ C.Assign(self.jni_name, C.Env('NewStringUTF', self.c_name)), C.Assign(self.jni_name, 'NULL'), ]), ], self.transfer_ownership and [ C.Call('g_free', self.c_name), ])
params=['jobject jobj', 'gboolean weak'], body=[ C.Decl('JNIEnv*', 'env'), C.Decl('JObjectWrapper*', 'wrapper'), '', C.Assign('env', C.Call('get_jni_env')), C.Assign('wrapper', C.Call('g_slice_new0', 'JObjectWrapper')), C.Assert('wrapper'), C.IfElse(ifs=['weak'], bodies=[[ C.Assign('wrapper->weak', C.Env('NewWeakGlobalRef', 'jobj')), C.Log.info('created weak global ref: %p', 'wrapper->weak'), ], [ C.Assign('wrapper->obj', C.Env('NewGlobalRef', 'jobj')), C.Log.info('created global ref: %p', 'wrapper->obj'), ]]), C.ExceptionCheck('NULL'), '', C.Return('wrapper'), ])) C.Helper.add_helper( 'jobject_wrapper_destroy', C.Function('jobject_wrapper_destroy', return_type='void',
params=['jobject jobj', 'gboolean weak'], body=[ C.Decl('JNIEnv*', 'env'), C.Decl('JObjectWrapper*', 'wrapper'), '', C.Assign('env', C.Call('get_jni_env')), C.Assign('wrapper', C.Call('g_slice_new0', 'JObjectWrapper')), C.Assert('wrapper'), C.IfElse(ifs=['weak'], bodies=[[ C.Assign('wrapper->weak', C.Env('NewWeakGlobalRef', 'jobj')), C.Log.verbose('created weak global ref: %p', 'wrapper->weak'), ], [ C.Assign('wrapper->obj', C.Env('NewGlobalRef', 'jobj')), C.Log.verbose('created global ref: %p', 'wrapper->obj'), ]]), C.ExceptionCheck('NULL'), '', C.Return('wrapper'), ])) C.Helper.add_helper( 'jobject_wrapper_destroy', C.Function('jobject_wrapper_destroy', return_type='void',