Exemplo n.º 1
0
 def transform_to_c(self):
     C.Helper('jobject_callback_wrapper_destroy')
     return TypeTransform([
         C.Decl(self.c_type, self.c_name),
     ], [
         C.Assign(self.c_name, 'jobject_callback_wrapper_destroy'),
     ])
Exemplo n.º 2
0
 def transform_to_c(self):
     return TypeTransform([
         C.Decl(self.c_type, self.c_name),
     ], [
         C.Assign(self.c_name,
                  'G_CALLBACK(callback_' + self.gir_type + ')'),
     ])
Exemplo n.º 3
0
 def transform_to_jni(self):
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
     ], [C.Assign(self.jni_name, C.Env('NewStringUTF', self.c_name))],
                          self.transfer_ownership and [
                              C.Call('g_free', self.c_name),
                          ])
Exemplo n.º 4
0
 def transform_to_jni(self):
     if self.is_length_param:
         return TypeTransform()
     else:
         return TypeTransform([
             C.Decl(self.jni_type, self.jni_name),
         ], [C.Assign(self.jni_name, self.c_name, cast=self.jni_type)])
Exemplo n.º 5
0
 def transform_to_jni(self):
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
     ], [
         C.Assign(
             self.jni_name,
             C.Helper(self.gir_type + '_to_java_enum', 'env', self.c_name)),
     ])
Exemplo n.º 6
0
 def transform_to_c(self):
     return TypeTransform([
         C.Decl(self.c_type, self.c_name),
     ], [
         C.Assign(self.c_name,
                  C.Call('ANativeWindow_fromSurface', 'env',
                         self.jni_name)),
     ])
Exemplo n.º 7
0
 def transform_to_jni(self):
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
     ], [
         C.Assign(
             self.jni_name,
             C.Helper('gobject_to_jobject', 'env', self.c_name,
                      'TRUE' if not self.transfer_ownership else 'FALSE'))
     ])
Exemplo n.º 8
0
 def transform_to_jni(self):
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
     ], [
         C.Assign(self.jni_name,
                  '((JObjectWrapper*) ' + self.c_name + ')->obj;'),
     ], self.transfer_ownership and [
         C.Helper('jobject_wrapper_destroy', self.c_name, 'FALSE'),
     ])
Exemplo n.º 9
0
 def transform_to_c(self):
     return TypeTransform([
         C.Decl(self.c_type, self.c_name),
     ], [
         C.Assign(
             self.c_name,
             C.Helper('jobject_wrapper_create', self.closure.jni_name,
                      'FALSE')),
     ])
Exemplo n.º 10
0
 def transform_to_jni(self):
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
     ], [
         C.Assign(self.jni_name,
                  C.Helper('gvalue_to_jobject', 'env', self.c_name)),
     ], self.transfer_ownership and [
         C.Call('g_value_reset', self.c_name),
     ])
Exemplo n.º 11
0
 def transform_to_c(self):
     return TypeTransform([
         C.Decl(self.c_type, self.c_name),
     ], [
         C.Assign(self.c_name,
                  C.Env.method(self.jni_name, ('ValueEnum', 'getValue')),
                  cast=self.c_type),
         C.ExceptionCheck.default(self),
     ])
Exemplo n.º 12
0
 def transform_to_c(self):
     return TypeTransform([
         C.Decl(self.c_type, self.c_name),
     ], [
         C.Assign(self.c_name,
                  C.Helper('jobject_to_gobject', 'env', self.jni_name)),
         C.Call('g_object_ref', self.c_name)
         if self.transfer_ownership else [],
     ])
Exemplo n.º 13
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.Assign(tmp,
                      Env('GetStringUTFChars', self.jni_name, 'NULL'),
                      cast=self.c_type),
             C.ExceptionCheck.default(self),
             C.Assign(self.c_name, Call('g_strdup', tmp)),
         ], [
             C.Env('ReleaseStringUTFChars', self.jni_name, tmp),
         ])
     else:
         return TypeTransform([
             C.Decl(self.c_type, self.c_name),
         ], [
             C.Assign(self.c_name,
                      C.Env('GetStringUTFChars', self.jni_name, 'NULL'),
                      cast=self.c_type),
             C.ExceptionCheck.default(self),
         ], [
             C.Env('ReleaseStringUTFChars', self.jni_name, self.c_name),
         ])
