+ }
+ break;
+
+ case 48:
+/* Line 1792 of yacc.c */
+#line 970 "parse.y"
+ {
+ if (strcmp ((yyvsp[(1) - (3)].id), "destroy") == 0) {
+ g_free((yyvsp[(1) - (3)].id));
+ destructor_unref = FALSE;
+ destructor = ((yyvsp[(3) - (3)].cbuf))->str;
+ g_string_free((yyvsp[(3) - (3)].cbuf), FALSE);
+ destructor_line = ccode_line;
+ destructor_simple = FALSE;
+ } else if (strcmp ((yyvsp[(1) - (3)].id), "unref") == 0) {
+ g_free ((yyvsp[(1) - (3)].id));
+ destructor_unref = TRUE;
+ destructor = ((yyvsp[(3) - (3)].cbuf))->str;
+ g_string_free ((yyvsp[(3) - (3)].cbuf), FALSE);
+ destructor_line = ccode_line;
+ destructor_simple = FALSE;
+ } else {
+ g_free ((yyvsp[(1) - (3)].id));
+ g_string_free ((yyvsp[(3) - (3)].cbuf), TRUE);
+ yyerror (_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 49:
+/* Line 1792 of yacc.c */
+#line 994 "parse.y"
+ {
+ initializer = (yyvsp[(2) - (2)].id);
+ initializer_line = ccode_line;
+ }
+ break;
+
+ case 50:
+/* Line 1792 of yacc.c */
+#line 998 "parse.y"
+ {
+ initializer = ((yyvsp[(3) - (3)].cbuf))->str;
+ initializer_line = ccode_line;
+ g_string_free((yyvsp[(3) - (3)].cbuf), FALSE);
+ }
+ break;
+
+ case 51:
+/* Line 1792 of yacc.c */
+#line 1006 "parse.y"
+ { ; }
+ break;
+
+ case 52:
+/* Line 1792 of yacc.c */
+#line 1007 "parse.y"
+ { ; }
+ break;
+
+ case 53:
+/* Line 1792 of yacc.c */
+#line 1008 "parse.y"
+ { destructor = NULL; }
+ break;
+
+ case 54:
+/* Line 1792 of yacc.c */
+#line 1009 "parse.y"
+ { initializer = NULL; }
+ break;
+
+ case 55:
+/* Line 1792 of yacc.c */
+#line 1010 "parse.y"
+ {
+ if (strcmp ((yyvsp[(1) - (1)].id), "GladeXML") == 0) {
+ glade_widget = TRUE;
+ } else {
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 56:
+/* Line 1792 of yacc.c */
+#line 1018 "parse.y"
+ {
+ destructor = NULL;
+ initializer = NULL;
+ }
+ break;
+
+ case 57:
+/* Line 1792 of yacc.c */
+#line 1024 "parse.y"
+ {
+ push_variable((yyvsp[(3) - (5)].id), the_scope,(yyvsp[(1) - (5)].line), NULL);
+ }
+ break;
+
+ case 58:
+/* Line 1792 of yacc.c */
+#line 1027 "parse.y"
+ {
+ push_variable((yyvsp[(3) - (6)].id), the_scope, (yyvsp[(1) - (6)].line), (yyvsp[(4) - (6)].id));
+ }
+ break;
+
+ case 59:
+/* Line 1792 of yacc.c */
+#line 1032 "parse.y"
+ {
+ Node *node = NULL;
+ if(strcmp((yyvsp[(6) - (12)].id),"get")==0 &&
+ strcmp((yyvsp[(9) - (12)].id),"set")==0) {
+ Type *type = pop_type();
+ g_free ((yyvsp[(6) - (12)].id));
+ g_free ((yyvsp[(9) - (12)].id));
+ node = node_new (ARGUMENT_NODE,
+ "gtktype:steal", (yyvsp[(3) - (12)].id),
+ "atype:steal", type,
+ "flags:steal", (yyvsp[(2) - (12)].list),
+ "name:steal", (yyvsp[(4) - (12)].id),
+ "get:steal", ((yyvsp[(8) - (12)].cbuf))->str,
+ "get_line", (yyvsp[(7) - (12)].line),
+ "set:steal", ((yyvsp[(11) - (12)].cbuf))->str,
+ "set_line", (yyvsp[(10) - (12)].line),
+ "line_no", (yyvsp[(1) - (12)].line),
+ NULL);
+
+ class_nodes = g_list_append(class_nodes,node);
+
+ g_string_free ((yyvsp[(8) - (12)].cbuf), FALSE);
+ g_string_free ((yyvsp[(11) - (12)].cbuf), FALSE);
+
+ } else if(strcmp((yyvsp[(6) - (12)].id),"set")==0 &&
+ strcmp((yyvsp[(9) - (12)].id),"get")==0) {
+ Type *type = pop_type();
+ g_free ((yyvsp[(6) - (12)].id));
+ g_free ((yyvsp[(9) - (12)].id));
+ node = node_new (ARGUMENT_NODE,
+ "gtktype:steal", (yyvsp[(3) - (12)].id),
+ "atype:steal", type,
+ "flags:steal", (yyvsp[(2) - (12)].list),
+ "name:steal", (yyvsp[(4) - (12)].id),
+ "get:steal", ((yyvsp[(11) - (12)].cbuf))->str,
+ "get_line", (yyvsp[(10) - (12)].line),
+ "set:steal", ((yyvsp[(8) - (12)].cbuf))->str,
+ "set_line", (yyvsp[(7) - (12)].line),
+ "line_no", (yyvsp[(1) - (12)].line),
+ NULL);
+ g_string_free ((yyvsp[(11) - (12)].cbuf), FALSE);
+ g_string_free ((yyvsp[(8) - (12)].cbuf), FALSE);
+ class_nodes = g_list_append(class_nodes,node);
+ } else {
+ g_free ((yyvsp[(3) - (12)].id));
+ g_free ((yyvsp[(4) - (12)].id));
+ g_free ((yyvsp[(6) - (12)].id));
+ g_free ((yyvsp[(9) - (12)].id));
+ g_list_foreach ((yyvsp[(2) - (12)].list), (GFunc)g_free, NULL);
+ g_list_free ((yyvsp[(2) - (12)].list));
+ g_string_free ((yyvsp[(11) - (12)].cbuf), TRUE);
+ g_string_free ((yyvsp[(8) - (12)].cbuf), TRUE);
+ yyerror (_("parse error"));
+ YYERROR;
+ }
+
+ if ((yyvsp[(5) - (12)].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[(5) - (12)].id));
+ }
+
+ }
+ break;
+
+ case 60:
+/* Line 1792 of yacc.c */
+#line 1100 "parse.y"
+ {
+ Node *node = NULL;
+ if(strcmp((yyvsp[(6) - (9)].id), "get") == 0) {
+ Type *type = pop_type();
+ g_free ((yyvsp[(6) - (9)].id));
+ node = node_new (ARGUMENT_NODE,
+ "gtktype:steal", (yyvsp[(3) - (9)].id),
+ "atype:steal", type,
+ "flags:steal", (yyvsp[(2) - (9)].list),
+ "name:steal", (yyvsp[(4) - (9)].id),
+ "get:steal", ((yyvsp[(8) - (9)].cbuf))->str,
+ "get_line", (yyvsp[(7) - (9)].line),
+ "line_no", (yyvsp[(1) - (9)].line),
+ NULL);
+
+ g_string_free ((yyvsp[(8) - (9)].cbuf), FALSE);
+ class_nodes = g_list_append(class_nodes, node);
+ } else if(strcmp((yyvsp[(6) - (9)].id), "set") == 0) {
+ Type *type = pop_type();
+ g_free ((yyvsp[(6) - (9)].id));
+ node = node_new (ARGUMENT_NODE,
+ "gtktype:steal", (yyvsp[(3) - (9)].id),
+ "atype:steal", type,
+ "flags:steal", (yyvsp[(2) - (9)].list),
+ "name:steal", (yyvsp[(4) - (9)].id),
+ "set:steal", ((yyvsp[(8) - (9)].cbuf))->str,
+ "set_line", (yyvsp[(7) - (9)].line),
+ "line_no", (yyvsp[(1) - (9)].line),
+ NULL);
+
+ g_string_free ((yyvsp[(8) - (9)].cbuf), FALSE);
+ class_nodes = g_list_append (class_nodes, node);
+ } else {
+ g_free ((yyvsp[(6) - (9)].id));
+ g_free ((yyvsp[(3) - (9)].id));
+ g_free ((yyvsp[(4) - (9)].id));
+ g_list_foreach ((yyvsp[(2) - (9)].list), (GFunc)g_free, NULL);
+ g_list_free ((yyvsp[(2) - (9)].list));
+ g_string_free ((yyvsp[(8) - (9)].cbuf), TRUE);
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+
+ if ((yyvsp[(5) - (9)].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[(5) - (9)].id));
+ }
+ }
+ break;
+
+ case 61:
+/* Line 1792 of yacc.c */
+#line 1154 "parse.y"
+ {
+ Node *node;
+ char *get, *set = NULL;
+ Variable *var;
+ Type *type;
+ const char *root;
+
+ if(strcmp((yyvsp[(6) - (6)].id), "link")!=0 &&
+ strcmp((yyvsp[(6) - (6)].id), "stringlink")!=0 &&
+ strcmp((yyvsp[(6) - (6)].id), "objectlink")!=0) {
+ g_free((yyvsp[(6) - (6)].id));
+ g_free((yyvsp[(3) - (6)].id));
+ g_free((yyvsp[(4) - (6)].id));
+ g_list_foreach((yyvsp[(2) - (6)].list),(GFunc)g_free,NULL);
+ g_list_free((yyvsp[(2) - (6)].list));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+
+ type = pop_type();
+
+ var = find_var_or_die((yyvsp[(4) - (6)].id), (yyvsp[(1) - (6)].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[(1) - (6)].line),
+ _("Self aliases needed when autolinking to a classwide member"));
+ } else {
+ root = "self";
+ }
+
+ if(strcmp((yyvsp[(6) - (6)].id), "link")==0) {
+ set = g_strdup_printf("%s->%s = ARG;",
+ root, (yyvsp[(4) - (6)].id));
+ } else if(strcmp((yyvsp[(6) - (6)].id), "stringlink")==0) {
+ set = g_strdup_printf("g_free (%s->%s); "
+ "%s->%s = g_strdup (ARG);",
+ root, (yyvsp[(4) - (6)].id),
+ root, (yyvsp[(4) - (6)].id));
+ } else if(strcmp((yyvsp[(6) - (6)].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[(4) - (6)].id),
+ root, (yyvsp[(4) - (6)].id),
+ root, (yyvsp[(4) - (6)].id));
+ } else {
+ g_assert_not_reached();
+ }
+
+ get = g_strdup_printf("ARG = %s->%s;", root, (yyvsp[(4) - (6)].id));
+
+ g_free ((yyvsp[(6) - (6)].id));
+
+ if (type == NULL)
+ type = (Type *)node_copy ((Node *)var->vtype);
+
+ node = node_new (ARGUMENT_NODE,
+ "gtktype:steal", (yyvsp[(3) - (6)].id),
+ "atype:steal", type,
+ "flags:steal", (yyvsp[(2) - (6)].list),
+ "name:steal", (yyvsp[(4) - (6)].id),
+ "get:steal", get,
+ "get_line", (yyvsp[(1) - (6)].line),
+ "set:steal", set,
+ "set_line", (yyvsp[(1) - (6)].line),
+ "line_no", (yyvsp[(1) - (6)].line),
+ NULL);
+
+ if ((yyvsp[(5) - (6)].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[(5) - (6)].id));
+ }
+
+ class_nodes = g_list_append (class_nodes, node);
+ }
+ break;
+
+ case 62:
+/* Line 1792 of yacc.c */
+#line 1243 "parse.y"
+ {
+ if (strcmp ((yyvsp[(2) - (3)].id), "export")!=0) {
+ g_free ((yyvsp[(2) - (3)].id));
+ yyerror (_("parse error"));
+ YYERROR;
+ }
+ (yyval.id) = (yyvsp[(2) - (3)].id);
+ }
+ break;
+
+ case 63:
+/* Line 1792 of yacc.c */
+#line 1251 "parse.y"
+ {
+ (yyval.id) = NULL;
+ }
+ break;
+
+ case 64:
+/* Line 1792 of yacc.c */
+#line 1256 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "line_no", (yyvsp[(1) - (11)].line),
+ "gtktype:steal", debool ((yyvsp[(2) - (11)].id)),
+ "name:steal", (yyvsp[(3) - (11)].id),
+ NULL);
+ if (strcmp ((yyvsp[(5) - (11)].id), "get") == 0 &&
+ strcmp ((yyvsp[(8) - (11)].id), "set") == 0) {
+ node_set ((Node *)property,
+ "get:steal", ((yyvsp[(7) - (11)].cbuf))->str,
+ "get_line", (yyvsp[(6) - (11)].line),
+ "set:steal", ((yyvsp[(10) - (11)].cbuf))->str,
+ "set_line", (yyvsp[(9) - (11)].line),
+ NULL);
+ g_string_free ((yyvsp[(7) - (11)].cbuf), FALSE);
+ g_string_free ((yyvsp[(10) - (11)].cbuf), FALSE);
+ g_free ((yyvsp[(5) - (11)].id));
+ g_free ((yyvsp[(8) - (11)].id));
+ } else if (strcmp ((yyvsp[(5) - (11)].id), "set") == 0 &&
+ strcmp ((yyvsp[(8) - (11)].id), "get") == 0) {
+ node_set ((Node *)property,
+ "get:steal", ((yyvsp[(10) - (11)].cbuf))->str,
+ "get_line", (yyvsp[(9) - (11)].line),
+ "set:steal", ((yyvsp[(7) - (11)].cbuf))->str,
+ "set_line", (yyvsp[(6) - (11)].line),
+ NULL);
+ g_string_free ((yyvsp[(7) - (11)].cbuf), FALSE);
+ g_string_free ((yyvsp[(10) - (11)].cbuf), FALSE);
+ g_free ((yyvsp[(5) - (11)].id));
+ g_free ((yyvsp[(8) - (11)].id));
+ } else {
+ g_string_free ((yyvsp[(7) - (11)].cbuf), TRUE);
+ g_string_free ((yyvsp[(10) - (11)].cbuf), TRUE);
+ g_free ((yyvsp[(5) - (11)].id));
+ g_free ((yyvsp[(8) - (11)].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 65:
+/* Line 1792 of yacc.c */
+#line 1304 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "line_no", (yyvsp[(1) - (8)].line),
+ "gtktype:steal", debool ((yyvsp[(2) - (8)].id)),
+ "name:steal", (yyvsp[(3) - (8)].id),
+ NULL);
+ if (strcmp ((yyvsp[(5) - (8)].id), "get") == 0) {
+ node_set ((Node *)property,
+ "get:steal", ((yyvsp[(7) - (8)].cbuf))->str,
+ "get_line", (yyvsp[(6) - (8)].line),
+ NULL);
+ g_string_free ((yyvsp[(7) - (8)].cbuf), FALSE);
+ g_free ((yyvsp[(5) - (8)].id));
+ } else if (strcmp ((yyvsp[(5) - (8)].id), "set") == 0) {
+ node_set ((Node *)property,
+ "set:steal", ((yyvsp[(7) - (8)].cbuf))->str,
+ "set_line", (yyvsp[(6) - (8)].line),
+ NULL);
+ g_string_free ((yyvsp[(7) - (8)].cbuf), FALSE);
+ g_free ((yyvsp[(5) - (8)].id));
+ } else {
+ g_string_free ((yyvsp[(7) - (8)].cbuf), TRUE);
+ g_free ((yyvsp[(5) - (8)].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 66:
+/* Line 1792 of yacc.c */
+#line 1340 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "line_no", (yyvsp[(1) - (5)].line),
+ "gtktype:steal", debool ((yyvsp[(2) - (5)].id)),
+ "name:steal", (yyvsp[(3) - (5)].id),
+ NULL);
+ property_link_and_export ((Node *)property);
+ if (property != NULL) {
+ class_nodes = g_list_append (class_nodes,
+ property);
+ property = NULL;
+ }
+ }
+ break;
+
+ case 67:
+/* Line 1792 of yacc.c */
+#line 1356 "parse.y"
+ { ; }
+ break;
+
+ case 68:
+/* Line 1792 of yacc.c */
+#line 1357 "parse.y"
+ { ; }
+ break;
+
+ case 69:
+/* Line 1792 of yacc.c */
+#line 1360 "parse.y"
+ { ; }
+ break;
+
+ case 70:
+/* Line 1792 of yacc.c */
+#line 1361 "parse.y"
+ { ; }
+ break;
+
+ case 71:
+/* Line 1792 of yacc.c */
+#line 1364 "parse.y"
+ { (yyval.id) = (yyvsp[(1) - (1)].id); }
+ break;
+
+ case 72:
+/* Line 1792 of yacc.c */
+#line 1365 "parse.y"
+ {
+ if (strcmp ((yyvsp[(1) - (4)].id), "_") != 0) {
+ g_free ((yyvsp[(1) - (4)].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ g_free ((yyvsp[(1) - (4)].id));
+ (yyval.id) = g_strconcat ("_(", (yyvsp[(3) - (4)].id), ")", NULL);
+ g_free ((yyvsp[(3) - (4)].id));
+ }
+ break;
+
+ case 73:
+/* Line 1792 of yacc.c */
+#line 1377 "parse.y"
+ { (yyval.id) = (yyvsp[(1) - (1)].id); }
+ break;
+
+ case 74:
+/* Line 1792 of yacc.c */
+#line 1378 "parse.y"
+ { (yyval.id) = (yyvsp[(1) - (1)].id); }
+ break;
+
+ case 75:
+/* Line 1792 of yacc.c */
+#line 1381 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "canonical_name:steal", gob_str_delete_quotes((yyvsp[(3) - (3)].id)),
+ NULL);
+ }
+ break;
+
+ case 76:
+/* Line 1792 of yacc.c */
+#line 1387 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "nick:steal", (yyvsp[(3) - (3)].id),
+ NULL);
+ }
+ break;
+
+ case 77:
+/* Line 1792 of yacc.c */
+#line 1393 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "blurb:steal", (yyvsp[(3) - (3)].id),
+ NULL);
+ }
+ break;
+
+ case 78:
+/* Line 1792 of yacc.c */
+#line 1399 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "maximum:steal", (yyvsp[(3) - (3)].id),
+ NULL);
+ }
+ break;
+
+ case 79:
+/* Line 1792 of yacc.c */
+#line 1405 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "minimum:steal", (yyvsp[(3) - (3)].id),
+ NULL);
+ }
+ break;
+
+ case 80:
+/* Line 1792 of yacc.c */
+#line 1411 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "default_value:steal", (yyvsp[(3) - (3)].id),
+ NULL);
+ }
+ break;
+
+ case 81:
+/* Line 1792 of yacc.c */
+#line 1417 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "flags:steal", (yyvsp[(3) - (3)].list),
+ NULL);
+ }
+ break;
+
+ case 82:
+/* Line 1792 of yacc.c */
+#line 1423 "parse.y"
+ {
+ Type *type = pop_type ();
+ ensure_property ();
+ node_set ((Node *)property,
+ "ptype:steal", type,
+ NULL);
+ }
+ break;
+
+ case 83:
+/* Line 1792 of yacc.c */
+#line 1430 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[(3) - (3)].id),
+ NULL);
+ }
+ break;
+
+ case 84:
+/* Line 1792 of yacc.c */
+#line 1436 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[(3) - (3)].id),
+ NULL);
+ }
+ break;
+
+ case 85:
+/* Line 1792 of yacc.c */
+#line 1442 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[(3) - (3)].id),
+ NULL);
+ }
+ break;
+
+ case 86:
+/* Line 1792 of yacc.c */
+#line 1448 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[(3) - (3)].id),
+ NULL);
+ }
+ break;
+
+ case 87:
+/* Line 1792 of yacc.c */
+#line 1454 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[(3) - (3)].id),
+ NULL);
+ }
+ break;
+
+ case 88:
+/* Line 1792 of yacc.c */
+#line 1460 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[(3) - (3)].id),
+ NULL);
+ }
+ break;
+
+ case 89:
+/* Line 1792 of yacc.c */
+#line 1466 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[(3) - (3)].id),
+ NULL);
+ }
+ break;
+
+ case 90:
+/* Line 1792 of yacc.c */
+#line 1472 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[(3) - (3)].id),
+ NULL);
+ }
+ break;
+
+ case 91:
+/* Line 1792 of yacc.c */
+#line 1478 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[(3) - (3)].id),
+ NULL);
+ }
+ break;
+
+ case 92:
+/* Line 1792 of yacc.c */
+#line 1484 "parse.y"
+ {
+ ensure_property ();
+ node_set ((Node *)property,
+ "extra_gtktype:steal", (yyvsp[(3) - (3)].id),
+ NULL);
+ }
+ break;
+
+ case 93:
+/* Line 1792 of yacc.c */
+#line 1490 "parse.y"
+ {
+ ensure_property ();
+ if (strcmp ((yyvsp[(1) - (1)].id), "override") == 0) {
+ g_free((yyvsp[(1) - (1)].id));
+ node_set ((Node *)property,
+ "override", TRUE,
+ NULL);
+ } else if (strcmp ((yyvsp[(1) - (1)].id), "link") == 0) {
+ g_free((yyvsp[(1) - (1)].id));
+ node_set ((Node *)property,
+ "link", TRUE,
+ NULL);
+ } else if (strcmp ((yyvsp[(1) - (1)].id), "export") == 0) {
+ g_free((yyvsp[(1) - (1)].id));
+ node_set ((Node *)property,
+ "export", TRUE,
+ NULL);
+ } else {
+ g_free((yyvsp[(1) - (1)].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 94:
+/* Line 1792 of yacc.c */
+#line 1515 "parse.y"
+ {
+ if(strcmp((yyvsp[(3) - (5)].id),"type")!=0) {
+ g_free((yyvsp[(1) - (5)].id));
+ g_free((yyvsp[(3) - (5)].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ (yyval.id) = debool ((yyvsp[(1) - (5)].id));
+ }
+ break;
+
+ case 95:
+/* Line 1792 of yacc.c */
+#line 1524 "parse.y"
+ {
+ (yyval.id) = debool ((yyvsp[(1) - (1)].id));
+ typestack = g_list_prepend(typestack,NULL);
+ }
+ break;
+
+ case 96:
+/* Line 1792 of yacc.c */
+#line 1530 "parse.y"
+ { (yyval.list) = (yyvsp[(2) - (3)].list); }
+ break;
+
+ case 97:
+/* Line 1792 of yacc.c */
+#line 1531 "parse.y"
+ { (yyval.list) = NULL; }
+ break;
+
+ case 98:
+/* Line 1792 of yacc.c */
+#line 1534 "parse.y"
+ {
+ (yyval.list) = g_list_append((yyvsp[(3) - (3)].list),(yyvsp[(1) - (3)].id));
+ }
+ break;
+
+ case 99:
+/* Line 1792 of yacc.c */
+#line 1537 "parse.y"
+ {
+ (yyval.list) = g_list_append(NULL,(yyvsp[(1) - (1)].id));
+ }
+ break;
+
+ case 100:
+/* Line 1792 of yacc.c */
+#line 1543 "parse.y"
+ {
+ Node *node = node_new (TYPE_NODE,
+ "name:steal", (yyvsp[(1) - (2)].id),
+ "pointer:steal", (yyvsp[(2) - (2)].id),
+ NULL);
+ typestack = g_list_prepend(typestack,node);
+ }
+ break;
+
+ case 101:
+/* Line 1792 of yacc.c */
+#line 1550 "parse.y"
+ {
+ Node *node = node_new (TYPE_NODE,
+ "name:steal", (yyvsp[(1) - (1)].id),
+ NULL);
+ typestack = g_list_prepend(typestack,node);
+ }
+ break;
+
+ case 102:
+/* Line 1792 of yacc.c */
+#line 1559 "parse.y"
+ {
+ (yyval.id) = (yyvsp[(1) - (1)].id);
+ }
+ break;
+
+ case 103:
+/* Line 1792 of yacc.c */
+#line 1562 "parse.y"
+ {
+ (yyval.id) = (yyvsp[(1) - (1)].id);
+ }
+ break;
+
+ case 104:
+/* Line 1792 of yacc.c */
+#line 1565 "parse.y"
+ {
+ (yyval.id) = g_strconcat("const ", (yyvsp[(2) - (2)].id), NULL);
+ g_free((yyvsp[(2) - (2)].id));
+ }
+ break;
+
+ case 105:
+/* Line 1792 of yacc.c */
+#line 1569 "parse.y"
+ {
+ (yyval.id) = g_strconcat((yyvsp[(1) - (2)].id), " const", NULL);
+ g_free((yyvsp[(1) - (2)].id));
+ }
+ break;
+
+ case 106:
+/* Line 1792 of yacc.c */
+#line 1573 "parse.y"
+ {
+ (yyval.id) = g_strconcat((yyvsp[(1) - (2)].id), " ", (yyvsp[(2) - (2)].id), NULL);
+ g_free((yyvsp[(2) - (2)].id));
+ }
+ break;
+
+ case 107:
+/* Line 1792 of yacc.c */
+#line 1577 "parse.y"
+ {
+ (yyval.id) = g_strconcat("const ", (yyvsp[(2) - (3)].id), " ",
+ (yyvsp[(3) - (3)].id), NULL);
+ g_free((yyvsp[(3) - (3)].id));
+ }
+ break;
+
+ case 108:
+/* Line 1792 of yacc.c */
+#line 1582 "parse.y"
+ {
+ (yyval.id) = g_strconcat((yyvsp[(1) - (3)].id), " ",
+ (yyvsp[(2) - (3)].id), " const", NULL);
+ g_free((yyvsp[(2) - (3)].id));
+ }
+ break;
+
+ case 109:
+/* Line 1792 of yacc.c */
+#line 1590 "parse.y"
+ {
+ (yyval.id) = g_strconcat((yyvsp[(1) - (2)].id), " ", (yyvsp[(2) - (2)].id), NULL);
+ g_free((yyvsp[(2) - (2)].id));
+ }
+ break;
+
+ case 110:
+/* Line 1792 of yacc.c */
+#line 1594 "parse.y"
+ {
+ (yyval.id) = g_strconcat((yyvsp[(1) - (2)].id), " ", (yyvsp[(2) - (2)].id), NULL);
+ g_free((yyvsp[(1) - (2)].id));
+ g_free((yyvsp[(2) - (2)].id));
+ }
+ break;
+
+ case 111:
+/* Line 1792 of yacc.c */
+#line 1599 "parse.y"
+ {
+ (yyval.id) = g_strconcat("const ", (yyvsp[(2) - (2)].id), NULL);
+ g_free((yyvsp[(2) - (2)].id));
+ }
+ break;
+
+ case 112:
+/* Line 1792 of yacc.c */
+#line 1603 "parse.y"
+ {
+ (yyval.id) = (yyvsp[(1) - (1)].id);
+ }
+ break;
+
+ case 113:
+/* Line 1792 of yacc.c */
+#line 1606 "parse.y"
+ {
+ (yyval.id) = g_strconcat((yyvsp[(1) - (2)].id), " const", NULL);
+ g_free((yyvsp[(1) - (2)].id));
+ }
+ break;
+
+ case 114:
+/* Line 1792 of yacc.c */
+#line 1610 "parse.y"
+ {
+ (yyval.id) = g_strdup((yyvsp[(1) - (1)].id));
+ }
+ break;
+
+ case 115:
+/* Line 1792 of yacc.c */
+#line 1613 "parse.y"
+ {
+ (yyval.id) = g_strconcat((yyvsp[(1) - (2)].id), " const", NULL);
+ }
+ break;
+
+ case 116:
+/* Line 1792 of yacc.c */
+#line 1618 "parse.y"
+ { (yyval.id) = "void"; }
+ break;
+
+ case 117:
+/* Line 1792 of yacc.c */
+#line 1619 "parse.y"
+ { (yyval.id) = "char"; }
+ break;
+
+ case 118:
+/* Line 1792 of yacc.c */
+#line 1620 "parse.y"
+ { (yyval.id) = "short"; }
+ break;
+
+ case 119:
+/* Line 1792 of yacc.c */
+#line 1621 "parse.y"
+ { (yyval.id) = "int"; }
+ break;
+
+ case 120:
+/* Line 1792 of yacc.c */
+#line 1622 "parse.y"
+ { (yyval.id) = "long"; }
+ break;
+
+ case 121:
+/* Line 1792 of yacc.c */
+#line 1623 "parse.y"
+ { (yyval.id) = "float"; }
+ break;
+
+ case 122:
+/* Line 1792 of yacc.c */
+#line 1624 "parse.y"
+ { (yyval.id) = "double"; }
+ break;
+
+ case 123:
+/* Line 1792 of yacc.c */
+#line 1625 "parse.y"
+ { (yyval.id) = "signed"; }
+ break;
+
+ case 124:
+/* Line 1792 of yacc.c */
+#line 1626 "parse.y"
+ { (yyval.id) = "unsigned"; }
+ break;
+
+ case 125:
+/* Line 1792 of yacc.c */
+#line 1629 "parse.y"
+ { (yyval.id) = "struct"; }
+ break;
+
+ case 126:
+/* Line 1792 of yacc.c */
+#line 1630 "parse.y"
+ { (yyval.id) = "union"; }
+ break;
+
+ case 127:
+/* Line 1792 of yacc.c */
+#line 1631 "parse.y"
+ { (yyval.id) = "enum"; }
+ break;
+
+ case 128:
+/* Line 1792 of yacc.c */
+#line 1634 "parse.y"
+ { (yyval.id) = g_strdup("*"); }
+ break;
+
+ case 129:
+/* Line 1792 of yacc.c */
+#line 1635 "parse.y"
+ { (yyval.id) = g_strdup("* const"); }
+ break;
+
+ case 130:
+/* Line 1792 of yacc.c */
+#line 1636 "parse.y"
+ {
+ (yyval.id) = g_strconcat("*", (yyvsp[(2) - (2)].id), NULL);
+ g_free((yyvsp[(2) - (2)].id));
+ }
+ break;
+
+ case 131:
+/* Line 1792 of yacc.c */
+#line 1640 "parse.y"
+ {
+ (yyval.id) = g_strconcat("* const", (yyvsp[(3) - (3)].id), NULL);
+ g_free((yyvsp[(3) - (3)].id));
+ }
+ break;
+
+ case 132:
+/* Line 1792 of yacc.c */
+#line 1647 "parse.y"
+ {
+ if(strcmp((yyvsp[(1) - (2)].id), "first")==0)
+ (yyval.sigtype) = SIGNAL_FIRST_METHOD;
+ else if(strcmp((yyvsp[(1) - (2)].id), "last")==0)
+ (yyval.sigtype) = SIGNAL_LAST_METHOD;
+ else {
+ yyerror(_("signal must be 'first' or 'last'"));
+ g_free((yyvsp[(1) - (2)].id));
+ YYERROR;
+ }
+ g_free((yyvsp[(1) - (2)].id));
+ }
+ break;
+
+ case 133:
+/* Line 1792 of yacc.c */
+#line 1659 "parse.y"
+ {
+ (yyval.sigtype) = SIGNAL_LAST_METHOD;
+ }
+ break;
+
+ case 134:
+/* Line 1792 of yacc.c */
+#line 1665 "parse.y"
+ {
+ if(strcmp((yyvsp[(2) - (3)].id),"first")==0)
+ (yyval.sigtype) = SIGNAL_FIRST_METHOD;
+ else if(strcmp((yyvsp[(2) - (3)].id),"last")==0)
+ (yyval.sigtype) = SIGNAL_LAST_METHOD;
+ else {
+ yyerror(_("signal must be 'first' or 'last'"));
+ g_free((yyvsp[(2) - (3)].id));
+ YYERROR;
+ }
+ g_free((yyvsp[(2) - (3)].id));
+ }
+ break;
+
+ case 135:
+/* Line 1792 of yacc.c */
+#line 1677 "parse.y"
+ {
+ if(strcmp((yyvsp[(1) - (3)].id),"first")==0)
+ (yyval.sigtype) = SIGNAL_FIRST_METHOD;
+ else if(strcmp((yyvsp[(1) - (3)].id),"last")==0)
+ (yyval.sigtype) = SIGNAL_LAST_METHOD;
+ else {
+ yyerror(_("signal must be 'first' or 'last'"));
+ g_free((yyvsp[(1) - (3)].id));
+ YYERROR;
+ }
+ g_free((yyvsp[(1) - (3)].id));
+ }
+ break;
+
+ case 136:
+/* Line 1792 of yacc.c */
+#line 1689 "parse.y"
+ {
+ (yyval.sigtype) = SIGNAL_LAST_METHOD;
+ }
+ break;
+
+ case 137:
+/* Line 1792 of yacc.c */
+#line 1692 "parse.y"
+ {
+ /* the_scope was default thus public */
+ the_scope = PUBLIC_SCOPE;
+ }
+ break;
+
+ case 138:
+/* Line 1792 of yacc.c */
+#line 1698 "parse.y"
+ {
+ gtktypes = g_list_prepend(gtktypes, debool ((yyvsp[(1) - (4)].id)));
+ }
+ break;
+
+ case 139:
+/* Line 1792 of yacc.c */
+#line 1701 "parse.y"
+ {
+ gtktypes = g_list_prepend(gtktypes, debool ((yyvsp[(1) - (5)].id)));
+ signal_name=(yyvsp[(2) - (5)].id);
+ }
+ break;
+
+ case 140:
+/* Line 1792 of yacc.c */
+#line 1707 "parse.y"
+ {
+ gtktypes = g_list_append(gtktypes, debool ((yyvsp[(3) - (3)].id)));
+ }
+ break;
+
+ case 141:
+/* Line 1792 of yacc.c */
+#line 1710 "parse.y"
+ {
+ gtktypes = g_list_append(gtktypes, debool ((yyvsp[(1) - (1)].id)));
+ }
+ break;
+
+ case 142:
+/* Line 1792 of yacc.c */
+#line 1715 "parse.y"
+ { (yyval.cbuf) = (yyvsp[(2) - (2)].cbuf); }
+ break;
+
+ case 143:
+/* Line 1792 of yacc.c */
+#line 1716 "parse.y"
+ { (yyval.cbuf) = NULL; }
+ break;
+
+ case 144:
+/* Line 1792 of yacc.c */
+#line 1720 "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;
+ }
+ if (funcattrs != NULL) {
+ char *error = g_strdup_printf
+ (_("function attribute macros ('%s' in this case) may not be used with signal methods"),
+ funcattrs);
+ yyerror (error);
+ YYERROR;
+ }
+ push_function(the_scope, (yyvsp[(3) - (10)].sigtype),NULL,
+ (yyvsp[(5) - (10)].id), (yyvsp[(10) - (10)].cbuf),(yyvsp[(1) - (10)].line),
+ ccode_line, vararg, (yyvsp[(2) - (10)].list));
+ }
+ break;
+
+ case 145:
+/* Line 1792 of yacc.c */
+#line 1743 "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;
+ }
+ if (funcattrs != NULL) {
+ char *error = g_strdup_printf
+ (_("function attribute macros ('%s' in this case) may not be used with signal methods"),
+ funcattrs);
+ yyerror (error);
+ YYERROR;
+ }
+ push_function(the_scope, (yyvsp[(4) - (11)].sigtype), NULL,
+ (yyvsp[(6) - (11)].id), (yyvsp[(11) - (11)].cbuf), (yyvsp[(2) - (11)].line),
+ ccode_line, vararg, (yyvsp[(3) - (11)].list));
+ }
+ break;
+
+ case 146:
+/* Line 1792 of yacc.c */
+#line 1766 "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;
+ }
+ if (funcattrs != NULL) {
+ char *error = g_strdup_printf
+ (_("function attribute macros ('%s' in this case) may not be used with virtual methods"),
+ funcattrs);
+ yyerror (error);
+ YYERROR;
+ }
+ push_function(the_scope, VIRTUAL_METHOD, NULL, (yyvsp[(4) - (9)].id),
+ (yyvsp[(9) - (9)].cbuf), (yyvsp[(1) - (9)].line),
+ ccode_line, vararg, NULL);
+ }
+ break;
+
+ case 147:
+/* Line 1792 of yacc.c */
+#line 1789 "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;
+ }
+ if (funcattrs != NULL) {
+ char *error = g_strdup_printf
+ (_("function attribute macros ('%s' in this case) may not be used with virtual methods"),
+ funcattrs);
+ yyerror (error);
+ YYERROR;
+ }
+ push_function(the_scope, VIRTUAL_METHOD, NULL, (yyvsp[(4) - (9)].id),
+ (yyvsp[(9) - (9)].cbuf), (yyvsp[(2) - (9)].line),
+ ccode_line, vararg, NULL);
+ }
+ break;
+
+ case 148:
+/* Line 1792 of yacc.c */
+#line 1812 "parse.y"
+ {
+ if(!has_self) {
+ yyerror(_("virtual method without 'szelf' as "
+ "first parameter"));
+ free_all_global_state();
+ YYERROR;
+ }
+ if (funcattrs != NULL) {
+ char *error = g_strdup_printf
+ (_("function attribute macros ('%s' in this case) may not be used with virtual methods"),
+ funcattrs);
+ yyerror (error);
+ YYERROR;
+ }
+ push_function(PUBLIC_SCOPE, VIRTUAL_METHOD, NULL,
+ (yyvsp[(3) - (8)].id), (yyvsp[(8) - (8)].cbuf), (yyvsp[(1) - (8)].line),
+ ccode_line, vararg, NULL);
+ }
+ break;
+
+ case 149:
+/* Line 1792 of yacc.c */
+#line 1830 "parse.y"
+ {
+ if (funcattrs != NULL) {
+ char *error = g_strdup_printf
+ (_("function attribute macros ('%s' in this case) may not be used with override methods"),
+ funcattrs);
+ yyerror (error);
+ YYERROR;
+ }
+ push_function(NO_SCOPE, OVERRIDE_METHOD, (yyvsp[(3) - (11)].id),
+ (yyvsp[(6) - (11)].id), (yyvsp[(11) - (11)].cbuf),
+ (yyvsp[(1) - (11)].line), ccode_line,
+ vararg, NULL);
+ }
+ break;
+
+ case 150:
+/* Line 1792 of yacc.c */
+#line 1843 "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[(3) - (8)].id),
+ (yyvsp[(8) - (8)].cbuf), (yyvsp[(1) - (8)].line), ccode_line,
+ vararg, NULL);
+ }
+ break;
+
+ case 151:
+/* Line 1792 of yacc.c */
+#line 1853 "parse.y"
+ {
+ if(strcmp((yyvsp[(1) - (5)].id), "init")==0) {
+ push_init_arg((yyvsp[(3) - (5)].id),FALSE);
+ push_function(NO_SCOPE, INIT_METHOD, NULL,
+ (yyvsp[(1) - (5)].id), (yyvsp[(5) - (5)].cbuf), (yyvsp[(2) - (5)].line),
+ ccode_line, FALSE, NULL);
+ } else if(strcmp((yyvsp[(1) - (5)].id), "class_init")==0) {
+ push_init_arg((yyvsp[(3) - (5)].id),TRUE);
+ push_function(NO_SCOPE, CLASS_INIT_METHOD, NULL,
+ (yyvsp[(1) - (5)].id), (yyvsp[(5) - (5)].cbuf), (yyvsp[(2) - (5)].line),
+ ccode_line, FALSE, NULL);
+ } else if(strcmp((yyvsp[(1) - (5)].id), "constructor")==0) {
+ push_init_arg((yyvsp[(3) - (5)].id), FALSE);
+ push_function(NO_SCOPE, CONSTRUCTOR_METHOD, NULL,
+ (yyvsp[(1) - (5)].id), (yyvsp[(5) - (5)].cbuf), (yyvsp[(2) - (5)].line),
+ ccode_line, FALSE, NULL);
+ } else if(strcmp((yyvsp[(1) - (5)].id), "dispose")==0) {
+ push_init_arg((yyvsp[(3) - (5)].id), FALSE);
+ push_function(NO_SCOPE, DISPOSE_METHOD, NULL,
+ (yyvsp[(1) - (5)].id), (yyvsp[(5) - (5)].cbuf), (yyvsp[(2) - (5)].line),
+ ccode_line, FALSE, NULL);
+ } else if(strcmp((yyvsp[(1) - (5)].id), "finalize")==0) {
+ push_init_arg((yyvsp[(3) - (5)].id), FALSE);
+ push_function(NO_SCOPE, FINALIZE_METHOD, NULL,
+ (yyvsp[(1) - (5)].id), (yyvsp[(5) - (5)].cbuf), (yyvsp[(2) - (5)].line),
+ ccode_line, FALSE, NULL);
+
+ } else {
+ g_free((yyvsp[(1) - (5)].id));
+ g_free((yyvsp[(3) - (5)].id));
+ g_string_free((yyvsp[(5) - (5)].cbuf),TRUE);
+ yyerror(_("parse error "
+ "(untyped blocks must be init, "
+ "class_init, constructor, dispose "
+ "or finalize)"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 152:
+/* Line 1792 of yacc.c */
+#line 1893 "parse.y"
+ {
+ g_free(funcattrs); funcattrs = NULL;
+ g_free(onerror); onerror = NULL;
+ g_free(defreturn); defreturn = NULL;
+ if(!set_attr_value((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id))) {
+ g_free((yyvsp[(1) - (2)].id));
+ g_free((yyvsp[(2) - (2)].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ g_free((yyvsp[(1) - (2)].id));
+ }
+ break;
+
+ case 153:
+/* Line 1792 of yacc.c */
+#line 1905 "parse.y"
+ {
+ g_free(funcattrs); funcattrs = NULL;
+ g_free(onerror); onerror = NULL;
+ g_free(defreturn); defreturn = NULL;
+ if(!set_attr_value((yyvsp[(1) - (4)].id), (yyvsp[(2) - (4)].id))) {
+ g_free((yyvsp[(1) - (4)].id)); g_free((yyvsp[(2) - (4)].id));
+ g_free((yyvsp[(3) - (4)].id)); g_free((yyvsp[(4) - (4)].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ if(!set_attr_value((yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id))) {
+ funcattrs = onerror = defreturn = NULL;
+ g_free((yyvsp[(1) - (4)].id)); g_free((yyvsp[(2) - (4)].id));
+ g_free((yyvsp[(3) - (4)].id)); g_free((yyvsp[(4) - (4)].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ g_free((yyvsp[(1) - (4)].id));
+ g_free((yyvsp[(3) - (4)].id));
+ }
+ break;
+
+ case 154:
+/* Line 1792 of yacc.c */
+#line 1925 "parse.y"
+ {
+ g_free(funcattrs); funcattrs = NULL;
+ g_free(onerror); onerror = NULL;
+ g_free(defreturn); defreturn = NULL;
+ if(!set_attr_value((yyvsp[(1) - (6)].id), (yyvsp[(2) - (6)].id))) {
+ g_free((yyvsp[(1) - (6)].id)); g_free((yyvsp[(2) - (6)].id));
+ g_free((yyvsp[(3) - (6)].id)); g_free((yyvsp[(4) - (6)].id));
+ g_free((yyvsp[(5) - (6)].id)); g_free((yyvsp[(6) - (6)].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ if(!set_attr_value((yyvsp[(3) - (6)].id), (yyvsp[(4) - (6)].id))) {
+ funcattrs = onerror = defreturn = NULL;
+ g_free((yyvsp[(1) - (6)].id)); g_free((yyvsp[(2) - (6)].id));
+ g_free((yyvsp[(3) - (6)].id)); g_free((yyvsp[(4) - (6)].id));
+ g_free((yyvsp[(5) - (6)].id)); g_free((yyvsp[(6) - (6)].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ if(!set_attr_value((yyvsp[(5) - (6)].id), (yyvsp[(6) - (6)].id))) {
+ funcattrs = onerror = defreturn = NULL;
+ g_free((yyvsp[(1) - (6)].id)); g_free((yyvsp[(2) - (6)].id));
+ g_free((yyvsp[(3) - (6)].id)); g_free((yyvsp[(4) - (6)].id));
+ g_free((yyvsp[(5) - (6)].id)); g_free((yyvsp[(6) - (6)].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ g_free((yyvsp[(1) - (6)].id));
+ g_free((yyvsp[(3) - (6)].id));
+ g_free((yyvsp[(5) - (6)].id));
+ }
+ break;
+
+ case 155:
+/* Line 1792 of yacc.c */
+#line 1956 "parse.y"
+ {
+ g_free(funcattrs); funcattrs = NULL;
+ g_free(onerror); onerror = NULL;
+ g_free(defreturn); defreturn = NULL;
+ }
+ break;
+
+ case 156:
+/* Line 1792 of yacc.c */
+#line 1963 "parse.y"
+ { (yyval.id) = (yyvsp[(1) - (1)].id); }
+ break;
+
+ case 157:
+/* Line 1792 of yacc.c */
+#line 1964 "parse.y"
+ {
+ (yyval.id) = ((yyvsp[(2) - (2)].cbuf))->str;
+ g_string_free((yyvsp[(2) - (2)].cbuf), FALSE);
+ }
+ break;
+
+ case 158:
+/* Line 1792 of yacc.c */
+#line 1970 "parse.y"
+ { vararg = FALSE; has_self = FALSE; }
+ break;
+
+ case 159:
+/* Line 1792 of yacc.c */
+#line 1971 "parse.y"
+ {
+ vararg = FALSE;
+ has_self = TRUE;
+ if(strcmp((yyvsp[(1) - (1)].id),"self")==0)
+ push_self((yyvsp[(1) - (1)].id), FALSE);
+ else {
+ g_free((yyvsp[(1) - (1)].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 160:
+/* Line 1792 of yacc.c */
+#line 1982 "parse.y"
+ {
+ vararg = FALSE;
+ has_self = TRUE;
+ if(strcmp((yyvsp[(1) - (2)].id),"self")==0)
+ push_self((yyvsp[(1) - (2)].id), TRUE);
+ else {
+ g_free((yyvsp[(1) - (2)].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 161:
+/* Line 1792 of yacc.c */
+#line 1993 "parse.y"
+ {
+ vararg = FALSE;
+ has_self = TRUE;
+ if(strcmp((yyvsp[(2) - (2)].id),"self")==0)
+ push_self((yyvsp[(2) - (2)].id), TRUE);
+ else {
+ g_free((yyvsp[(2) - (2)].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 162:
+/* Line 1792 of yacc.c */
+#line 2004 "parse.y"
+ {
+ has_self = TRUE;
+ if(strcmp((yyvsp[(1) - (3)].id),"self")==0)
+ push_self((yyvsp[(1) - (3)].id), FALSE);
+ else {
+ g_free((yyvsp[(1) - (3)].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 163:
+/* Line 1792 of yacc.c */
+#line 2014 "parse.y"
+ {
+ has_self = TRUE;
+ if(strcmp((yyvsp[(1) - (4)].id),"self")==0)
+ push_self((yyvsp[(1) - (4)].id), TRUE);
+ else {
+ g_free((yyvsp[(1) - (4)].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 164:
+/* Line 1792 of yacc.c */
+#line 2024 "parse.y"
+ {
+ has_self = TRUE;
+ if(strcmp((yyvsp[(2) - (4)].id),"self")==0)
+ push_self((yyvsp[(2) - (4)].id), TRUE);
+ else {
+ g_free((yyvsp[(2) - (4)].id));
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ }
+ break;
+
+ case 165:
+/* Line 1792 of yacc.c */
+#line 2034 "parse.y"
+ { has_self = FALSE; }
+ break;
+
+ case 166:
+/* Line 1792 of yacc.c */
+#line 2037 "parse.y"
+ { vararg = TRUE; }
+ break;
+
+ case 167:
+/* Line 1792 of yacc.c */
+#line 2038 "parse.y"
+ { vararg = FALSE; }
+ break;
+
+ case 168:
+/* Line 1792 of yacc.c */
+#line 2041 "parse.y"
+ { ; }
+ break;
+
+ case 169:
+/* Line 1792 of yacc.c */
+#line 2042 "parse.y"
+ { ; }
+ break;
+
+ case 170:
+/* Line 1792 of yacc.c */
+#line 2045 "parse.y"
+ {
+ push_funcarg((yyvsp[(2) - (2)].id),NULL);
+ }
+ break;
+
+ case 171:
+/* Line 1792 of yacc.c */
+#line 2048 "parse.y"
+ {
+ push_funcarg((yyvsp[(2) - (3)].id),(yyvsp[(3) - (3)].id));
+ }
+ break;
+
+ case 172:
+/* Line 1792 of yacc.c */
+#line 2051 "parse.y"
+ {
+ if(strcmp((yyvsp[(4) - (6)].id),"check")!=0) {
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ g_free((yyvsp[(4) - (6)].id));
+ push_funcarg((yyvsp[(2) - (6)].id),NULL);
+ }
+ break;
+
+ case 173:
+/* Line 1792 of yacc.c */
+#line 2059 "parse.y"
+ {
+ if(strcmp((yyvsp[(5) - (7)].id),"check")!=0) {
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ g_free((yyvsp[(5) - (7)].id));
+ push_funcarg((yyvsp[(2) - (7)].id),(yyvsp[(3) - (7)].id));
+ }
+ break;
+
+ case 174:
+/* Line 1792 of yacc.c */
+#line 2069 "parse.y"
+ { ; }
+ break;
+
+ case 175:
+/* Line 1792 of yacc.c */
+#line 2070 "parse.y"
+ { ; }
+ break;
+
+ case 176:
+/* Line 1792 of yacc.c */
+#line 2073 "parse.y"
+ {
+ if(strcmp((yyvsp[(1) - (1)].id),"type")==0) {
+ Node *node = node_new (CHECK_NODE,
+ "chtype", TYPE_CHECK,
+ NULL);
+ checks = g_list_append(checks,node);
+ } else if(strcmp((yyvsp[(1) - (1)].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[(1) - (1)].id));
+ }
+ break;
+
+ case 177:
+/* Line 1792 of yacc.c */
+#line 2090 "parse.y"
+ {
+ Node *node = node_new (CHECK_NODE,
+ "chtype", GT_CHECK,
+ "number:steal", (yyvsp[(2) - (2)].id),
+ NULL);