📄 parser.c
字号:
IDL_IDENT (yyvsp[-5].tree).str); module = NULL; } if (__IDL_flags & IDLF_COMBINE_REOPENED_MODULES) { if (IDL_NODE_UP (yyvsp[-5].tree) == NULL) module = IDL_module_new (yyvsp[-5].tree, yyvsp[-2].tree); else { module = IDL_NODE_UP (yyvsp[-5].tree); IDL_MODULE (module).definition_list = IDL_list_concat (IDL_MODULE (module).definition_list, yyvsp[-2].tree); module = NULL; } } else module = IDL_module_new (yyvsp[-5].tree, yyvsp[-2].tree); yyval.tree = module; if (yyval.tree) assign_declspec (yyval.tree, yyvsp[-6].declspec);; break;}case 25:#line 390 "./parser.y"{ yyerror ("Interfaces cannot be named `Object'"); YYABORT;; break;}case 26:#line 394 "./parser.y"{ yyerror ("Interfaces cannot be named `TypeCode'"); YYABORT;; break;}case 27:#line 403 "./parser.y"{ assert (yyvsp[0].tree != NULL); assert (IDL_NODE_TYPE (yyvsp[0].tree) == IDLN_IDENT); assert (IDL_IDENT_TO_NS (yyvsp[0].tree) != NULL); assert (IDL_NODE_TYPE (IDL_IDENT_TO_NS (yyvsp[0].tree)) == IDLN_GENTREE); if (IDL_NODE_UP (yyvsp[0].tree) != NULL && IDL_NODE_TYPE (IDL_NODE_UP (yyvsp[0].tree)) != IDLN_INTERFACE && IDL_NODE_TYPE (IDL_NODE_UP (yyvsp[0].tree)) != IDLN_FORWARD_DCL) { yyerrorl ("Interface definition conflicts", __IDL_prev_token_line - __IDL_cur_token_line); do_token_error (IDL_NODE_UP (yyvsp[0].tree), "with", FALSE); YYABORT; } else if (IDL_NODE_UP (yyvsp[0].tree) != NULL && IDL_NODE_TYPE (IDL_NODE_UP (yyvsp[0].tree)) != IDLN_FORWARD_DCL) { yyerrorv ("Cannot redeclare interface `%s'", IDL_IDENT (yyvsp[0].tree).str); IDL_tree_error (yyvsp[0].tree, "Previous declaration of interface `%s'", IDL_IDENT (yyvsp[0].tree).str); YYABORT; } else if (IDL_NODE_UP (yyvsp[0].tree) != NULL && IDL_NODE_TYPE (IDL_NODE_UP (yyvsp[0].tree)) == IDLN_FORWARD_DCL) __IDL_assign_this_location (yyvsp[0].tree, __IDL_cur_filename, __IDL_cur_line);; break;}case 28:#line 426 "./parser.y"{ IDL_GENTREE (IDL_IDENT_TO_NS (yyvsp[-3].tree))._import = yyvsp[0].tree; IDL_ns_push_scope (__IDL_root_ns, IDL_IDENT_TO_NS (yyvsp[-3].tree)); if (IDL_ns_check_for_ambiguous_inheritance (yyvsp[-3].tree, yyvsp[0].tree)) __IDL_is_okay = FALSE;; break;}case 29:#line 433 "./parser.y"{ yyval.tree = IDL_interface_new (yyvsp[-8].tree, yyvsp[-5].tree, yyvsp[-2].tree); assign_declspec (yyval.tree, yyvsp[-11].declspec); assign_props (IDL_INTERFACE (yyval.tree).ident, yyvsp[-10].hash_table);; break;}case 30:#line 442 "./parser.y"{ if (yyvsp[-3].hash_table) yywarningv (IDL_WARNING1, "Ignoring properties for forward declaration `%s'", IDL_IDENT (yyvsp[-1].tree).str); yyval.tree = IDL_forward_dcl_new (yyvsp[-1].tree); assign_declspec (yyval.tree, yyvsp[-4].declspec);; break;}case 31:#line 451 "./parser.y"{ yyval.tree = NULL; ; break;}case 32:#line 452 "./parser.y"{ GHashTable *table = g_hash_table_new (g_direct_hash, g_direct_equal); gboolean die = FALSE; IDL_tree p = yyvsp[0].tree; assert (IDL_NODE_TYPE (p) == IDLN_LIST); for (; p != NULL && !die; p = IDL_LIST (p).next) { assert (IDL_LIST (p).data != NULL); assert (IDL_NODE_TYPE (IDL_LIST (p).data) == IDLN_IDENT); if (g_hash_table_lookup_extended (table, IDL_LIST (p).data, NULL, NULL)) { char *s = IDL_ns_ident_to_qstring (IDL_LIST (p).data, "::", 0); yyerrorv ("Cannot inherit from interface `%s' more than once", s); g_free (s); die = TRUE; break; } else g_hash_table_insert (table, IDL_LIST (p).data, NULL); if (IDL_NODE_TYPE (IDL_NODE_UP (IDL_LIST (p).data)) == IDLN_FORWARD_DCL) { char *s = IDL_ns_ident_to_qstring (IDL_LIST (p).data, "::", 0); yyerrorv ("Incomplete definition of interface `%s'", s); IDL_tree_error (IDL_LIST (p).data, "Previous forward declaration of `%s'", s); g_free (s); die = TRUE; } else if (IDL_NODE_TYPE (IDL_NODE_UP (IDL_LIST (p).data)) != IDLN_INTERFACE) { char *s = IDL_ns_ident_to_qstring (IDL_LIST (p).data, "::", 0); yyerrorv ("`%s' is not an interface", s); IDL_tree_error (IDL_LIST (p).data, "Previous declaration of `%s'", s); g_free (s); die = TRUE; } } g_hash_table_destroy (table); if (die) YYABORT; yyval.tree = yyvsp[0].tree;; break;}case 33:#line 498 "./parser.y"{ yyval.tree = list_start (yyvsp[0].tree, TRUE); ; break;}case 34:#line 500 "./parser.y"{ yyval.tree = list_chain (yyvsp[-2].tree, yyvsp[0].tree, TRUE); ; break;}case 36:#line 506 "./parser.y"{ yyval.tree = NULL; ; break;}case 37:#line 507 "./parser.y"{ yyval.tree = zlist_chain (yyvsp[-1].tree, yyvsp[0].tree, TRUE); ; break;}case 45:#line 519 "./parser.y"{ yyval.tree = yyvsp[0].tree; assign_declspec (yyval.tree, yyvsp[-1].declspec);; break;}case 46:#line 526 "./parser.y"{ IDL_tree_node node; IDL_tree p, dcl; yyval.tree = yyvsp[0].tree; node.properties = yyvsp[-2].hash_table; for (p = IDL_TYPE_DCL (yyvsp[0].tree).dcls; p; p = IDL_LIST (p).next) { dcl = IDL_LIST (p).data; IDL_tree_properties_copy (&node, dcl); } __IDL_free_properties (node.properties);; break;}case 50:#line 542 "./parser.y"{ yyval.tree = IDL_native_new (yyvsp[0].tree); assign_props (IDL_NATIVE (yyval.tree).ident, yyvsp[-2].hash_table);; break;}case 51:#line 547 "./parser.y"{ /* Enable native type scanning */ if (__IDL_flags & IDLF_XPIDL) __IDL_flagsi |= IDLFP_NATIVE; else { yyerror ("Native syntax not enabled"); YYABORT; }; break;}case 52:#line 555 "./parser.y"{ yyval.tree = IDL_native_new (yyvsp[-3].tree); IDL_NATIVE (yyval.tree).user_type = yyvsp[0].str; assign_props (IDL_NATIVE (yyval.tree).ident, yyvsp[-5].hash_table);; break;}case 53:#line 562 "./parser.y"{ yyval.tree = IDL_type_dcl_new (yyvsp[-1].tree, yyvsp[0].tree); ; break;}case 62:#line 579 "./parser.y"{ yyerrorv ("Missing identifier in %s definition", yyvsp[0].str); YYABORT;; break;}case 64:#line 586 "./parser.y"{ yyerrorv ("Missing identifier in %s definition", yyvsp[0].str); YYABORT;; break;}case 66:#line 594 "./parser.y"{ yyval.str = "struct"; ; break;}case 67:#line 595 "./parser.y"{ g_hash_table_insert (__IDL_structunion_ht, yyvsp[-1].tree, yyvsp[-1].tree); yyval.tree = IDL_type_struct_new (yyvsp[-1].tree, NULL);; break;}case 68:#line 599 "./parser.y"{ g_hash_table_remove (__IDL_structunion_ht, yyvsp[-5].tree); yyval.tree = yyvsp[-3].tree; __IDL_assign_up_node (yyval.tree, yyvsp[-2].tree); IDL_TYPE_STRUCT (yyval.tree).member_list = yyvsp[-2].tree; assign_props (IDL_TYPE_STRUCT (yyval.tree).ident, yyvsp[-8].hash_table);; break;}case 69:#line 609 "./parser.y"{ yyval.str = "union"; ; break;}case 70:#line 612 "./parser.y"{ g_hash_table_insert (__IDL_structunion_ht, yyvsp[-5].tree, yyvsp[-5].tree); yyval.tree = IDL_type_union_new (yyvsp[-5].tree, yyvsp[-2].tree, NULL);; break;}case 71:#line 616 "./parser.y"{ g_hash_table_remove (__IDL_structunion_ht, yyvsp[-9].tree); yyval.tree = yyvsp[-3].tree; __IDL_assign_up_node (yyval.tree, yyvsp[-2].tree); IDL_TYPE_UNION (yyval.tree).switch_body = yyvsp[-2].tree; assign_props (IDL_TYPE_UNION (yyval.tree).ident, yyvsp[-12].hash_table);; break;}case 78:#line 635 "./parser.y"{ yyval.tree = list_start (yyvsp[0].tree, TRUE); ; break;}case 79:#line 636 "./parser.y"{ yyval.tree = list_chain (yyvsp[-1].tree, yyvsp[0].tree, TRUE); ; break;}case 80:#line 640 "./parser.y"{ yyval.tree = IDL_case_stmt_new (yyvsp[-2].tree, yyvsp[-1].tree); ; break;}case 81:#line 643 "./parser.y"{ char *s; yyval.tree = IDL_member_new (yyvsp[-1].tree, list_start (yyvsp[0].tree, TRUE)); if (IDL_NODE_TYPE (yyvsp[-1].tree) == IDLN_IDENT && g_hash_table_lookup (__IDL_structunion_ht, yyvsp[-1].tree)) { s = IDL_ns_ident_to_qstring (yyvsp[0].tree, "::", 0); yyerrorv ("Member `%s'", s); do_token_error (IDL_NODE_UP (yyvsp[-1].tree), "recurses", TRUE); g_free (s); }; break;}case 82:#line 657 "./parser.y"{ yyval.tree = list_start (yyvsp[0].tree, FALSE); ; break;}case 83:#line 658 "./parser.y"{ yyval.tree = list_chain (yyvsp[-1].tree, yyvsp[0].tree, FALSE); ; break;}case 84:#line 661 "./parser.y"{ yyval.tree = yyvsp[-1].tree; ; break;}case 85:#line 662 "./parser.y"{ yyval.tree = NULL; ; break;}case 86:#line 665 "./parser.y"{ yyval.tree = yyvsp[0].tree; assign_declspec (yyval.tree, yyvsp[-1].declspec);; break;}case 87:#line 672 "./parser.y"{ yyval.tree = IDL_const_dcl_new (yyvsp[-3].tree, yyvsp[-2].tree, yyvsp[0].tree); /* Should probably do some type checking here... */; break;}case 88:#line 678 "./parser.y"{ yyval.tree = yyvsp[0].tree; assign_declspec (yyval.tree, yyvsp[-1].declspec);; break;}case 89:#line 686 "./parser.y"{ yyval.tree = IDL_except_dcl_new (yyvsp[-4].tree, yyvsp[-2].tree); ; break;}case 90:#line 689 "./parser.y"{ yyval.tree = NULL; ; break;}case 91:#line 690 "./pars
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -