+
+ if ( ! $got_quarks{$var}) {
+ $quarks .= "\tQUARK_$var,\n";
+ $setupquarks .= "\tg_hash_table_insert (quark_ht, \"$var\", " .
+ "GINT_TO_POINTER (QUARK_$var));\n";
+ $got_quarks{$var} = 1;
+ }
+ if ($steal && ! $got_quarks{$var . ":steal"}) {
+ $quarks .= "\tQUARK_$var" . "_STEAL,\n";
+ $setupquarks .= "\tg_hash_table_insert (quark_ht, \"$var" .
+ ":steal\", " .
+ "GINT_TO_POINTER (QUARK_$var" . "_STEAL));\n";
+ $got_quarks{$var . ":steal"} = 1;
+ }
+
+ $setfunc{$typename} .= "\t\tcase QUARK_$var: {\n";
+ $setfunc{$typename} .= "\t\t\t$type $var = va_arg (__ap, $type);\n";
+ if ($free ne "") {
+ $setfunc{$typename} .= "\t\t\t$type __old_value = self->$var;\n";
+ }
+
+ if ($copy ne "") {
+ $tmp = $copy;
+ $tmp =~ s/__VAL__/$var/g;
+ $tmp =~ s/__LVAL__/self->$var/g;
+ $setfunc{$typename} .= "\t\t\t$tmp\n";
+ } else {
+ $setfunc{$typename} .= "\t\t\tself->$var = $var;\n";
+ }
+ if ($free ne "") {
+ $tmp = $free;
+ $tmp =~ s/__VAL__/__old_value/g;
+ $setfunc{$typename} .= "\t\t\t$tmp\n";
+ }
+ $setfunc{$typename} .= "\t\t\tbreak;\n\t\t}\n";
+
+ if ($steal) {
+ $setfunc{$typename} .= "\t\tcase QUARK_$var" . "_STEAL: {\n";
+ $setfunc{$typename} .= "\t\t\t$type $var = va_arg (__ap, $type);\n";
+ $setfunc{$typename} .= "\t\t\tself->$var = $var;\n";
+ $setfunc{$typename} .= "\t\t\tbreak;\n\t\t}\n";
+ }