Re: [Vala] Delegate on struct



Hey,

Thanks for the extra info... unfortunatly I dont understand line 113 at all,
nevermind the rest of the .c file ;-)

I hope somebody else can help you, I'm not up to scratch on my C.
Cheers, -Harry

On Thu, Jul 8, 2010 at 12:59 AM, Nicolas HENRY <icewil gmail com> wrote:

Line 113 :

       t.my_struct_func = (_tmp0_ = __lambda0__my_delegate_func,
((t.my_struct_func_target_destroy_notify == NULL) ? NULL :
(t.my_struct_func_target_destroy_notify (t.my_struct_func_target),
NULL), t.my_struct_func = NULL, t.my_struct_func_target = NULL,
t.my_struct_func_target_destroy_notify = NULL), t.my_struct_func_target
= block1_data_ref (_data1_), t.my_struct_func_target_destroy_notify =
block1_data_unref, _tmp0_);

test.c :

/* test.c generated by valac, the Vala compiler
 * generated from test.vala, do not modify */


#include <glib.h>
#include <glib-object.h>
#include <stdlib.h>
#include <string.h>


#define TYPE_MY_STRUCT (my_struct_get_type ())
typedef struct _MyStruct MyStruct;
#define _g_free0(var) (var = (g_free (var), NULL))
typedef struct _Block1Data Block1Data;

typedef void (*myDelegateFunc) (void* user_data);
struct _MyStruct {
       myDelegateFunc my_struct_func;
       gpointer my_struct_func_target;
       GDestroyNotify my_struct_func_target_destroy_notify;
};

struct _Block1Data {
       int _ref_count_;
       char* a;
};



GType my_struct_get_type (void);
MyStruct* my_struct_dup (const MyStruct* self);
void my_struct_free (MyStruct* self);
void my_struct_copy (const MyStruct* self, MyStruct* dest);
void my_struct_destroy (MyStruct* self);
static void _lambda0_ (Block1Data* _data1_);
static void __lambda0__my_delegate_func (gpointer self);
static Block1Data* block1_data_ref (Block1Data* _data1_);
static void block1_data_unref (Block1Data* _data1_);
void _vala_main (void);



void my_struct_copy (const MyStruct* self, MyStruct* dest) {
       dest->my_struct_func = self->my_struct_func;
}


void my_struct_destroy (MyStruct* self) {
       ((*self).my_struct_func_target_destroy_notify == NULL) ? NULL :
((*self).my_struct_func_target_destroy_notify
((*self).my_struct_func_target), NULL);
       self->my_struct_func = NULL;
       (*self).my_struct_func_target = NULL;
       (*self).my_struct_func_target_destroy_notify = NULL;
}


MyStruct* my_struct_dup (const MyStruct* self) {
       MyStruct* dup;
       dup = g_new0 (MyStruct, 1);
       my_struct_copy (self, dup);
       return dup;
}


void my_struct_free (MyStruct* self) {
       my_struct_destroy (self);
       g_free (self);
}


GType my_struct_get_type (void) {
       static volatile gsize my_struct_type_id__volatile = 0;
       if (g_once_init_enter (&my_struct_type_id__volatile)) {
               GType my_struct_type_id;
               my_struct_type_id = g_boxed_type_register_static
("MyStruct",
(GBoxedCopyFunc) my_struct_dup, (GBoxedFreeFunc) my_struct_free);
               g_once_init_leave (&my_struct_type_id__volatile,
my_struct_type_id);
       }
       return my_struct_type_id__volatile;
}


static void _lambda0_ (Block1Data* _data1_) {
       g_print ("%s", _data1_->a);
}


static void __lambda0__my_delegate_func (gpointer self) {
       _lambda0_ (self);
}


static Block1Data* block1_data_ref (Block1Data* _data1_) {
       ++_data1_->_ref_count_;
       return _data1_;
}


static void block1_data_unref (Block1Data* _data1_) {
       if ((--_data1_->_ref_count_) == 0) {
               _g_free0 (_data1_->a);
               g_slice_free (Block1Data, _data1_);
       }
}


void _vala_main (void) {
       Block1Data* _data1_;
       MyStruct t = {0};
       myDelegateFunc _tmp0_;
       _data1_ = g_slice_new0 (Block1Data);
       _data1_->_ref_count_ = 1;
       _data1_->a = g_strdup ("test");
       memset (&t, 0, sizeof (MyStruct));
       t.my_struct_func = (_tmp0_ = __lambda0__my_delegate_func,
((t.my_struct_func_target_destroy_notify == NULL) ? NULL :
(t.my_struct_func_target_destroy_notify (t.my_struct_func_target),
NULL), t.my_struct_func = NULL, t.my_struct_func_target = NULL,
t.my_struct_func_target_destroy_notify = NULL), t.my_struct_func_target
= block1_data_ref (_data1_), t.my_struct_func_target_destroy_notify =
block1_data_unref, _tmp0_);
       t.my_struct_func (t.my_struct_func_target);
       my_struct_destroy (&t);
       block1_data_unref (_data1_);
}


int main (int argc, char ** argv) {
       g_type_init ();
       _vala_main ();
       return 0;
}





Le jeudi 08 juillet 2010 à 00:29 +0100, Harry Van Haaren a écrit :
Hey Nicolas,

Any chance you'd compile with   valac --save-temps  <your files etc
here>?
And then maybe post line 113 from your test.c file so we can see
what's really going on there?

Cheers, -Harry

On Thu, Jul 8, 2010 at 12:14 AM, Nicolas HENRY <icewil gmail com>
wrote:
        Hello,

        I don't understand why this code produce a warning (vala
        0.9.2) :

        public delegate void myDelegateFunc();

        struct MyStruct {
               public myDelegateFunc my_struct_func;
        }

        void main(){
               string a = "test";
               var t = MyStruct();
               t.my_struct_func = () => {
                       print(a);
               };
               t.my_struct_func();
        }

        .../test.vala.c: In function ‘_vala_main’:
        .../test.vala.c:113: warning: assignment from incompatible
        pointer type

        Thanks.


        _______________________________________________
        vala-list mailing list
        vala-list gnome org
        http://mail.gnome.org/mailman/listinfo/vala-list





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]