⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parser.c

📁 CORBA上的libIDL源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
			  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 + -