Exemplo n.º 14
0
 def transform_to_c(self):
     assert not self.transfer_ownership  # transfer not implemented
     return TypeTransform(
         [
             C.Decl(self.c_type, self.c_name),
             C.Decl('jsize', self.length.jni_name),
             C.Decl(self.length.c_type, self.length.c_name),
         ],
         [
             C.Assert('sizeof(%s) == sizeof(%s)' %
                      (self.c_element_type, self.jni_type[:-5])),
             C.Assign(self.c_name,
                      C.Env('Get%sArrayElements' % self.primitive_type_name,
                            self.jni_name, 'NULL'),
                      cast=self.c_type),
             C.ExceptionCheck.default(self),
             C.Assign(self.length.c_name,
                      C.Env('GetArrayLength', '(jarray) ' + self.jni_name),
                      cast=self.length.c_type),
             C.ExceptionCheck.default(self),
         ],
         [
             # discard any changes
             C.Env('Release%sArrayElements' % self.primitive_type_name,
                   self.jni_name, self.c_name, 'JNI_ABORT'),
             C.ExceptionCheck.default(self),
         ])
Exemplo n.º 15
0
    def transform_to_c(self):
        create = None
        if self.scope is None:
            create = C.Helper('jobject_wrapper_create', self.closure.jni_name,
                              'FALSE')
        else:
            create = C.Helper('jobject_callback_wrapper_create',
                              self.closure.jni_name,
                              'TRUE' if self.scope == 'async' else 'FALSE')

        return TypeTransform([
            C.Decl(self.c_type, self.c_name),
        ], [
            C.Assign(self.c_name, create),
        ], self.scope == 'call' and [
            C.Helper('jobject_callback_wrapper_destroy', self.c_name),
        ])
Exemplo n.º 16
0
    def transform_to_jni(self):
        get = None
        if self.transfer_ownership:
            get = '((JObjectCallbackWrapper*) %s)->wrapper->obj;' % self.c_name
        else:
            get = '((JObjectWrapper*) %s)->obj;' % self.c_name

        return TypeTransform([
            C.Decl(self.jni_type, self.jni_name),
        ], [
            C.Assign(self.jni_name, get),
        ], self.transfer_ownership and [
            C.If(
                '((JObjectCallbackWrapper *) %s)->should_destroy' %
                self.c_name,
                C.Helper('jobject_callback_wrapper_destroy', self.c_name),
            ),
        ])
Exemplo n.º 17
0
 def transform_to_jni(self):
     enum = self.inner_value
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
         C.Decl(enum.jni_type, enum.jni_name),
         C.Decl(enum.c_type, enum.c_name),
     ], [
         C.Assign(
             self.jni_name,
             C.Env.static_method(
                 ('EnumSet', 'noneOf'), C.Cache(enum.java_type))),
         C.While(
             self.c_name,
             C.Assign(enum.c_name, "{0} & -{0}".format(self.c_name)),
             C.Assign(
                 enum.jni_name,
                 C.Helper(self.gir_type + '_to_java_enum', 'env',
                          enum.c_name)),
             C.Env.method(self.jni_name, ('EnumSet', 'add'), enum.jni_name),
             C.Assign(self.c_name, "{0} & ({0} - 1)".format(self.c_name)),
         )
     ])
Exemplo n.º 18
0
 def transform_to_jni(self):
     ref = self.c_name + '_ref'
     return TypeTransform([
         C.Decl('GWeakRef*', ref),
         C.Decl(self.jni_type, self.jni_name),
     ], [
         C.Assign(ref, C.Call('g_new', 'GWeakRef', '1')),
         C.Call('g_weak_ref_init', ref, self.c_name),
         C.Assign(self.jni_name, ref, cast=self.jni_type),
     ])
