+ class_nodes = g_list_append(class_nodes,node);
+
+ g_string_free ((yyvsp[-4].cbuf), FALSE);
+ g_string_free ((yyvsp[-1].cbuf), FALSE);
+
+ } else if(strcmp((yyvsp[-6].id),"set")==0 &&
+ strcmp((yyvsp[-3].id),"get")==0) {
+ Type *type = pop_type();
+ g_free ((yyvsp[-6].id));
+ g_free ((yyvsp[-3].id));
+ node = node_new (ARGUMENT_NODE,
+ "gtktype:steal", (yyvsp[-9].id),
+ "atype:steal", type,
+ "flags:steal", (yyvsp[-10].list),
+ "name:steal", (yyvsp[-8].id),
+ "get:steal", ((yyvsp[-1].cbuf))->str,
+ "get_line", (yyvsp[-2].line),
+ "set:steal", ((yyvsp[-4].cbuf))->str,
+ "set_line", (yyvsp[-5].line),
+ "line_no", (yyvsp[-11].line),
+ NULL);
+ g_string_free ((yyvsp[-1].cbuf), FALSE);
+ g_string_free ((yyvsp[-4].cbuf), FALSE);
+ class_nodes = g_list_append(class_nodes,node);
+ } else {
+ g_free ((yyvsp[-9].id));
+ g_free ((yyvsp[-8].id));
+ g_free ((yyvsp[-6].id));
+ g_free ((yyvsp[-3].id));
+ g_list_foreach ((yyvsp[-10].list), (GFunc)g_free, NULL);
+ g_list_free ((yyvsp[-10].list));
+ g_string_free ((yyvsp[-1].cbuf), TRUE);
+ g_string_free ((yyvsp[-4].cbuf), TRUE);
+ yyerror (_("parse error"));
+ YYERROR;
+ }
+
+ if ((yyvsp[-7].id) != NULL) {
+ Argument *arg = (Argument *)node;
+ export_accessors (arg->name,
+ arg->get != NULL, arg->get_line,
+ arg->set != NULL, arg->set_line,
+ arg->atype,
+ arg->gtktype,
+ arg->line_no);
+ g_free ((yyvsp[-7].id));
+ }
+
+ }
+ break;
+
+ case 58:
+#line 1058 "parse.y"
+ {
+ Node *node = NULL;
+ if(strcmp((yyvsp[-3].id), "get") == 0) {
+ Type *type = pop_type();
+ g_free ((yyvsp[-3].id));
+ node = node_new (ARGUMENT_NODE,
+ "gtktype:steal", (yyvsp[-6].id),
+ "atype:steal", type,
+ "flags:steal", (yyvsp[-7].list),
+ "name:steal", (yyvsp[-5].id),
+ "get:steal", ((yyvsp[-1].cbuf))->str,
+ "get_line", (yyvsp[-2].line),
+ "line_no", (yyvsp[-8].line),
+ NULL);
+
+ g_string_free ((yyvsp[-1].cbuf), FALSE);
+ class_nodes = g_list_append(class_nodes, node);
+ } else if(strcmp((yyvsp[-3].id), "set") == 0) {
+ Type *type = pop_type();
+ g_free ((yyvsp[-3].id));
+ node = node_new (ARGUMENT_NODE,
+ "gtktype:steal", (yyvsp[-6].id),
+ "atype:steal", type,
+ "flags:steal", (yyvsp[-7].list),
+ "name:steal", (yyvsp[-5].id),
+ "set:steal", ((yyvsp[-1].cbuf))->str,
+ "set_line", (yyvsp[-2].line),
+ "line_no", (yyvsp[-8].line),
+ NULL);
+
+ g_string_free ((yyvsp[-1].cbuf), FALSE);
+ class_nodes = g_list_append (class_nodes, node);
+ } else {
+ g_free ((yyvsp[-3].id));
+ g_free ((yyvsp[-6].id));
+ g_free ((yyvsp[-5].id));
+ g_list_foreach ((yyvsp[-7].list), (GFunc)g_free, NULL);
+ g_list_free ((yyvsp[-7].list));
+ g_string_free ((yyvsp[-1].cbuf), TRUE);
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+
+ if ((yyvsp[-4].id) != NULL) {
+ Argument *arg = (Argument *)node;
+ export_accessors (arg->name,
+ arg->get != NULL, arg->get_line,
+ arg->set != NULL, arg->set_line,
+ arg->atype,
+ arg->gtktype,
+ arg->line_no);
+ g_free ((yyvsp[-4].id));
+ }
+ }
+ break;
+
+ case 59:
+#line 1112 "parse.y"
+ {
+ Node *node;
+ char *get, *set = NULL;
+ Variable *var;
+ Type *type;
+ const char *root;
+
+ if(strcmp((yyvsp[0].id), "link")!=0 &&
+ strcmp((yyvsp[0].id), "stringlink")!=0 &&
+ strcmp((yyvsp[0].id), "objectlink")!=0) {
+ g_free((yyvsp[0].id));
+ g_free((yyvsp[-3].id));
+ g_free((yyvsp[-2].id));
+ g_list_foreach((yyvsp[-4].list),(GFunc)g_free,NULL);
+ g_list_free((yyvsp[-4].list));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+
+ type = pop_type();
+
+ var = find_var_or_die((yyvsp[-2].id), (yyvsp[-5].line));
+ if(var->scope == PRIVATE_SCOPE) {
+ root = "self->_priv";
+ } else if(var->scope == CLASS_SCOPE) {
+ root = "SELF_GET_CLASS(self)";
+ if(no_self_alias)
+ error_print(GOB_ERROR, (yyvsp[-5].line),
+ _("Self aliases needed when autolinking to a classwide member"));
+ } else {
+ root = "self";
+ }
+
+ if(strcmp((yyvsp[0].id), "link")==0) {
+ set = g_strdup_printf("%s->%s = ARG;",
+ root, (yyvsp[-2].id));
+ } else if(strcmp((yyvsp[0].id), "stringlink")==0) {
+ set = g_strdup_printf("g_free (%s->%s); "
+ "%s->%s = g_strdup (ARG);",
+ root, (yyvsp[-2].id),
+ root, (yyvsp[-2].id));
+ } else if(strcmp((yyvsp[0].id), "objectlink")==0) {
+ set = g_strdup_printf(
+ "if (ARG != NULL) "
+ "g_object_ref (G_OBJECT (ARG)); "
+ "if (%s->%s != NULL) "
+ "g_object_unref (G_OBJECT (%s->%s)); "
+ "%s->%s = ARG;",
+ root, (yyvsp[-2].id),
+ root, (yyvsp[-2].id),
+ root, (yyvsp[-2].id));
+ } else {
+ g_assert_not_reached();
+ }
+
+ get = g_strdup_printf("ARG = %s->%s;", root, (yyvsp[-2].id));
+
+ g_free ((yyvsp[0].id));
+
+ if (type == NULL)
+ type = (Type *)node_copy ((Node *)var->vtype);
+
+ node = node_new (ARGUMENT_NODE,
+ "gtktype:steal", (yyvsp[-3].id),
+ "atype:steal", type,
+ "flags:steal", (yyvsp[-4].list),
+ "name:steal", (yyvsp[-2].id),
+ "get:steal", get,
+ "get_line", (yyvsp[-5].line),
+ "set:steal", set,
+ "set_line", (yyvsp[-5].line),
+ "line_no", (yyvsp[-5].line),
+ NULL);
+
+ if ((yyvsp[-1].id) != NULL) {
+ Argument *arg = (Argument *)node;
+ export_accessors (arg->name,
+ arg->get != NULL, arg->get_line,
+ arg->set != NULL, arg->set_line,
+ arg->atype,
+ arg->gtktype,
+ arg->line_no);
+ g_free ((yyvsp[-1].id));
+ }
+
+ class_nodes = g_list_append (class_nodes, node);
+ }
+ break;
+
+ case 60:
+#line 1201 "parse.y"
+ {
+ if (strcmp ((yyvsp[-1].id), "export")!=0) {
+ g_free ((yyvsp[-1].id));
+ yyerror (_("parse error"));
+ YYERROR;
+ }
+ (yyval.id) = (yyvsp[-1].id);
+ }
+ break;
+
+ case 61:
+#line 1209 "parse.y"
+ {
+ (yyval.id) = NULL;
+ }
+ break;
+
+ case 62:
+#line 1214 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "line_no", (yyvsp[-10].line),
+ "gtktype:steal", debool ((yyvsp[-9].id)),
+ "name:steal", (yyvsp[-8].id),
+ NULL);
+ if (strcmp ((yyvsp[-6].id), "get") == 0 &&
+ strcmp ((yyvsp[-3].id), "set") == 0) {
+ node_set ((Node *)property,
+ "get:steal", ((yyvsp[-4].cbuf))->str,
+ "get_line", (yyvsp[-5].line),
+ "set:steal", ((yyvsp[-1].cbuf))->str,
+ "set_line", (yyvsp[-2].line),
+ NULL);
+ g_string_free ((yyvsp[-4].cbuf), FALSE);
+ g_string_free ((yyvsp[-1].cbuf), FALSE);
+ g_free ((yyvsp[-6].id));
+ g_free ((yyvsp[-3].id));
+ } else if (strcmp ((yyvsp[-6].id), "set") == 0 &&
+ strcmp ((yyvsp[-3].id), "get") == 0) {
+ node_set ((Node *)property,
+ "get:steal", ((yyvsp[-1].cbuf))->str,
+ "get_line", (yyvsp[-2].line),
+ "set:steal", ((yyvsp[-4].cbuf))->str,
+ "set_line", (yyvsp[-5].line),
+ NULL);
+ g_string_free ((yyvsp[-4].cbuf), FALSE);
+ g_string_free ((yyvsp[-1].cbuf), FALSE);
+ g_free ((yyvsp[-6].id));
+ g_free ((yyvsp[-3].id));
+ } else {
+ g_string_free ((yyvsp[-4].cbuf), TRUE);
+ g_string_free ((yyvsp[-1].cbuf), TRUE);
+ g_free ((yyvsp[-6].id));
+ g_free ((yyvsp[-3].id));
+ node_free ((Node *)property);
+ property = NULL;
+ yyerror (_("parse error"));
+ YYERROR;
+ }
+ property_link_and_export ((Node *)property);
+ if (property != NULL) {
+ class_nodes = g_list_append (class_nodes,
+ property);
+ property = NULL;
+ }
+ }
+ break;
+
+ case 63:
+#line 1262 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "line_no", (yyvsp[-7].line),
+ "gtktype:steal", debool ((yyvsp[-6].id)),
+ "name:steal", (yyvsp[-5].id),
+ NULL);
+ if (strcmp ((yyvsp[-3].id), "get") == 0) {
+ node_set ((Node *)property,
+ "get:steal", ((yyvsp[-1].cbuf))->str,
+ "get_line", (yyvsp[-2].line),
+ NULL);
+ g_string_free ((yyvsp[-1].cbuf), FALSE);
+ g_free ((yyvsp[-3].id));
+ } else if (strcmp ((yyvsp[-3].id), "set") == 0) {
+ node_set ((Node *)property,
+ "set:steal", ((yyvsp[-1].cbuf))->str,
+ "set_line", (yyvsp[-2].line),
+ NULL);
+ g_string_free ((yyvsp[-1].cbuf), FALSE);
+ g_free ((yyvsp[-3].id));
+ } else {
+ g_string_free ((yyvsp[-1].cbuf), TRUE);
+ g_free ((yyvsp[-3].id));
+ node_free ((Node *)property);
+ property = NULL;
+ yyerror (_("parse error"));
+ YYERROR;
+ }
+ property_link_and_export ((Node *)property);
+ if (property != NULL) {
+ class_nodes = g_list_append (class_nodes,
+ property);
+ property = NULL;
+ }
+ }
+ break;
+
+ case 64:
+#line 1298 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "line_no", (yyvsp[-4].line),
+ "gtktype:steal", debool ((yyvsp[-3].id)),
+ "name:steal", (yyvsp[-2].id),
+ NULL);
+ property_link_and_export ((Node *)property);
+ if (property != NULL) {
+ class_nodes = g_list_append (class_nodes,
+ property);
+ property = NULL;
+ }
+ }
+ break;
+
+ case 65:
+#line 1314 "parse.y"
+ { ; }
+ break;
+
+ case 66:
+#line 1315 "parse.y"
+ { ; }
+ break;
+
+ case 67:
+#line 1318 "parse.y"
+ { ; }
+ break;
+
+ case 68:
+#line 1319 "parse.y"
+ { ; }
+ break;
+
+ case 69:
+#line 1322 "parse.y"
+ { (yyval.id) = (yyvsp[0].id); }
+ break;
+
+ case 70:
+#line 1323 "parse.y"
+ {
+ if (strcmp ((yyvsp[-3].id), "_") != 0) {
+ g_free ((yyvsp[-3].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ g_free ((yyvsp[-3].id));
+ (yyval.id) = g_strconcat ("_(", (yyvsp[-1].id), ")", NULL);
+ g_free ((yyvsp[-1].id));
+ }
+ break;
+
+ case 71:
+#line 1335 "parse.y"
+ { (yyval.id) = (yyvsp[0].id); }
+ break;
+
+ case 72:
+#line 1336 "parse.y"
+ { (yyval.id) = (yyvsp[0].id); }
+ break;
+
+ case 73:
+#line 1339 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "nick:steal", (yyvsp[0].id),
+ NULL);
+ }
+ break;
+
+ case 74:
+#line 1345 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "blurb:steal", (yyvsp[0].id),
+ NULL);
+ }
+ break;
+
+ case 75:
+#line 1351 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "maximum:steal", (yyvsp[0].id),
+ NULL);
+ }
+ break;
+
+ case 76:
+#line 1357 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "minimum:steal", (yyvsp[0].id),
+ NULL);
+ }
+ break;
+
+ case 77:
+#line 1363 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "default_value:steal", (yyvsp[0].id),
+ NULL);
+ }
+ break;
+
+ case 78:
+#line 1369 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "flags:steal", (yyvsp[0].list),
+ NULL);
+ }
+ break;
+
+ case 79:
+#line 1375 "parse.y"
+ {
+ Type *type = pop_type ();
+ ensure_property ();
+ node_set ((Node *)property,
+ "ptype:steal", type,
+ NULL);
+ }
+ break;
+
+ case 80:
+#line 1382 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[0].id),
+ NULL);
+ }
+ break;
+
+ case 81:
+#line 1388 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[0].id),
+ NULL);
+ }
+ break;
+
+ case 82:
+#line 1394 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[0].id),
+ NULL);
+ }
+ break;
+
+ case 83:
+#line 1400 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[0].id),
+ NULL);
+ }
+ break;
+
+ case 84:
+#line 1406 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[0].id),
+ NULL);
+ }
+ break;
+
+ case 85:
+#line 1412 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[0].id),
+ NULL);
+ }
+ break;
+
+ case 86:
+#line 1418 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[0].id),
+ NULL);
+ }
+ break;
+
+ case 87:
+#line 1424 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[0].id),
+ NULL);
+ }
+ break;
+
+ case 88:
+#line 1430 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[0].id),
+ NULL);
+ }
+ break;
+
+ case 89:
+#line 1436 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[0].id),
+ NULL);
+ }
+ break;
+
+ case 90:
+#line 1442 "parse.y"
+ {
+ ensure_property ();
+ if (strcmp ((yyvsp[0].id), "override") == 0) {
+ g_free((yyvsp[0].id));
+ node_set ((Node *)property,
+ "override", TRUE,
+ NULL);
+ } else if (strcmp ((yyvsp[0].id), "link") == 0) {
+ g_free((yyvsp[0].id));
+ node_set ((Node *)property,
+ "link", TRUE,
+ NULL);
+ } else if (strcmp ((yyvsp[0].id), "export") == 0) {
+ g_free((yyvsp[0].id));
+ node_set ((Node *)property,
+ "export", TRUE,
+ NULL);
+ } else {
+ g_free((yyvsp[0].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 91:
+#line 1467 "parse.y"
+ {
+ if(strcmp((yyvsp[-2].id),"type")!=0) {
+ g_free((yyvsp[-4].id));
+ g_free((yyvsp[-2].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ (yyval.id) = debool ((yyvsp[-4].id));
+ }
+ break;
+
+ case 92:
+#line 1476 "parse.y"
+ {
+ (yyval.id) = debool ((yyvsp[0].id));
+ typestack = g_list_prepend(typestack,NULL);
+ }
+ break;
+
+ case 93:
+#line 1482 "parse.y"
+ { (yyval.list) = (yyvsp[-1].list); }
+ break;
+
+ case 94:
+#line 1483 "parse.y"
+ { (yyval.list) = NULL; }
+ break;
+
+ case 95:
+#line 1486 "parse.y"
+ {
+ (yyval.list) = g_list_append((yyvsp[0].list),(yyvsp[-2].id));
+ }
+ break;
+
+ case 96:
+#line 1489 "parse.y"
+ {
+ (yyval.list) = g_list_append(NULL,(yyvsp[0].id));
+ }
+ break;
+
+ case 97:
+#line 1495 "parse.y"
+ {
+ Node *node = node_new (TYPE_NODE,
+ "name:steal", (yyvsp[-1].id),
+ "pointer:steal", (yyvsp[0].id),
+ NULL);
+ typestack = g_list_prepend(typestack,node);
+ }
+ break;
+
+ case 98:
+#line 1502 "parse.y"
+ {
+ Node *node = node_new (TYPE_NODE,
+ "name:steal", (yyvsp[0].id),
+ NULL);
+ typestack = g_list_prepend(typestack,node);
+ }
+ break;
+
+ case 99:
+#line 1511 "parse.y"
+ {
+ (yyval.id) = (yyvsp[0].id);
+ }
+ break;
+
+ case 100:
+#line 1514 "parse.y"
+ {
+ (yyval.id) = (yyvsp[0].id);
+ }
+ break;
+
+ case 101:
+#line 1517 "parse.y"
+ {
+ (yyval.id) = g_strconcat("const ", (yyvsp[0].id), NULL);
+ g_free((yyvsp[0].id));
+ }
+ break;
+
+ case 102:
+#line 1521 "parse.y"
+ {
+ (yyval.id) = g_strconcat((yyvsp[-1].id), " const", NULL);
+ g_free((yyvsp[-1].id));
+ }
+ break;
+
+ case 103:
+#line 1525 "parse.y"
+ {
+ (yyval.id) = g_strconcat((yyvsp[-1].id), " ", (yyvsp[0].id), NULL);
+ g_free((yyvsp[0].id));
+ }
+ break;
+
+ case 104:
+#line 1529 "parse.y"
+ {
+ (yyval.id) = g_strconcat("const ", (yyvsp[-1].id), " ",
+ (yyvsp[0].id), NULL);
+ g_free((yyvsp[0].id));
+ }
+ break;
+
+ case 105:
+#line 1534 "parse.y"
+ {
+ (yyval.id) = g_strconcat((yyvsp[-2].id), " ",
+ (yyvsp[-1].id), " const", NULL);
+ g_free((yyvsp[-1].id));
+ }
+ break;
+
+ case 106:
+#line 1542 "parse.y"
+ {
+ (yyval.id) = g_strconcat((yyvsp[-1].id), " ", (yyvsp[0].id), NULL);
+ g_free((yyvsp[0].id));
+ }
+ break;
+
+ case 107:
+#line 1546 "parse.y"
+ {
+ (yyval.id) = g_strconcat((yyvsp[-1].id), " ", (yyvsp[0].id), NULL);
+ g_free((yyvsp[-1].id));
+ g_free((yyvsp[0].id));
+ }
+ break;
+
+ case 108:
+#line 1551 "parse.y"
+ {
+ (yyval.id) = g_strconcat("const ", (yyvsp[0].id), NULL);
+ g_free((yyvsp[0].id));
+ }
+ break;
+
+ case 109:
+#line 1555 "parse.y"
+ {
+ (yyval.id) = (yyvsp[0].id);
+ }
+ break;
+
+ case 110:
+#line 1558 "parse.y"
+ {
+ (yyval.id) = g_strconcat((yyvsp[-1].id), " const", NULL);
+ g_free((yyvsp[-1].id));
+ }
+ break;
+
+ case 111:
+#line 1562 "parse.y"
+ {
+ (yyval.id) = g_strdup((yyvsp[0].id));
+ }
+ break;
+
+ case 112:
+#line 1565 "parse.y"
+ {
+ (yyval.id) = g_strconcat((yyvsp[-1].id), " const", NULL);
+ }
+ break;
+
+ case 113:
+#line 1570 "parse.y"
+ { (yyval.id) = "void"; }
+ break;
+
+ case 114:
+#line 1571 "parse.y"
+ { (yyval.id) = "char"; }
+ break;
+
+ case 115:
+#line 1572 "parse.y"
+ { (yyval.id) = "short"; }
+ break;
+
+ case 116:
+#line 1573 "parse.y"
+ { (yyval.id) = "int"; }
+ break;
+
+ case 117:
+#line 1574 "parse.y"
+ { (yyval.id) = "long"; }
+ break;
+
+ case 118:
+#line 1575 "parse.y"
+ { (yyval.id) = "float"; }
+ break;
+
+ case 119:
+#line 1576 "parse.y"
+ { (yyval.id) = "double"; }
+ break;
+
+ case 120:
+#line 1577 "parse.y"
+ { (yyval.id) = "signed"; }
+ break;
+
+ case 121:
+#line 1578 "parse.y"
+ { (yyval.id) = "unsigned"; }
+ break;
+
+ case 122:
+#line 1581 "parse.y"
+ { (yyval.id) = "struct"; }
+ break;
+
+ case 123:
+#line 1582 "parse.y"
+ { (yyval.id) = "union"; }
+ break;
+
+ case 124:
+#line 1583 "parse.y"
+ { (yyval.id) = "enum"; }
+ break;
+
+ case 125:
+#line 1586 "parse.y"
+ { (yyval.id) = g_strdup("*"); }
+ break;
+
+ case 126:
+#line 1587 "parse.y"
+ { (yyval.id) = g_strdup("* const"); }
+ break;
+
+ case 127:
+#line 1588 "parse.y"
+ {
+ (yyval.id) = g_strconcat("*", (yyvsp[0].id), NULL);
+ g_free((yyvsp[0].id));
+ }
+ break;
+
+ case 128:
+#line 1592 "parse.y"
+ {
+ (yyval.id) = g_strconcat("* const", (yyvsp[0].id), NULL);
+ g_free((yyvsp[0].id));
+ }
+ break;
+
+ case 129:
+#line 1599 "parse.y"
+ {
+ if(strcmp((yyvsp[-1].id), "first")==0)
+ (yyval.sigtype) = SIGNAL_FIRST_METHOD;
+ else if(strcmp((yyvsp[-1].id), "last")==0)
+ (yyval.sigtype) = SIGNAL_LAST_METHOD;
+ else {
+ yyerror(_("signal must be 'first' or 'last'"));
+ g_free((yyvsp[-1].id));
+ YYERROR;
+ }
+ g_free((yyvsp[-1].id));
+ }
+ break;
+
+ case 130:
+#line 1611 "parse.y"
+ {
+ (yyval.sigtype) = SIGNAL_LAST_METHOD;
+ }
+ break;
+
+ case 131:
+#line 1617 "parse.y"
+ {
+ if(strcmp((yyvsp[-1].id),"first")==0)
+ (yyval.sigtype) = SIGNAL_FIRST_METHOD;
+ else if(strcmp((yyvsp[-1].id),"last")==0)
+ (yyval.sigtype) = SIGNAL_LAST_METHOD;
+ else {
+ yyerror(_("signal must be 'first' or 'last'"));
+ g_free((yyvsp[-1].id));
+ YYERROR;
+ }
+ g_free((yyvsp[-1].id));
+ }
+ break;
+
+ case 132:
+#line 1629 "parse.y"
+ {
+ if(strcmp((yyvsp[-2].id),"first")==0)
+ (yyval.sigtype) = SIGNAL_FIRST_METHOD;
+ else if(strcmp((yyvsp[-2].id),"last")==0)
+ (yyval.sigtype) = SIGNAL_LAST_METHOD;
+ else {
+ yyerror(_("signal must be 'first' or 'last'"));
+ g_free((yyvsp[-2].id));
+ YYERROR;
+ }
+ g_free((yyvsp[-2].id));
+ }
+ break;
+
+ case 133:
+#line 1641 "parse.y"
+ {
+ (yyval.sigtype) = SIGNAL_LAST_METHOD;
+ }
+ break;
+
+ case 134:
+#line 1644 "parse.y"
+ {
+ /* the_scope was default thus public */
+ the_scope = PUBLIC_SCOPE;
+ }
+ break;
+
+ case 135:
+#line 1650 "parse.y"
+ {
+ gtktypes = g_list_prepend(gtktypes, debool ((yyvsp[-3].id)));
+ }
+ break;
+
+ case 136:
+#line 1655 "parse.y"
+ {
+ gtktypes = g_list_append(gtktypes, debool ((yyvsp[0].id)));
+ }
+ break;
+
+ case 137:
+#line 1658 "parse.y"
+ {
+ gtktypes = g_list_append(gtktypes, debool ((yyvsp[0].id)));
+ }
+ break;
+
+ case 138:
+#line 1663 "parse.y"
+ { (yyval.cbuf) = (yyvsp[0].cbuf); }
+ break;
+
+ case 139:
+#line 1664 "parse.y"
+ { (yyval.cbuf) = NULL; }
+ break;
+
+ case 140:
+#line 1668 "parse.y"
+ {
+ if(!has_self) {
+ yyerror(_("signal without 'self' as "
+ "first parameter"));
+ free_all_global_state();
+ YYERROR;
+ }
+ if(the_scope == CLASS_SCOPE) {
+ yyerror(_("a method cannot be of class scope"));
+ free_all_global_state();
+ YYERROR;
+ }
+ push_function(the_scope, (yyvsp[-7].sigtype),NULL,
+ (yyvsp[-5].id), (yyvsp[0].cbuf),(yyvsp[-9].line),
+ ccode_line, vararg, (yyvsp[-8].list));
+ }
+ break;
+
+ case 141:
+#line 1684 "parse.y"
+ {
+ if(!has_self) {
+ yyerror(_("signal without 'self' as "
+ "first parameter"));
+ free_all_global_state();
+ YYERROR;
+ }
+ if(the_scope == CLASS_SCOPE) {
+ yyerror(_("a method cannot be of class scope"));
+ free_all_global_state();
+ YYERROR;
+ }
+ push_function(the_scope, (yyvsp[-7].sigtype), NULL,
+ (yyvsp[-5].id), (yyvsp[0].cbuf), (yyvsp[-9].line),
+ ccode_line, vararg, (yyvsp[-8].list));
+ }
+ break;
+
+ case 142:
+#line 1700 "parse.y"
+ {
+ if(!has_self) {
+ yyerror(_("virtual method without 'self' as "
+ "first parameter"));
+ free_all_global_state();
+ YYERROR;
+ }
+ if(the_scope == CLASS_SCOPE) {
+ yyerror(_("a method cannot be of class scope"));
+ free_all_global_state();
+ YYERROR;
+ }
+ push_function(the_scope, VIRTUAL_METHOD, NULL, (yyvsp[-5].id),
+ (yyvsp[0].cbuf), (yyvsp[-8].line),
+ ccode_line, vararg, NULL);
+ }
+ break;
+
+ case 143:
+#line 1716 "parse.y"
+ {
+ if(!has_self) {
+ yyerror(_("virtual method without 'self' as "
+ "first parameter"));
+ free_all_global_state();
+ YYERROR;
+ }
+ if(the_scope == CLASS_SCOPE) {
+ yyerror(_("a method cannot be of class scope"));
+ free_all_global_state();
+ YYERROR;
+ }
+ push_function(the_scope, VIRTUAL_METHOD, NULL, (yyvsp[-5].id),
+ (yyvsp[0].cbuf), (yyvsp[-7].line),
+ ccode_line, vararg, NULL);
+ }
+ break;
+
+ case 144:
+#line 1732 "parse.y"
+ {
+ if(!has_self) {
+ yyerror(_("virtual method without 'self' as "
+ "first parameter"));
+ free_all_global_state();
+ YYERROR;
+ }
+ push_function(PUBLIC_SCOPE, VIRTUAL_METHOD, NULL,
+ (yyvsp[-5].id), (yyvsp[0].cbuf), (yyvsp[-7].line),
+ ccode_line, vararg, NULL);
+ }
+ break;
+
+ case 145:
+#line 1743 "parse.y"
+ {
+ push_function(NO_SCOPE, OVERRIDE_METHOD, (yyvsp[-8].id),
+ (yyvsp[-5].id), (yyvsp[0].cbuf),
+ (yyvsp[-10].line), ccode_line,
+ vararg, NULL);
+ }
+ break;
+
+ case 146:
+#line 1749 "parse.y"
+ {
+ if(the_scope == CLASS_SCOPE) {
+ yyerror(_("a method cannot be of class scope"));
+ free_all_global_state();
+ YYERROR;
+ }
+ push_function(the_scope, REGULAR_METHOD, NULL, (yyvsp[-5].id),
+ (yyvsp[0].cbuf), (yyvsp[-7].line), ccode_line,
+ vararg, NULL);
+ }
+ break;
+
+ case 147:
+#line 1759 "parse.y"
+ {
+ if(strcmp((yyvsp[-4].id), "init")==0) {
+ push_init_arg((yyvsp[-2].id),FALSE);
+ push_function(NO_SCOPE, INIT_METHOD, NULL,
+ (yyvsp[-4].id), (yyvsp[0].cbuf), (yyvsp[-3].line),
+ ccode_line, FALSE, NULL);
+ } else if(strcmp((yyvsp[-4].id), "class_init")==0) {
+ push_init_arg((yyvsp[-2].id),TRUE);
+ push_function(NO_SCOPE, CLASS_INIT_METHOD, NULL,
+ (yyvsp[-4].id), (yyvsp[0].cbuf), (yyvsp[-3].line),
+ ccode_line, FALSE, NULL);
+ } else {
+ g_free((yyvsp[-4].id));
+ g_free((yyvsp[-2].id));
+ g_string_free((yyvsp[0].cbuf),TRUE);
+ yyerror(_("parse error "
+ "(untyped blocks must be init or "
+ "class_init)"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 148:
+#line 1782 "parse.y"
+ {
+ g_free(onerror); onerror = NULL;
+ g_free(defreturn); defreturn = NULL;
+ if(!set_return_value((yyvsp[-1].id), (yyvsp[0].id))) {
+ g_free((yyvsp[-1].id));
+ g_free((yyvsp[0].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ g_free((yyvsp[-1].id));
+ }
+ break;
+
+ case 149:
+#line 1793 "parse.y"
+ {
+ g_free(onerror); onerror = NULL;
+ g_free(defreturn); defreturn = NULL;
+ if(!set_return_value((yyvsp[-3].id), (yyvsp[-2].id))) {
+ g_free((yyvsp[-3].id)); g_free((yyvsp[-2].id));
+ g_free((yyvsp[-1].id)); g_free((yyvsp[0].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ if(!set_return_value((yyvsp[-1].id), (yyvsp[0].id))) {
+ onerror = defreturn = NULL;
+ g_free((yyvsp[-3].id)); g_free((yyvsp[-2].id));
+ g_free((yyvsp[-1].id)); g_free((yyvsp[0].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ g_free((yyvsp[-3].id));
+ g_free((yyvsp[-1].id));
+ }
+ break;
+
+ case 150:
+#line 1812 "parse.y"
+ {
+ g_free(onerror); onerror = NULL;
+ g_free(defreturn); defreturn = NULL;
+ }
+ break;
+
+ case 151:
+#line 1818 "parse.y"
+ { (yyval.id) = (yyvsp[0].id); }
+ break;
+
+ case 152:
+#line 1819 "parse.y"
+ {
+ (yyval.id) = ((yyvsp[0].cbuf))->str;
+ g_string_free((yyvsp[0].cbuf), FALSE);
+ }
+ break;
+
+ case 153:
+#line 1825 "parse.y"
+ { vararg = FALSE; has_self = FALSE; }
+ break;
+
+ case 154:
+#line 1826 "parse.y"
+ {
+ vararg = FALSE;
+ has_self = TRUE;
+ if(strcmp((yyvsp[0].id),"self")==0)
+ push_self((yyvsp[0].id), FALSE);
+ else {
+ g_free((yyvsp[0].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 155:
+#line 1837 "parse.y"
+ {
+ vararg = FALSE;
+ has_self = TRUE;
+ if(strcmp((yyvsp[-1].id),"self")==0)
+ push_self((yyvsp[-1].id), TRUE);
+ else {
+ g_free((yyvsp[-1].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 156:
+#line 1848 "parse.y"
+ {
+ vararg = FALSE;
+ has_self = TRUE;
+ if(strcmp((yyvsp[0].id),"self")==0)
+ push_self((yyvsp[0].id), TRUE);
+ else {
+ g_free((yyvsp[0].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 157:
+#line 1859 "parse.y"
+ {
+ has_self = TRUE;
+ if(strcmp((yyvsp[-2].id),"self")==0)
+ push_self((yyvsp[-2].id), FALSE);
+ else {
+ g_free((yyvsp[-2].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 158:
+#line 1869 "parse.y"
+ {
+ has_self = TRUE;
+ if(strcmp((yyvsp[-3].id),"self")==0)
+ push_self((yyvsp[-3].id), TRUE);
+ else {
+ g_free((yyvsp[-3].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 159:
+#line 1879 "parse.y"
+ {
+ has_self = TRUE;
+ if(strcmp((yyvsp[-2].id),"self")==0)
+ push_self((yyvsp[-2].id), TRUE);
+ else {
+ g_free((yyvsp[-2].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 160:
+#line 1889 "parse.y"
+ { has_self = FALSE; }
+ break;
+
+ case 161:
+#line 1892 "parse.y"
+ { vararg = TRUE; }
+ break;
+
+ case 162:
+#line 1893 "parse.y"
+ { vararg = FALSE; }
+ break;
+
+ case 163:
+#line 1896 "parse.y"
+ { ; }
+ break;
+
+ case 164:
+#line 1897 "parse.y"
+ { ; }
+ break;
+
+ case 165:
+#line 1900 "parse.y"
+ {
+ push_funcarg((yyvsp[0].id),NULL);
+ }
+ break;
+
+ case 166:
+#line 1903 "parse.y"
+ {
+ push_funcarg((yyvsp[-1].id),(yyvsp[0].id));
+ }
+ break;
+
+ case 167:
+#line 1906 "parse.y"
+ {
+ if(strcmp((yyvsp[-2].id),"check")!=0) {
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ g_free((yyvsp[-2].id));
+ push_funcarg((yyvsp[-4].id),NULL);
+ }
+ break;
+
+ case 168:
+#line 1914 "parse.y"
+ {
+ if(strcmp((yyvsp[-2].id),"check")!=0) {
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ g_free((yyvsp[-2].id));
+ push_funcarg((yyvsp[-5].id),(yyvsp[-4].id));
+ }
+ break;
+
+ case 169:
+#line 1924 "parse.y"
+ { ; }
+ break;
+
+ case 170:
+#line 1925 "parse.y"
+ { ; }
+ break;
+
+ case 171:
+#line 1928 "parse.y"
+ {
+ if(strcmp((yyvsp[0].id),"type")==0) {
+ Node *node = node_new (CHECK_NODE,
+ "chtype", TYPE_CHECK,
+ NULL);
+ checks = g_list_append(checks,node);
+ } else if(strcmp((yyvsp[0].id),"null")==0) {
+ Node *node = node_new (CHECK_NODE,
+ "chtype", NULL_CHECK,
+ NULL);
+ checks = g_list_append(checks,node);
+ } else {
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ g_free((yyvsp[0].id));
+ }
+ break;
+
+ case 172:
+#line 1945 "parse.y"
+ {
+ Node *node = node_new (CHECK_NODE,
+ "chtype", GT_CHECK,
+ "number:steal", (yyvsp[0].id),
+ NULL);
+ checks = g_list_append(checks,node);
+ }
+ break;
+
+ case 173:
+#line 1952 "parse.y"
+ {
+ Node *node = node_new (CHECK_NODE,
+ "chtype", LT_CHECK,
+ "number:steal", (yyvsp[0].id),
+ NULL);
+ checks = g_list_append(checks,node);
+ }
+ break;
+
+ case 174:
+#line 1959 "parse.y"
+ {
+ Node *node = node_new (CHECK_NODE,
+ "chtype", GE_CHECK,
+ "number:steal", (yyvsp[0].id),
+ NULL);
+ checks = g_list_append(checks,node);
+ }
+ break;
+
+ case 175:
+#line 1966 "parse.y"
+ {
+ Node *node = node_new (CHECK_NODE,
+ "chtype", LE_CHECK,
+ "number:steal", (yyvsp[0].id),
+ NULL);
+ checks = g_list_append(checks,node);
+ }
+ break;
+
+ case 176:
+#line 1973 "parse.y"
+ {
+ Node *node = node_new (CHECK_NODE,
+ "chtype", EQ_CHECK,
+ "number:steal", (yyvsp[0].id),
+ NULL);
+ checks = g_list_append(checks,node);
+ }
+ break;
+
+ case 177:
+#line 1980 "parse.y"
+ {
+ Node *node = node_new (CHECK_NODE,
+ "chtype", NE_CHECK,
+ "number:steal", (yyvsp[0].id),
+ NULL);
+ checks = g_list_append(checks,node);
+ }
+ break;
+
+ case 178:
+#line 1989 "parse.y"
+ {
+ Node *node = node_new (ENUMDEF_NODE,
+ "etype:steal", (yyvsp[-1].id),
+ "prefix:steal", (yyvsp[-5].id),
+ "values:steal", enum_vals,
+ NULL);
+ enum_vals = NULL;
+ nodes = g_list_append (nodes, node);
+ }
+ break;
+
+ case 179:
+#line 1998 "parse.y"
+ {
+ Node *node = node_new (ENUMDEF_NODE,
+ "etype:steal", (yyvsp[-1].id),
+ "prefix:steal", (yyvsp[-6].id),
+ "values:steal", enum_vals,
+ NULL);
+ enum_vals = NULL;
+ nodes = g_list_append (nodes, node);
+ }
+ break;
+
+ case 180:
+#line 2009 "parse.y"
+ {;}
+ break;
+
+ case 181:
+#line 2010 "parse.y"
+ {;}
+ break;
+
+ case 182:
+#line 2013 "parse.y"
+ {
+ Node *node;
+ char *num = (yyvsp[0].id);
+
+ /* A float value, that's a bad enum */
+ if (num[0] >= '0' &&
+ num[0] <= '9' &&
+ strchr (num, '.') != NULL) {
+ g_free ((yyvsp[-2].id));
+ g_free (num);
+ yyerror(_("parse error (enumerator value not integer constant)"));
+ YYERROR;
+ }
+
+ node = node_new (ENUMVALUE_NODE,
+ "name:steal", (yyvsp[-2].id),
+ "value:steal", num,
+ NULL);
+ enum_vals = g_list_append (enum_vals, node);
+ }
+ break;
+
+ case 183:
+#line 2033 "parse.y"
+ {
+ Node *node;
+
+ node = node_new (ENUMVALUE_NODE,
+ "name:steal", (yyvsp[0].id),
+ NULL);
+ enum_vals = g_list_append (enum_vals, node);
+ }
+ break;
+
+ case 184:
+#line 2043 "parse.y"
+ {
+ Node *node = node_new (FLAGS_NODE,
+ "ftype:steal", (yyvsp[-1].id),
+ "prefix:steal", (yyvsp[-5].id),
+ "values:steal", flag_vals,
+ NULL);
+ flag_vals = NULL;
+ nodes = g_list_append (nodes, node);
+ }
+ break;
+
+ case 185:
+#line 2052 "parse.y"
+ {
+ Node *node = node_new (FLAGS_NODE,
+ "ftype:steal", (yyvsp[-1].id),
+ "prefix:steal", (yyvsp[-6].id),
+ "values:steal", flag_vals,
+ NULL);
+ flag_vals = NULL;
+ nodes = g_list_append (nodes, node);
+ }
+ break;
+
+ case 186:
+#line 2063 "parse.y"
+ {
+ flag_vals = g_list_append (flag_vals, (yyvsp[0].id));
+ }
+ break;
+
+ case 187:
+#line 2066 "parse.y"
+ {
+ flag_vals = g_list_append (flag_vals, (yyvsp[0].id));
+ }
+ break;
+
+ case 188:
+#line 2071 "parse.y"
+ {
+ Node *node = node_new (ERROR_NODE,
+ "etype:steal", (yyvsp[-1].id),
+ "prefix:steal", (yyvsp[-5].id),
+ "values:steal", error_vals,
+ NULL);
+ error_vals = NULL;
+ nodes = g_list_append (nodes, node);
+ }
+ break;
+
+ case 189:
+#line 2080 "parse.y"
+ {
+ Node *node = node_new (ERROR_NODE,
+ "etype:steal", (yyvsp[-1].id),
+ "prefix:steal", (yyvsp[-6].id),
+ "values:steal", error_vals,
+ NULL);
+ error_vals = NULL;
+ nodes = g_list_append (nodes, node);
+ }
+ break;
+
+ case 190:
+#line 2091 "parse.y"
+ {
+ error_vals = g_list_append (error_vals, (yyvsp[0].id));
+ }
+ break;
+
+ case 191:
+#line 2094 "parse.y"
+ {
+ error_vals = g_list_append (error_vals, (yyvsp[0].id));
+ }
+ break;
+
+ case 192:
+#line 2100 "parse.y"
+ { (yyval.id) = (yyvsp[0].id); }
+ break;
+
+ case 193:
+#line 2101 "parse.y"
+ {
+ (yyval.id) = g_strconcat("-",(yyvsp[0].id),NULL);
+ g_free((yyvsp[0].id));
+ }
+ break;
+
+ case 194:
+#line 2105 "parse.y"
+ { (yyval.id) = (yyvsp[0].id); }
+ break;
+
+ case 195:
+#line 2106 "parse.y"
+ { (yyval.id) = (yyvsp[0].id); }
+ break;
+
+
+ }
+
+/* Line 1037 of yacc.c. */
+#line 4252 "y.tab.c"
+\f
+ yyvsp -= yylen;
+ yyssp -= yylen;
+
+
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */