+ int quark;
+ const char *arg;
+ ensure_quarks ();
+ while ((arg = va_arg (__ap, char *)) != NULL) {
+ quark = GPOINTER_TO_INT (g_hash_table_lookup (quark_ht, arg));
+ switch (quark) {
+ case QUARK_gtktype: {
+ char * gtktype = va_arg (__ap, char *);
+ char * __old_value = self->gtktype;
+ self->gtktype = g_strdup (gtktype);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_gtktype_STEAL: {
+ char * gtktype = va_arg (__ap, char *);
+ self->gtktype = gtktype;
+ break;
+ }
+ case QUARK_ptype: {
+ Type * ptype = va_arg (__ap, Type *);
+ Type * __old_value = self->ptype;
+ self->ptype = copy_type (ptype);
+ free_type (__old_value);
+ break;
+ }
+ case QUARK_ptype_STEAL: {
+ Type * ptype = va_arg (__ap, Type *);
+ self->ptype = ptype;
+ break;
+ }
+ case QUARK_flags: {
+ GList * flags = va_arg (__ap, GList *);
+ GList * __old_value = self->flags;
+ self->flags = g_list_copy (flags); COPY_LIST_VALS(self->flags, g_strdup);
+ g_list_foreach (__old_value, (GFunc)g_free, NULL); g_list_free (__old_value);
+ break;
+ }
+ case QUARK_flags_STEAL: {
+ GList * flags = va_arg (__ap, GList *);
+ self->flags = flags;
+ break;
+ }
+ case QUARK_name: {
+ char * name = va_arg (__ap, char *);
+ char * __old_value = self->name;
+ self->name = g_strdup (name);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_name_STEAL: {
+ char * name = va_arg (__ap, char *);
+ self->name = name;
+ break;
+ }
+ case QUARK_nick: {
+ char * nick = va_arg (__ap, char *);
+ char * __old_value = self->nick;
+ self->nick = g_strdup (nick);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_nick_STEAL: {
+ char * nick = va_arg (__ap, char *);
+ self->nick = nick;
+ break;
+ }
+ case QUARK_blurb: {
+ char * blurb = va_arg (__ap, char *);
+ char * __old_value = self->blurb;
+ self->blurb = g_strdup (blurb);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_blurb_STEAL: {
+ char * blurb = va_arg (__ap, char *);
+ self->blurb = blurb;
+ break;
+ }
+ case QUARK_minimum: {
+ char * minimum = va_arg (__ap, char *);
+ char * __old_value = self->minimum;
+ self->minimum = g_strdup (minimum);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_minimum_STEAL: {
+ char * minimum = va_arg (__ap, char *);
+ self->minimum = minimum;
+ break;
+ }
+ case QUARK_maximum: {
+ char * maximum = va_arg (__ap, char *);
+ char * __old_value = self->maximum;
+ self->maximum = g_strdup (maximum);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_maximum_STEAL: {
+ char * maximum = va_arg (__ap, char *);
+ self->maximum = maximum;
+ break;
+ }
+ case QUARK_default_value: {
+ char * default_value = va_arg (__ap, char *);
+ char * __old_value = self->default_value;
+ self->default_value = g_strdup (default_value);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_default_value_STEAL: {
+ char * default_value = va_arg (__ap, char *);
+ self->default_value = default_value;
+ break;
+ }
+ case QUARK_extra_gtktype: {
+ char * extra_gtktype = va_arg (__ap, char *);
+ char * __old_value = self->extra_gtktype;
+ self->extra_gtktype = g_strdup (extra_gtktype);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_extra_gtktype_STEAL: {
+ char * extra_gtktype = va_arg (__ap, char *);
+ self->extra_gtktype = extra_gtktype;
+ break;
+ }
+ case QUARK_link: {
+ gboolean link = va_arg (__ap, gboolean);
+ self->link = link;
+ break;
+ }
+ case QUARK_export: {
+ gboolean export = va_arg (__ap, gboolean);
+ self->export = export;
+ break;
+ }
+ case QUARK_get: {
+ char * get = va_arg (__ap, char *);
+ char * __old_value = self->get;
+ self->get = g_strdup (get);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_get_STEAL: {
+ char * get = va_arg (__ap, char *);
+ self->get = get;
+ break;
+ }
+ case QUARK_get_line: {
+ int get_line = va_arg (__ap, int);
+ self->get_line = get_line;
+ break;
+ }
+ case QUARK_set: {
+ char * set = va_arg (__ap, char *);
+ char * __old_value = self->set;
+ self->set = g_strdup (set);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_set_STEAL: {
+ char * set = va_arg (__ap, char *);
+ self->set = set;
+ break;
+ }
+ case QUARK_set_line: {
+ int set_line = va_arg (__ap, int);
+ self->set_line = set_line;
+ break;
+ }
+ case QUARK_line_no: {
+ int line_no = va_arg (__ap, int);
+ self->line_no = line_no;
+ break;
+ }
+ default:
+ g_warning ("Argument named 'Property::%s' does not exist", arg);
+ break;
+ }
+ }
+}
+
+static void
+setv_type (Type * self, va_list __ap)
+{
+ int quark;
+ const char *arg;
+ ensure_quarks ();
+ while ((arg = va_arg (__ap, char *)) != NULL) {
+ quark = GPOINTER_TO_INT (g_hash_table_lookup (quark_ht, arg));
+ switch (quark) {
+ case QUARK_name: {
+ char * name = va_arg (__ap, char *);
+ char * __old_value = self->name;
+ self->name = g_strdup (name);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_name_STEAL: {
+ char * name = va_arg (__ap, char *);
+ self->name = name;
+ break;
+ }
+ case QUARK_pointer: {
+ char * pointer = va_arg (__ap, char *);
+ char * __old_value = self->pointer;
+ self->pointer = g_strdup (pointer);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_pointer_STEAL: {
+ char * pointer = va_arg (__ap, char *);
+ self->pointer = pointer;
+ break;
+ }
+ case QUARK_postfix: {
+ char * postfix = va_arg (__ap, char *);
+ char * __old_value = self->postfix;
+ self->postfix = g_strdup (postfix);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_postfix_STEAL: {
+ char * postfix = va_arg (__ap, char *);
+ self->postfix = postfix;
+ break;
+ }
+ default:
+ g_warning ("Argument named 'Type::%s' does not exist", arg);
+ break;
+ }
+ }
+}
+
+static void
+setv_variable (Variable * self, va_list __ap)
+{
+ int quark;
+ const char *arg;
+ ensure_quarks ();
+ while ((arg = va_arg (__ap, char *)) != NULL) {
+ quark = GPOINTER_TO_INT (g_hash_table_lookup (quark_ht, arg));
+ switch (quark) {
+ case QUARK_scope: {
+ int scope = va_arg (__ap, int);
+ self->scope = scope;
+ break;
+ }
+ case QUARK_vtype: {
+ Type * vtype = va_arg (__ap, Type *);
+ Type * __old_value = self->vtype;
+ self->vtype = copy_type (vtype);
+ free_type (__old_value);
+ break;
+ }
+ case QUARK_vtype_STEAL: {
+ Type * vtype = va_arg (__ap, Type *);
+ self->vtype = vtype;
+ break;
+ }
+ case QUARK_id: {
+ char * id = va_arg (__ap, char *);
+ char * __old_value = self->id;
+ self->id = g_strdup (id);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_id_STEAL: {
+ char * id = va_arg (__ap, char *);
+ self->id = id;
+ break;
+ }
+ case QUARK_line_no: {
+ int line_no = va_arg (__ap, int);
+ self->line_no = line_no;
+ break;
+ }
+ case QUARK_destructor_unref: {
+ gboolean destructor_unref = va_arg (__ap, gboolean);
+ self->destructor_unref = destructor_unref;
+ break;
+ }
+ case QUARK_destructor: {
+ char * destructor = va_arg (__ap, char *);
+ char * __old_value = self->destructor;
+ self->destructor = g_strdup (destructor);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_destructor_STEAL: {
+ char * destructor = va_arg (__ap, char *);
+ self->destructor = destructor;
+ break;
+ }
+ case QUARK_destructor_line: {
+ int destructor_line = va_arg (__ap, int);
+ self->destructor_line = destructor_line;
+ break;
+ }
+ case QUARK_destructor_simple: {
+ gboolean destructor_simple = va_arg (__ap, gboolean);
+ self->destructor_simple = destructor_simple;
+ break;
+ }
+ case QUARK_initializer: {
+ char * initializer = va_arg (__ap, char *);
+ char * __old_value = self->initializer;
+ self->initializer = g_strdup (initializer);
+ g_free (__old_value);
+ break;
+ }
+ case QUARK_initializer_STEAL: {
+ char * initializer = va_arg (__ap, char *);
+ self->initializer = initializer;
+ break;
+ }
+ case QUARK_initializer_line: {
+ int initializer_line = va_arg (__ap, int);
+ self->initializer_line = initializer_line;
+ break;
+ }
+ default:
+ g_warning ("Argument named 'Variable::%s' does not exist", arg);
+ break;
+ }
+ }
+}
+
+Node *
+node_copy (Node *node)
+{
+ g_return_val_if_fail (node != NULL, NULL);
+ g_return_val_if_fail (node->type >= 0 && node->type < LAST_NODE_TYPE, NULL);
+ switch (node->type) {