示例#1
0
 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)),
         ])
示例#2
0
 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),
     ])
示例#3
0
               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',
示例#4
0
               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',