Exemplo n.º 19
0
 def transform_to_jni(self):
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
         C.Decl('jsize', self.length.jni_name),
     ], [
         C.Assert('sizeof(%s) == sizeof(%s)' %
                  (self.c_element_type, self.jni_type[:-5])),
         C.Assign(self.length.jni_name, self.length.c_name, cast='jsize'),
         C.Assign(
             self.jni_name,
             C.Env('New%sArray' % self.primitive_type_name,
                   self.length.jni_name)),
         C.ExceptionCheck.default(self),
         C.Env('Set%sArrayRegion' % self.primitive_type_name, self.jni_name,
               '0', self.length.jni_name,
               '(const %s*)' % self.jni_type[:-5] + self.c_name),
     ], self.transfer_ownership and [
         C.Call('g_free', self.c_name),
     ])
Exemplo n.º 20
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),
     ])
Exemplo n.º 21
0
 def transform_to_jni(self):
     it = self.c_name + '_it'
     inner_transforms = super(GListType, self).transform_to_jni()
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
         C.Decl(self.c_type, it),
         C.Decl(self.inner_value.c_type, self.inner_value.c_name),
         inner_transforms.declarations,
     ], [
         C.Assign(self.jni_name, C.Env.new('ArrayList')),
         C.Assign(it, self.c_name),
         C.While(
             it,
             C.Assign(self.inner_value.c_name, it + '->data'),
             inner_transforms.conversion,
             C.Env.method(self.jni_name,
                          ('ArrayList', 'add'), self.inner_value.jni_name),
             C.ExceptionCheck.default(self),
             C.Env('DeleteLocalRef', self.inner_value.jni_name)
             if self.inner_value.has_local_ref else [],
             inner_transforms.cleanup,
             C.Assign(it, it + '->next'),
         ),
     ])
Exemplo n.º 22
0
 def transform_to_c(self):
     it = self.jni_name + '_iterator'
     enum = self.inner_value.jni_name
     return TypeTransform([
         C.Decl(self.c_type, self.c_name),
         C.Decl('jobject', it),
         C.Decl('jobject', enum),
     ], [
         C.Assign(self.c_name, '0'),
         C.Assign(it, C.Env.method(self.jni_name,
                                   ('Iterable', 'iterator'))),
         C.While(
             C.Env.method(it, ('Iterator', 'hasNext')),
             C.Assign(enum, C.Env.method(it, ('Iterator', 'next'))),
             C.Assign(self.c_name,
                      C.Env.method(enum, ('ValueEnum', 'getValue')),
                      cast=self.c_type,
                      op='|='),
             C.ExceptionCheck.default(self),
         )
     ])
Exemplo n.º 23
0
 def transform_to_jni(self):
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
     ], [C.Assign(self.jni_name, self.c_name, cast=self.jni_type)])
Exemplo n.º 24
0
 def transform_to_jni(self):
     it = self.c_name + '_it'
     inner_transforms = super(GHashTableType, self).transform_to_jni()
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
         C.Decl('GHashTableIter', it),
         C.Decl(self.inner_key.c_type, self.inner_key.c_name),
         C.Decl(self.inner_value.c_type, self.inner_value.c_name),
         inner_transforms.declarations,
     ], [
         C.Assign(self.jni_name, C.Env.new('HashMap')),
         C.ExceptionCheck.default(self),
         C.Call('g_hash_table_iter_init', '&' + it, self.c_name),
         C.While(
             C.Call('g_hash_table_iter_next', '&' + it,
                    '(void **) &' + self.inner_key.c_name,
                    '(void **) &' + self.inner_value.c_name),
             inner_transforms.conversion,
             C.Env.method(self.jni_name,
                          ('HashMap', 'put'), self.inner_key.jni_name,
                          self.inner_value.jni_name),
             C.ExceptionCheck.default(self),
             C.Env('DeleteLocalRef', self.inner_key.jni_name)
             if self.inner_value.has_local_ref else [],
             C.Env('DeleteLocalRef', self.inner_value.jni_name)
             if self.inner_value.has_local_ref else [],
             inner_transforms.cleanup,
         )
     ], self.transfer_ownership and [
         C.Call('g_hash_table_unref', self.c_name),
     ])
Exemplo n.º 25
0
    'jobject_wrapper_create',
    C.Function('jobject_wrapper_create',
               return_type='JObjectWrapper*',
               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'),
               ]))
Exemplo n.º 26
0
    'jobject_wrapper_create',
    C.Function('jobject_wrapper_create',
               return_type='JObjectWrapper*',
               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'),
               ]))