/*
 * Automatically generated from the files:
 *	/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/producers/cpp/syntax/syntax.sid
 * and
 *	/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/producers/cpp/syntax/syntax.act
 * by:
 *	/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj/utilities/sid/sid
 */

/* BEGINNING OF HEADER */

#define __SID_SPLIT

/*
 *    		 Crown Copyright (c) 1997, 1998
 *
 *    This TenDRA(r) Computer Program is subject to Copyright
 *    owned by the United Kingdom Secretary of State for Defence
 *    acting through the Defence Evaluation and Research Agency
 *    (DERA).  It is made available to Recipients with a
 *    royalty-free licence for its use, reproduction, transfer
 *    to other parties and amendment for any purpose not excluding
 *    product development provided that any such use et cetera
 *    shall be deemed to be acceptance of the following conditions:-
 *
 *        (1) Its Recipients shall ensure that this Notice is
 *        reproduced upon any copies or amended versions of it;
 *
 *        (2) Any amended version of it shall be clearly marked to
 *        show both the nature of and the organisation responsible
 *        for the relevant amendment or amendments;
 *
 *        (3) Its onward transfer from a recipient to another
 *        party shall be deemed to be that party's acceptance of
 *        these conditions;
 *
 *        (4) DERA gives no warranty or assurance as to its
 *        quality or suitability for any purpose and DERA accepts
 *        no liability whatsoever in relation to any use to which
 *        it may be put.
 */


#include "config.h"
#include "producer.h"
#include "c_types.h"
#include "ctype_ops.h"
#include "exp_ops.h"
#include "hashid_ops.h"
#include "id_ops.h"
#include "nspace_ops.h"
#include "type_ops.h"
#include "error.h"
#include "catalog.h"
#include "option.h"
#include "access.h"
#include "allocate.h"
#include "assign.h"
#include "basetype.h"
#include "cast.h"
#include "chktype.h"
#include "class.h"
#include "constant.h"
#include "construct.h"
#include "convert.h"
#include "declare.h"
#include "derive.h"
#include "dump.h"
#include "exception.h"
#include "expression.h"
#include "function.h"
#include "hash.h"
#include "identifier.h"
#include "initialise.h"
#include "inttype.h"
#include "label.h"
#include "lex.h"
#include "literal.h"
#include "member.h"
#include "namespace.h"
#include "parse.h"
#include "pragma.h"
#include "predict.h"
#include "preproc.h"
#include "redeclare.h"
#include "rewrite.h"
#include "statement.h"
#include "symbols.h"
#include "template.h"
#include "tokdef.h"
#include "token.h"
#include "typeid.h"
#include "variable.h"


/*
 *    COMPOUND TYPE ALIASES
 *
 *    These are the aliases for the compound types used in the parser.
 */

typedef LIST (EXP) SID_LIST_EXP;
typedef LIST (TYPE) SID_LIST_TYPE;


/*
 *    FUNCTION DECLARATIONS
 *
 *    The function declarations are included at this point so that the
 *    type definitions are in scope.
 */

#include "syntax.h"


/*
 *    COMPILATION MODE
 *
 *    The output of sid is automatically generated.  Hence it is not
 *    necessarily appropriate to apply the same level of checking to this
 *    as to the rest of the program.  These pragmas describe the relaxations
 *    allowed for the sid output.
 */

#if FS_TENDRA
#pragma TenDRA begin
#pragma TenDRA const conditional allow
#pragma TenDRA unreachable code allow
#pragma TenDRA variable analysis off
#endif



void
ZR847 (void)
{
    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	DECL_SPEC ZI497;
	int ZI849;
	NAMESPACE ZI429;
	IDENTIFIER ZI825;
	IDENTIFIER ZI423;

	{
	    switch (CURRENT_TERMINAL) {
	      case lex_virtual:
		{
		    ADVANCE_LEXER;
		    {
 (ZI849) = 1; 
		    }
		    ZR1333 (&ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		}
		break;
	      case lex_private: case lex_protected: case lex_public:
		{
		    ZR832 (&ZI497);
		    ZR1332 (&ZI849);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		}
		break;
	      default:
		{
		    {
 (ZI497) = dspec_none; 
		    }
		    {
 (ZI849) = 0; 
		    }
		}
		break;
	    }
	}
	ZR432 (&ZI429);
	ZR512 (&ZI825);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    (ZI423) = check_id ((ZI429), (ZI825), 0);
    last_namespace = (ZI429);
	}
	{

    add_base_class ((ZI423), (ZI497), (ZI849));
	}
    }
    return;
  ZL1:;
    SAVE_LEXER (358);
    return;
}

void
ZR1013 (DECL_SPEC ZI693, BASE_TYPE ZI515, TYPE ZI501, ACCESS_LIST ZI674)
{
    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	TYPE ZI418;
	IDENTIFIER ZI423;
	int ZI562;
	IDENTIFIER ZI463;
	EXP ZI435;

	ZR955 (ZI501, &ZI418, &ZI423, &ZI562);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    if (type_tag ((ZI418)) == type_func_tag) {
	/* Look ahead for function definitions */
	int def = predict_func_defn ();
	if (def & !have_func_declarator) adjust_param ((ZI418));
	(ZI463) = make_func_decl ((ZI693), (ZI418), (ZI423), def);
	is_function_next = def;
    } else {
	int def = predict_obj_defn ();
	(ZI463) = make_object_decl ((ZI693), (ZI418), (ZI423), def);
	is_function_next = 0;
    }
    if (IS_id_type_alias ((ZI463))) {
	BASE_TYPE bs = DEREF_btype (id_type_alias_rep ((ZI463)));
	bs |= (ZI515);
	COPY_btype (id_type_alias_rep ((ZI463)), bs);
    }
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 0;
	}
	{

    IGNORE clear_access ((ZI463), &(ZI674));
	}
	{

    if (crt_access_list.pending) {
	IGNORE report_access ((ZI463));
    }
	}
	ZR1009 (ZI562, ZI463, &ZI435);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    int def = init_object ((ZI463), (ZI435));
    if (do_dump) dump_declare ((ZI463), &decl_loc, def);
	}
	{

    if (crt_access_list.pending) {
	IGNORE report_access ((ZI463));
    }
	}
	{

    end_declarator ((ZI463), 1);
	}
    }
    return;
  ZL1:;
    SAVE_LEXER (358);
    return;
}

void
ZR1038 (TYPE ZI418, DECL_SPEC ZI693, EXP *ZO435)
{
    EXP ZI435;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	BASE_TYPE ZI1253;
	TYPE ZI1254;
	CV_SPEC ZI1255;
	DECL_SPEC ZI1256;
	BASE_TYPE ZI515;
	TYPE ZI880;
	CV_SPEC ZI881;
	DECL_SPEC ZI914;
	DECL_SPEC ZI916;

	{

    /* Resolve declaration-specifiers from other declarators */
    (ZI0) = predict_dspec (0);
	}
	if (!ZI0)
	    goto ZL2;
	ZR911 (ZI418, &ZI1253, &ZI1254, &ZI1255, &ZI1256);
	ZR922 (&ZI418, &ZI1253, &ZI1254, &ZI1255, &ZI1256, &ZI515, &ZI880, &ZI881, &ZI914);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    /* Combine two declaration specifiers */
    DECL_SPEC d = (((ZI693) & (ZI914)) & dspec_duplicate);
    if (d) report (crt_loc, ERR_dcl_spec_dup (d));
    (ZI916) = ((ZI693) | (ZI914));
	}
	ZR1257 (&ZI418, &ZI515, &ZI880, &ZI881, &ZI916);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    (ZI435) = NULL_exp;
	}
	goto ZL0;
    }
    /*UNREACHED*/
  ZL2:;
    switch (CURRENT_TERMINAL) {
      case lex_extern:
	{
	    ZR1067 (ZI418, ZI693, &ZI435);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_export: case lex_template:
	{
	    ZR1077 (ZI418, ZI693, &ZI435);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
      case lex_statement_Hname: case lex_destructor_Hname: case lex_template_Hid:
      case lex_template_Htype: case lex_nested_Hname: case lex_full_Hname:
      case lex_nested_Hname_Hstar: case lex_full_Hname_Hstar: case lex_and_H1:
      case lex_open_Hround: case lex_semicolon: case lex_star:
      case lex_colon_Hcolon: case lex_operator:
	{
	    BASE_TYPE ZI515;
	    TYPE ZI880;
	    CV_SPEC ZI1258;

	    {
 (ZI515) = btype_none; 
	    }
	    {

    (ZI880) = NULL_type;
	    }
	    {
 (ZI1258) = cv_none; 
	    }
	    ZR1259 (&ZI418, &ZI693, &ZI515, &ZI880, &ZI1258, &ZI435);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_asm: case lex_namespace: case lex_using:
	{
	    {

    if (!IS_NULL_type ((ZI418))) report (crt_loc, ERR_temp_decl_bad ());
    UNUSED ((ZI693));
	    }
	    ZR1082 (&ZI435);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR1007 (IDENTIFIER ZI463, SID_LIST_EXP *ZO501)
{
    SID_LIST_EXP ZI501;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	EXP ZI435;
	SID_LIST_EXP ZI484;

	ZR653 (&ZI435);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    if (crt_access_list.pending) {
	IGNORE report_access ((ZI463));
    }
	}
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_comma:
		{
		    ADVANCE_LEXER;
		    ZR1007 (ZI463, &ZI484);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		}
		break;
	      default:
		{
		    {

    (ZI484) = NULL_list (EXP);
		    }
		}
		break;
	    }
	}
	{

    CONS_exp ((ZI435), (ZI484), (ZI501));
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO501 = ZI501;
}

void
ZR780 (EXP *ZO435)
{
    EXP ZI435;

    switch (CURRENT_TERMINAL) {
      case lex_reachable:
	{
	    EXP ZI497;

	    ADVANCE_LEXER;
	    {
 unreached_code = 0; 
	    }
	    ZR665 (&ZI497);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI435) = make_reach_stmt ((ZI497), 1);
	    }
	}
	break;
      case lex_unreachable:
	{
	    EXP ZI497;

	    ADVANCE_LEXER;
	    {
 unreached_code = 1; 
	    }
	    ZR665 (&ZI497);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI435) = make_reach_stmt ((ZI497), 0);
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR507 (IDENTIFIER *ZO423)
{
    IDENTIFIER ZI423;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	NAMESPACE ZI429;
	IDENTIFIER ZI464;

	switch (CURRENT_TERMINAL) {
	  case lex_full_Hname:
	    {

    ZI429 = crt_token->pp_data.ns;
	    }
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_template_Htype:
		{
		    {

    IDENTIFIER id = crt_token->pp_data.tok.id;
    PPTOKEN *args = crt_token->pp_data.tok.args;
    ZI464 = parse_type_template (id, args, 0);
    crt_templ_qualifier = 1;
    RESCAN_LEXER;
		    }
		    ADVANCE_LEXER;
		}
		break;
	      case lex_type_Hname:
		{
		    {

    ZI464 = crt_token->pp_data.id.use;
		    }
		    ADVANCE_LEXER;
		}
		break;
	      default:
		goto ZL1;
	    }
	}
	{

    crt_id_qualifier = qual_full;
    qual_namespace = (ZI429);
	}
	{

    (ZI423) = check_id ((ZI429), (ZI464), 0);
    last_namespace = (ZI429);
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO423 = ZI423;
}

void
ZR1024 (EXP ZI562, EXP *ZO435, EXP *ZO463)
{
    EXP ZI435;
    EXP ZI463;

    switch (CURRENT_TERMINAL) {
      case lex_colon:
	{
	    NAMESPACE ZI516;
	    int ZI460;

	    ADVANCE_LEXER;
	    {

    (ZI516) = ctor_begin ();
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
		  case lex_statement_Hname: case lex_template_Htype: case lex_nested_Hname:
		  case lex_full_Hname: case lex_open_Hround: case lex_colon_Hcolon:
		    {
			ZR1022 (ZI516);
			if ((CURRENT_TERMINAL) == 358) {
			    RESTORE_LEXER;
			    goto ZL1;
			}
			{
 (ZI460) = 1; 
			}
		    }
		    break;
		  default:
		    {
			{
 (ZI460) = 0; 
			}
		    }
		    break;
		}
	    }
	    {

    (ZI435) = ctor_end ((ZI516), (ZI562), (ZI460));
	    }
	    {

    (ZI463) = NULL_exp;
	    }
	}
	break;
      default:
	{
	    {

    (ZI463) = NULL_exp;
    (ZI435) = ctor_none ((ZI562), &(ZI463));
	    }
	}
	break;
      case 358:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
    *ZO463 = ZI463;
}

void
ZR1289 (EXP *ZO435)
{
    EXP ZI435;

    switch (CURRENT_TERMINAL) {
      case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
      case lex_destructor_Hname: case lex_template_Hid: case lex_template_Htype:
      case lex_operator: case lex_template:
	{
	    ZR1273 (&ZI435);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_delete: case lex_new:
	{
	    int ZI460;

	    {
 (ZI460) = 1; 
	    }
	    ZR1435 (&ZI460, &ZI435);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR476 (IDENTIFIER *ZO423)
{
    IDENTIFIER ZI423;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	IDENTIFIER ZI464;

	{
	    switch (CURRENT_TERMINAL) {
	      case lex_template_Htype:
		{
		    {

    IDENTIFIER id = crt_token->pp_data.tok.id;
    PPTOKEN *args = crt_token->pp_data.tok.args;
    ZI464 = parse_type_template (id, args, 0);
    crt_templ_qualifier = 1;
    RESCAN_LEXER;
		    }
		    ADVANCE_LEXER;
		}
		break;
	      case lex_type_Hname:
		{
		    {

    ZI464 = crt_token->pp_data.id.use;
		    }
		    ADVANCE_LEXER;
		}
		break;
	      default:
		goto ZL1;
	    }
	}
	{

    (ZI423) = (ZI464);
    crt_id_qualifier = qual_none;
    last_namespace = crt_namespace;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO423 = ZI423;
}

void
ZR765 (int ZI558, IDENTIFIER *ZO463)
{
    IDENTIFIER ZI463;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	TYPE ZI578;
	BASE_TYPE ZI879;
	TYPE ZI1602;
	CV_SPEC ZI1603;
	BASE_TYPE ZI515;
	TYPE ZI880;
	CV_SPEC ZI881;
	DECL_SPEC ZI914;
	TYPE ZI884;
	DECL_SPEC ZI916;
	TYPE ZI418;
	IDENTIFIER ZI423;
	int ZI561;

	{

    /* Resolve type-specifiers from other declarators */
    (ZI0) = predict_tspec (0);
	}
	if (!ZI0)
	    goto ZL2;
	{

    (ZI578) = NULL_type;
	}
	ZR877 (ZI578, &ZI879, &ZI1602, &ZI1603);
	ZR890 (&ZI879, &ZI1602, &ZI1603, &ZI515, &ZI880, &ZI881);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{
 (ZI914) = dspec_none; 
	}
	{

    /* Complete a declaration specifier and a type */
    (ZI916) = complete_dspec ((ZI914), (ZI515), (ZI880), (ZI881));
    (ZI884) = complete_pre_type ((ZI515), (ZI880), (ZI881), 0);
    have_type_specifier = 0;
	}
	{

    crt_templ_qualifier = 0;
	}
	ZR966 (ZI884, &ZI418, &ZI423);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    (ZI561) = no_type_defns - (ZI558);
	}
	{

    (ZI463) = make_except_decl ((ZI916), (ZI418), (ZI423), (ZI561));
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 0;
	}
	goto ZL0;
    }
    /*UNREACHED*/
  ZL2:;
    switch (CURRENT_TERMINAL) {
      case lex_ellipsis: case lex_ellipsis_Hexp:
	{
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_ellipsis:
		    {
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_ellipsis_Hexp:
		    {
			ADVANCE_LEXER;
		    }
		    break;
		  default:
		    goto ZL1;
		}
	    }
	    {

    (ZI463) = NULL_id;
	    }
	}
	break;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO463 = ZI463;
}

void
ZR822 (BASE_TYPE *ZO821)
{
    BASE_TYPE ZI821;

    switch (CURRENT_TERMINAL) {
      case lex_class:
	{
	    ADVANCE_LEXER;
	    {
 (ZI821) = btype_class; 
	    }
	}
	break;
      case lex_struct:
	{
	    ADVANCE_LEXER;
	    {
 (ZI821) = btype_struct; 
	    }
	}
	break;
      case lex_union:
	{
	    ADVANCE_LEXER;
	    {
 (ZI821) = btype_union; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO821 = ZI821;
}

void
ZR1004 (IDENTIFIER ZI463, SID_LIST_EXP *ZO501)
{
    SID_LIST_EXP ZI501;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	EXP ZI460;
	EXP ZI497;
	SID_LIST_EXP ZI484;

	ZR1003 (ZI463, &ZI460);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    MAKE_exp_location (type_void, crt_loc, (ZI460), (ZI497));
	}
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_comma:
		{
		    ADVANCE_LEXER;
		    ZR1006 (&ZI463, &ZI484);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		}
		break;
	      default:
		{
		    {

    (ZI484) = NULL_list (EXP);
		    }
		}
		break;
	    }
	}
	{

    CONS_exp ((ZI497), (ZI484), (ZI501));
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO501 = ZI501;
}

void
ZR839 (EXP *ZO1171)
{
    EXP ZI1171;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	EXP ZI562;
	EXP ZI501;

	switch (CURRENT_TERMINAL) {
	  case lex_hash_Hif:
	    {

    ZI562 = crt_token->pp_data.exp;
	    }
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	{

    EXP c = crt_hash_cond;
    crt_hash_cond = make_if_cond ((ZI562), c);
    (ZI501) = c;
	}
	{

    target_decl (lex_if, (ZI562));
	}
	ZR838 ();
	ZR1172 (ZI501, &ZI1171);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO1171 = ZI1171;
}

void
parse_tok_type (TYPE *ZO418)
{
    TYPE ZI418;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	BASE_TYPE ZI515;
	TYPE ZI501;
	CV_SPEC ZI788;
	TYPE ZI484;

	ZR878 (&ZI515, &ZI501, &ZI788);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    (ZI484) = complete_pre_type ((ZI515), (ZI501), (ZI788), 1);
    have_type_specifier = 0;
	}
	ZR960 (ZI484, &ZI418);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO418 = ZI418;
}

void
ZR1291 (EXP *ZO435)
{
    EXP ZI435;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	TYPE ZI418;
	int ZI555;
	EXP ZI497;

	{

    /* Resolve type-ids from expressions */
    (ZI0) = predict_typeid (0);
	}
	if (!ZI0)
	    goto ZL2;
	ZR552 (&ZI418, &ZI555);
	switch (CURRENT_TERMINAL) {
	  case lex_close_Hround:
	    break;
	  case 358:
	    RESTORE_LEXER;
	    goto ZL1;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZR585 (&ZI497);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    /* n is the number of type definitions in t */
    (ZI435) = make_cast_exp ((ZI418), (ZI497), (ZI555));
	}
	goto ZL0;
    }
    /*UNREACHED*/
  ZL2:;
    switch (CURRENT_TERMINAL) {
      case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
      case lex_destructor_Hname: case lex_template_Hid: case lex_template_Htype:
      case lex_nested_Hname: case lex_full_Hname: case lex_char_Hexp:
      case lex_wchar_Hexp: case lex_string_Hexp: case lex_wstring_Hexp:
      case lex_integer_Hexp: case lex_floating_Hexp: case lex_complex_Hexp:
      case lex_complex_Htype: case lex_and_H1: case lex_compl_H1:
      case lex_minus: case lex_minus_Hminus: case lex_not_H1:
      case lex_open_Hround: case lex_plus: case lex_plus_Hplus:
      case lex_star: case lex_colon_Hcolon: case lex_abs:
      case lex_char: case lex_double: case lex_float:
      case lex_int: case lex_long: case lex_short:
      case lex_signed: case lex_sizeof: case lex_unsigned:
      case lex_void: case lex_bool: case lex_const_Hcast:
      case lex_delete: case lex_dynamic_Hcast: case lex_false:
      case lex_new: case lex_operator: case lex_reinterpret_Hcast:
      case lex_static_Hcast: case lex_this: case lex_throw:
      case lex_true: case lex_typeid: case lex_wchar_Ht:
      case lex_alignof: case lex_bottom: case lex_discard:
      case lex_ellipsis_Hexp: case lex_ptrdiff_Ht: case lex_set:
      case lex_size_Ht: case lex_unused: case lex_vtable:
      case lex_inset_Hstart:
	{
	    EXP ZI497;
	    EXP ZI1283;

	    {

    IGNORE incr_value (OPT_VAL_paren_depth);
	    }
	    ZR495 (&ZI497);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI1283) = make_paren_exp ((ZI497));
    decr_value (OPT_VAL_paren_depth);
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZR1245 (ZI1283, &ZI435);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR620 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_eq:
	{
	    ADVANCE_LEXER;
	}
	break;
      case lex_not_Heq_H1:
	{
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_not_Heq_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    return;
  ZL1:;
    SAVE_LEXER (358);
    return;
}

void
ZR624 (EXP *ZO1216)
{
    EXP ZI1216;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	EXP ZI435;

	ZR621 (&ZI435);
	ZR1217 (ZI435, &ZI1216);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO1216 = ZI1216;
}

void
ZR1021 (NAMESPACE ZI516)
{
    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    SID_LIST_EXP ZI501;
	    EXP ZI435;
	    IDENTIFIER ZI423;

	    ADVANCE_LEXER;
	    ZR504 (&ZI501);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 358:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    MAKE_exp_initialiser (type_void, (ZI501), NULL_list (OFFSET), 0, 0, 0, (ZI435));
	    }
	    {

    (ZI423) = NULL_id;
    crt_id_qualifier = qual_none;
    qual_namespace = NULL_nspace;
	    }
	    {

    ctor_initialise ((ZI516), (ZI423), (ZI435));
	    }
	}
	break;
      case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
      case lex_statement_Hname: case lex_template_Htype: case lex_nested_Hname:
      case lex_full_Hname: case lex_colon_Hcolon:
	{
	    NAMESPACE ZI429;
	    IDENTIFIER ZI825;
	    IDENTIFIER ZI423;
	    QUALIFIER ZI459;
	    int ZI460;
	    SID_LIST_EXP ZI501;
	    EXP ZI435;

	    ZR432 (&ZI429);
	    ZR512 (&ZI825);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI423) = check_id ((ZI429), (ZI825), 0);
    last_namespace = (ZI429);
	    }
	    {

    (ZI459) = crt_id_qualifier;
    (ZI460) = crt_templ_qualifier;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZR504 (&ZI501);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 358:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    crt_id_qualifier = (ZI459);
    crt_templ_qualifier = (ZI460);
	    }
	    {

    MAKE_exp_initialiser (type_void, (ZI501), NULL_list (OFFSET), 0, 0, 0, (ZI435));
	    }
	    {

    ctor_initialise ((ZI516), (ZI423), (ZI435));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    return;
  ZL1:;
    SAVE_LEXER (358);
    return;
}

void
ZR648 (EXP *ZO435)
{
    EXP ZI435;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	switch (CURRENT_TERMINAL) {
	  case lex_inset_Hstart:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZR1296 (&ZI435);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR1166 (TYPE ZI1162, IDENTIFIER ZI1163, TYPE *ZO1164, IDENTIFIER *ZO1165)
{
    TYPE ZI1164;
    IDENTIFIER ZI1165;

  ZL2_1166:;
    switch (CURRENT_TERMINAL) {
      case lex_open_Hround: case lex_open_Hsquare_H1: case lex_weak:
	{
	    IDENTIFIER ZI423;
	    QUALIFIER ZI459;
	    int ZI460;
	    TYPE ZI484;
	    TYPE ZI418;

	    ZI423 = ZI1163;
	    {

    (ZI459) = crt_id_qualifier;
    (ZI460) = crt_templ_qualifier;
	    }
	    ZR957 (&ZI484);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    crt_id_qualifier = (ZI459);
    crt_templ_qualifier = (ZI460);
	    }
	    {

    (ZI418) = (IS_NULL_type ((ZI1162)) ? (ZI484): inject_pre_type ((ZI1162), (ZI484), 0));
	    }
	    ZI1162 = ZI418;
	    ZI1163 = ZI423;
	    goto ZL2_1166;
	}
	/*UNREACHED*/
      default:
	{
	    ZI1164 = ZI1162;
	    ZI1165 = ZI1163;
	}
	break;
      case 358:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO1164 = ZI1164;
    *ZO1165 = ZI1165;
}

void
ZR1294 (EXP *ZI1292, EXP *ZO435)
{
    EXP ZI435;

    switch (CURRENT_TERMINAL) {
      case lex_comma:
	{
	    SID_LIST_EXP ZI484;
	    SID_LIST_EXP ZI501;

	    ADVANCE_LEXER;
	    ZR652 (&ZI484);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    CONS_exp ((*ZI1292), (ZI484), (ZI501));
	    }
	    {

    (ZI435) = make_comma_exp ((ZI501));
	    }
	}
	break;
      default:
	{
	    ZI435 = *ZI1292;
	}
	break;
      case 358:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR587 (int *ZO454)
{
    int ZI454;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	switch (CURRENT_TERMINAL) {
	  case lex_delete:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZR1436 (&ZI454);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO454 = ZI454;
}

void
parse_type_param (IDENTIFIER *ZO463)
{
    IDENTIFIER ZI463;

    switch (CURRENT_TERMINAL) {
      case lex_template:
	{
	    int ZI435;
	    TOKEN ZI501;
	    TYPE ZI418;
	    DECL_SPEC ZI693;
	    TYPE ZI880;
	    IDENTIFIER ZI423;
	    IDENTIFIER ZI464;

	    ADVANCE_LEXER;
	    {
 (ZI435) = 0; 
	    }
	    {

    (ZI501) = template_params ((ZI435));
    RESCAN_LEXER;
	    }
	    {

    (ZI418) = NULL_type;
	    }
	    {
 (ZI693) = dspec_none; 
	    }
	    {

    (ZI880) = make_template_type ((ZI501), (ZI418));
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_class:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZR1120 (&ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI463) = make_template_param ((ZI880), (ZI423));
    UNUSED ((ZI693));
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_assign:
		    {
			IDENTIFIER ZI825;

			ADVANCE_LEXER;
			{

    in_default_arg++;
			}
			ZR488 (&ZI825);
			if ((CURRENT_TERMINAL) == 358) {
			    RESTORE_LEXER;
			    goto ZL1;
			}
			{

    (ZI464) = (ZI825);
    crt_id_qualifier = qual_none;
    last_namespace = crt_namespace;
			}
			{

    in_default_arg--;
			}
		    }
		    break;
		  default:
		    {
			{

    (ZI464) = NULL_id;
    crt_id_qualifier = qual_none;
    qual_namespace = NULL_nspace;
			}
		    }
		    break;
		}
	    }
	    {

    init_template_param ((ZI463), (ZI464));
	    }
	    {

    end_template ((ZI501));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_class: case lex_typename:
	{
	    IDENTIFIER ZI423;
	    TYPE ZI418;

	    {
		switch (CURRENT_TERMINAL) {
		  case lex_class:
		    {
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_typename:
		    {
			ADVANCE_LEXER;
		    }
		    break;
		  default:
		    goto ZL1;
		}
	    }
	    ZR1120 (&ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI463) = make_type_param ((ZI423));
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_assign:
		    {
			ADVANCE_LEXER;
			{

    in_default_arg++;
			}
			parse_tok_type (&ZI418);
			if ((CURRENT_TERMINAL) == 358) {
			    RESTORE_LEXER;
			    goto ZL1;
			}
			{

    in_default_arg--;
			}
			{

    object_type ((ZI418), null_tag);
			}
		    }
		    break;
		  default:
		    {
			{

    (ZI418) = NULL_type;
			}
		    }
		    break;
		}
	    }
	    {

    init_type_param ((ZI463), (ZI418));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    {
	{

    /* Syntax errors */
    ERROR err = ERR_lex_parse (crt_token);
    report (crt_loc, err);
    have_syntax_error = 1;
	}
	{

    (ZI463) = NULL_id;
	}
    }
  ZL0:;
    *ZO463 = ZI463;
}

void
ZR1295 (EXP *ZI497, SID_LIST_EXP *ZO501)
{
    SID_LIST_EXP ZI501;

    switch (CURRENT_TERMINAL) {
      case lex_comma:
	{
	    SID_LIST_EXP ZI484;

	    ADVANCE_LEXER;
	    ZR652 (&ZI484);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    CONS_exp ((*ZI497), (ZI484), (ZI501));
	    }
	}
	break;
      default:
	{
	    SID_LIST_EXP ZI484;

	    {

    (ZI484) = NULL_list (EXP);
	    }
	    {

    CONS_exp ((*ZI497), (ZI484), (ZI501));
	    }
	}
	break;
      case 358:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO501 = ZI501;
}

void
ZR837 (TYPE ZI418, DECL_SPEC ZI693)
{
    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
  ZL2_837:;
    {
	BASE_TYPE ZI1340;
	TYPE ZI1341;
	CV_SPEC ZI1342;
	DECL_SPEC ZI1343;
	BASE_TYPE ZI515;
	TYPE ZI880;
	CV_SPEC ZI881;
	DECL_SPEC ZI914;
	DECL_SPEC ZI916;

	{

    /* Resolve declaration-specifiers from other declarators */
    (ZI0) = predict_dspec (0);
	}
	if (!ZI0)
	    goto ZL3;
	ZR911 (ZI418, &ZI1340, &ZI1341, &ZI1342, &ZI1343);
	ZR922 (&ZI418, &ZI1340, &ZI1341, &ZI1342, &ZI1343, &ZI515, &ZI880, &ZI881, &ZI914);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    /* Combine two declaration specifiers */
    DECL_SPEC d = (((ZI693) & (ZI914)) & dspec_duplicate);
    if (d) report (crt_loc, ERR_dcl_spec_dup (d));
    (ZI916) = ((ZI693) | (ZI914));
	}
	ZR1344 (&ZI418, &ZI515, &ZI880, &ZI881, &ZI916);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	} else {
	    goto ZL2_837;
	}
    }
    /*UNREACHED*/
  ZL3:;
    switch (CURRENT_TERMINAL) {
      case lex_private: case lex_protected: case lex_public:
	{
	    DECL_SPEC ZI460;

	    ZR832 (&ZI460);
	    switch (CURRENT_TERMINAL) {
	      case lex_colon:
		break;
	      case 358:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {
 crt_access = (ZI460); 
	    }
	    goto ZL2_837;
	}
	/*UNREACHED*/
      case lex_export: case lex_template:
	{
	    ZR1094 (ZI418, ZI693);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    } else {
		goto ZL2_837;
	    }
	}
	/*UNREACHED*/
      case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
      case lex_statement_Hname: case lex_destructor_Hname: case lex_template_Hid:
      case lex_template_Htype: case lex_nested_Hname: case lex_full_Hname:
      case lex_nested_Hname_Hstar: case lex_full_Hname_Hstar: case lex_and_H1:
      case lex_colon: case lex_open_Hround: case lex_star:
      case lex_colon_Hcolon: case lex_operator:
	{
	    BASE_TYPE ZI515;
	    TYPE ZI880;
	    CV_SPEC ZI881;
	    DECL_SPEC ZI914;
	    DECL_SPEC ZI916;
	    TYPE ZI884;
	    DECL_SPEC ZI1078;
	    TYPE ZI1079;
	    ACCESS_LIST ZI674;
	    int ZI724;
	    IDENTIFIER ZI463;

	    {
 (ZI515) = btype_none; 
	    }
	    {

    (ZI880) = NULL_type;
	    }
	    {
 (ZI881) = cv_none; 
	    }
	    {
 (ZI914) = dspec_none; 
	    }
	    {

    /* Combine two declaration specifiers */
    DECL_SPEC d = (((ZI693) & (ZI914)) & dspec_duplicate);
    if (d) report (crt_loc, ERR_dcl_spec_dup (d));
    (ZI916) = ((ZI693) | (ZI914));
	    }
	    {

    /* Complete a declaration specifier and a type */
    (ZI1078) = complete_dspec ((ZI916), (ZI515), (ZI880), (ZI881));
    (ZI884) = complete_pre_type ((ZI515), (ZI880), (ZI881), 0);
    have_type_specifier = 0;
	    }
	    {

    (ZI1079) = (IS_NULL_type ((ZI418)) ? (ZI884): inject_pre_type ((ZI418), (ZI884), 1));
	    }
	    {

    save_access (&(ZI674));
	    }
	    {
 (ZI724) = 1; 
	    }
	    {

    crt_templ_qualifier = 0;
	    }
	    ZR1089 (ZI1078, ZI1079, ZI515, ZI674, ZI724, &ZI463);
	    ZR1097 (&ZI515, &ZI1078, &ZI1079, &ZI674, &ZI463);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    } else {
		goto ZL2_837;
	    }
	}
	/*UNREACHED*/
      case lex_hash_Hif: case lex_using:
	{
	    {

    if (!IS_NULL_type ((ZI418))) report (crt_loc, ERR_temp_decl_bad ());
    UNUSED ((ZI693));
	    }
	    ZR1345 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    } else {
		goto ZL2_837;
	    }
	}
	/*UNREACHED*/
      case lex_semicolon:
	{
	    TYPE ZI880;
	    BASE_TYPE ZI515;
	    CV_SPEC ZI881;

	    {

    (ZI880) = NULL_type;
	    }
	    {
 (ZI515) = btype_none; 
	    }
	    {
 (ZI881) = cv_none; 
	    }
	    {

    IGNORE empty_decl ((ZI693), (ZI418), (ZI515), (ZI880), (ZI881), last_lex_token, 1);
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 0;
    have_type_specifier = 0;
	    }
	    ADVANCE_LEXER;
	    goto ZL2_837;
	}
	/*UNREACHED*/
      default:
	break;
    }
    return;
  ZL1:;
    SAVE_LEXER (358);
    return;
}

void
ZR1296 (EXP *ZO435)
{
    EXP ZI435;

    switch (CURRENT_TERMINAL) {
      case lex_set:
	{
	    EXP ZI497;

	    ADVANCE_LEXER;
	    ZR495 (&ZI497);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI435) = make_set_exp ((ZI497));
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_inset_Hend:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case lex_unused:
	{
	    EXP ZI497;

	    ADVANCE_LEXER;
	    ZR495 (&ZI497);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI435) = make_unused_exp ((ZI497));
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_inset_Hend:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR417 (void)
{
    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	switch (CURRENT_TERMINAL) {
	  case lex_close_Hround:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
    }
    return;
  ZL1:;
    {
	int ZI418;

	{
 (ZI418) = lex_close_Hround; 
	}
	{

    /* Expected symbol */
    int p = primary_form (crt_lex_token);
    if (p != (ZI418)) report (crt_loc, ERR_lex_expect ((ZI418)));
	}
    }
}

void
ZR557 (int ZI454, EXP *ZO435)
{
    EXP ZI435;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	int ZI558;
	int ZI559;
	EXP ZI562;

	{

    suppress_usage++;
	}
	{

    (ZI558) = no_side_effects;
	}
	{

    (ZI559) = no_type_defns;
	}
	switch (CURRENT_TERMINAL) {
	  case lex_open_Hround:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	{
	    {
		TYPE ZI418;
		int ZI563;

		{

    /* Resolve type-ids from expressions */
    (ZI0) = predict_typeid (1);
		}
		if (!ZI0)
		    goto ZL3;
		ZR552 (&ZI418, &ZI563);
		switch (CURRENT_TERMINAL) {
		  case lex_close_Hround:
		    break;
		  case 358:
		    RESTORE_LEXER;
		    goto ZL1;
		  default:
		    goto ZL1;
		}
		ADVANCE_LEXER;
		{

    (ZI562) = make_typeid_type ((ZI454), (ZI418), (ZI563));
		}
		goto ZL2;
	    }
	    /*UNREACHED*/
	  ZL3:;
	    switch (CURRENT_TERMINAL) {
	      case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
	      case lex_destructor_Hname: case lex_template_Hid: case lex_template_Htype:
	      case lex_nested_Hname: case lex_full_Hname: case lex_char_Hexp:
	      case lex_wchar_Hexp: case lex_string_Hexp: case lex_wstring_Hexp:
	      case lex_integer_Hexp: case lex_floating_Hexp: case lex_complex_Hexp:
	      case lex_complex_Htype: case lex_and_H1: case lex_compl_H1:
	      case lex_minus: case lex_minus_Hminus: case lex_not_H1:
	      case lex_open_Hround: case lex_plus: case lex_plus_Hplus:
	      case lex_star: case lex_colon_Hcolon: case lex_abs:
	      case lex_char: case lex_double: case lex_float:
	      case lex_int: case lex_long: case lex_short:
	      case lex_signed: case lex_sizeof: case lex_unsigned:
	      case lex_void: case lex_bool: case lex_const_Hcast:
	      case lex_delete: case lex_dynamic_Hcast: case lex_false:
	      case lex_new: case lex_operator: case lex_reinterpret_Hcast:
	      case lex_static_Hcast: case lex_this: case lex_throw:
	      case lex_true: case lex_typeid: case lex_wchar_Ht:
	      case lex_alignof: case lex_bottom: case lex_discard:
	      case lex_ellipsis_Hexp: case lex_ptrdiff_Ht: case lex_set:
	      case lex_size_Ht: case lex_unused: case lex_vtable:
	      case lex_inset_Hstart:
		{
		    EXP ZI497;
		    int ZI561;

		    ZR495 (&ZI497);
		    switch (CURRENT_TERMINAL) {
		      case lex_close_Hround:
			break;
		      case 358:
			RESTORE_LEXER;
			goto ZL1;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI562) = make_typeid_exp ((ZI454), (ZI497), (ZI561));
		    }
		}
		break;
	      default:
		goto ZL1;
	    }
	  ZL2:;
	}
	{

    suppress_usage--;
	}
	ZI435 = ZI562;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR597 (int ZI454, EXP *ZO435)
{
    EXP ZI435;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	int ZI558;
	int ZI559;
	EXP ZI562;

	{

    suppress_usage++;
	}
	{

    (ZI558) = no_side_effects;
	}
	{

    (ZI559) = no_type_defns;
	}
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_alignof:
		{
		    int ZI1419;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ADVANCE_LEXER;
		    {
 (ZI1419) = lex_alignof; 
		    }
		    ZR597 (ZI1419, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_colon_Hcolon:
		{
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ADVANCE_LEXER;
		    ZR1289 (&ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_complex_Hexp:
		{
		    EXP ZI1284;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    {

    IDENTIFIER id = crt_token->pp_data.tok.id;
    PPTOKEN *args = crt_token->pp_data.tok.args;
    ZI1284 = parse_exp_token (id, args);
    RESCAN_LEXER;
		    }
		    ADVANCE_LEXER;
		    ZR1245 (ZI1284, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_complex_Htype:
		{
		    TYPE ZI1270;
		    BASE_TYPE ZI515;
		    CV_SPEC ZI788;
		    TYPE ZI1433;
		    SID_LIST_EXP ZI501;
		    EXP ZI1287;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    {

    IDENTIFIER id = crt_token->pp_data.tok.id;
    PPTOKEN *args = crt_token->pp_data.tok.args;
    ZI1270 = parse_type_token (id, args);
    have_type_declaration = TYPE_DECL_NONE;
    have_type_specifier = 1;
    RESCAN_LEXER;
		    }
		    ADVANCE_LEXER;
		    {
 (ZI515) = btype_none; 
		    }
		    {
 (ZI788) = cv_none; 
		    }
		    {

    (ZI1433) = complete_pre_type ((ZI515), (ZI1270), (ZI788), 1);
    have_type_specifier = 0;
		    }
		    switch (CURRENT_TERMINAL) {
		      case lex_open_Hround:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		    ZR504 (&ZI501);
		    switch (CURRENT_TERMINAL) {
		      case lex_close_Hround:
			break;
		      case 358:
			RESTORE_LEXER;
			goto ZL1;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		    {

    (ZI1287) = make_func_cast_exp ((ZI1433), (ZI501));
		    }
		    ZR1245 (ZI1287, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_const_Hcast:
		{
		    TYPE ZI1422;
		    EXP ZI1423;
		    int ZI555;
		    EXP ZI1276;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ADVANCE_LEXER;
		    ZR556 (&ZI1422, &ZI1423, &ZI555);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    /* n is the number of type definitions in t */
    (ZI1276) = make_const_cast_exp ((ZI1422), (ZI1423), (ZI555));
		    }
		    ZR1245 (ZI1276, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_dynamic_Hcast:
		{
		    TYPE ZI1428;
		    EXP ZI1429;
		    int ZI555;
		    EXP ZI1279;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ADVANCE_LEXER;
		    ZR556 (&ZI1428, &ZI1429, &ZI555);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    /* n is the number of type definitions in t */
    (ZI1279) = make_dynamic_cast_exp ((ZI1428), (ZI1429), (ZI555));
		    }
		    ZR1245 (ZI1279, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_ellipsis_Hexp:
		{
		    EXP ZI1282;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ADVANCE_LEXER;
		    {

    (ZI1282) = make_ellipsis_exp ();
		    }
		    ZR1245 (ZI1282, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_full_Hname:
		{
		    NAMESPACE ZI429;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    {

    ZI429 = crt_token->pp_data.ns;
		    }
		    ADVANCE_LEXER;
		    ZR1272 (&ZI429, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_minus_Hminus:
		{
		    EXP ZI1412;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ADVANCE_LEXER;
		    ZR585 (&ZI1412);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI497) = make_prefix_exp (lex_minus_Hminus, (ZI1412));
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_nested_Hname:
		{
		    NAMESPACE ZI429;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    {

    ZI429 = crt_token->pp_data.ns;
		    }
		    ADVANCE_LEXER;
		    ZR1271 (&ZI429, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_open_Hround:
		{
		    ADVANCE_LEXER;
		    ZR1434 (&ZI454, &ZI558, &ZI559, &ZI562);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		}
		break;
	      case lex_plus_Hplus:
		{
		    EXP ZI1411;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ADVANCE_LEXER;
		    ZR585 (&ZI1411);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI497) = make_prefix_exp (lex_plus_Hplus, (ZI1411));
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_reinterpret_Hcast:
		{
		    TYPE ZI1424;
		    EXP ZI1425;
		    int ZI555;
		    EXP ZI1277;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ADVANCE_LEXER;
		    ZR556 (&ZI1424, &ZI1425, &ZI555);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    /* n is the number of type definitions in t */
    (ZI1277) = make_reinterp_cast_exp ((ZI1424), (ZI1425), (ZI555));
		    }
		    ZR1245 (ZI1277, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_sizeof:
		{
		    int ZI1418;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ADVANCE_LEXER;
		    {
 (ZI1418) = lex_sizeof; 
		    }
		    ZR597 (ZI1418, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_star:
		{
		    EXP ZI1413;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ADVANCE_LEXER;
		    ZR585 (&ZI1413);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI497) = make_indir_exp ((ZI1413));
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_static_Hcast:
		{
		    TYPE ZI1426;
		    EXP ZI1427;
		    int ZI555;
		    EXP ZI1278;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ADVANCE_LEXER;
		    ZR556 (&ZI1426, &ZI1427, &ZI555);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI1278) = make_static_cast_exp ((ZI1426), (ZI1427), (ZI555));
		    }
		    ZR1245 (ZI1278, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_this:
		{
		    EXP ZI1281;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ADVANCE_LEXER;
		    {

    (ZI1281) = make_this_exp ();
		    }
		    ZR1245 (ZI1281, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_typeid:
		{
		    int ZI1421;
		    EXP ZI1275;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ADVANCE_LEXER;
		    {
 (ZI1421) = lex_typeid; 
		    }
		    ZR557 (ZI1421, &ZI1275);
		    ZR1245 (ZI1275, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_vtable:
		{
		    int ZI1420;
		    EXP ZI1274;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ADVANCE_LEXER;
		    {
 (ZI1420) = lex_vtable; 
		    }
		    ZR557 (ZI1420, &ZI1274);
		    ZR1245 (ZI1274, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_and_H1:
		{
		    EXP ZI1414;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    {
			{
			    switch (CURRENT_TERMINAL) {
			      case lex_and_H1:
				break;
			      default:
				goto ZL1;
			    }
			    ADVANCE_LEXER;
			}
		    }
		    ZR585 (&ZI1414);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI497) = make_ref_exp ((ZI1414), 0);
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_char: case lex_double: case lex_float:
	      case lex_int: case lex_long: case lex_short:
	      case lex_signed: case lex_unsigned: case lex_void:
	      case lex_bool: case lex_wchar_Ht: case lex_bottom:
	      case lex_ptrdiff_Ht: case lex_size_Ht:
		{
		    BASE_TYPE ZI515;
		    TYPE ZI1270;
		    CV_SPEC ZI788;
		    TYPE ZI1431;
		    SID_LIST_EXP ZI501;
		    EXP ZI1285;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ZR513 (&ZI515);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI1270) = NULL_type;
    have_type_specifier = 1;
		    }
		    {
 (ZI788) = cv_none; 
		    }
		    {

    (ZI1431) = complete_pre_type ((ZI515), (ZI1270), (ZI788), 1);
    have_type_specifier = 0;
		    }
		    switch (CURRENT_TERMINAL) {
		      case lex_open_Hround:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		    ZR504 (&ZI501);
		    switch (CURRENT_TERMINAL) {
		      case lex_close_Hround:
			break;
		      case 358:
			RESTORE_LEXER;
			goto ZL1;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		    {

    (ZI1285) = make_func_cast_exp ((ZI1431), (ZI501));
		    }
		    ZR1245 (ZI1285, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_char_Hexp: case lex_wchar_Hexp: case lex_string_Hexp:
	      case lex_wstring_Hexp: case lex_integer_Hexp: case lex_floating_Hexp:
	      case lex_false: case lex_true:
		{
		    EXP ZI1280;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ZR441 (&ZI1280);
		    ZR1245 (ZI1280, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_not_H1:
		{
		    EXP ZI1415;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    {
			{
			    switch (CURRENT_TERMINAL) {
			      case lex_not_H1:
				break;
			      default:
				goto ZL1;
			    }
			    ADVANCE_LEXER;
			}
		    }
		    ZR585 (&ZI1415);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI497) = make_not_exp ((ZI1415));
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_identifier: case lex_namespace_Hname: case lex_destructor_Hname:
	      case lex_template_Hid: case lex_operator:
		{
		    IDENTIFIER ZI423;
		    EXP ZI1288;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ZR481 (&ZI423);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI1288) = make_id_exp ((ZI423));
		    }
		    ZR1245 (ZI1288, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_type_Hname: case lex_template_Htype:
		{
		    IDENTIFIER ZI423;
		    TYPE ZI1270;
		    BASE_TYPE ZI515;
		    CV_SPEC ZI788;
		    TYPE ZI1432;
		    SID_LIST_EXP ZI501;
		    EXP ZI1286;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    ZR476 (&ZI423);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    MAKE_type_pre (cv_none, btype_alias, crt_id_qualifier, (ZI1270));
    COPY_id (type_name ((ZI1270)), (ZI423));
    have_type_specifier = 1;
		    }
		    {
 (ZI515) = btype_none; 
		    }
		    {
 (ZI788) = cv_none; 
		    }
		    {

    (ZI1432) = complete_pre_type ((ZI515), (ZI1270), (ZI788), 1);
    have_type_specifier = 0;
		    }
		    switch (CURRENT_TERMINAL) {
		      case lex_open_Hround:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		    ZR504 (&ZI501);
		    switch (CURRENT_TERMINAL) {
		      case lex_close_Hround:
			break;
		      case 358:
			RESTORE_LEXER;
			goto ZL1;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		    {

    (ZI1286) = make_func_cast_exp ((ZI1432), (ZI501));
		    }
		    ZR1245 (ZI1286, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_delete: case lex_new:
		{
		    int ZI460;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    {
 (ZI460) = 0; 
		    }
		    ZR1435 (&ZI460, &ZI497);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      case lex_compl_H1: case lex_minus: case lex_plus:
	      case lex_abs:
		{
		    int ZI1416;
		    EXP ZI1417;
		    EXP ZI497;
		    int ZI561;
		    int ZI563;
		    TYPE ZI418;

		    {
 (ZI1416) = crt_lex_token; 
		    }
		    ZR600 ();
		    ZR585 (&ZI1417);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    (ZI497) = make_uminus_exp ((ZI1416), (ZI1417));
		    }
		    {

    (ZI561) = no_side_effects - (ZI558);
		    }
		    {

    (ZI563) = no_type_defns - (ZI559);
		    }
		    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (ZI454));
		    }
		    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (ZI454));
		    }
		}
		break;
	      default:
		goto ZL1;
	    }
	}
	{

    suppress_usage--;
	}
	ZI435 = ZI562;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR481 (IDENTIFIER *ZO423)
{
    IDENTIFIER ZI423;

    switch (CURRENT_TERMINAL) {
      case lex_destructor_Hname:
	{
	    IDENTIFIER ZI482;

	    {

    ZI482 = crt_token->pp_data.id.use;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI423) = check_id (NULL_nspace, (ZI482), 0);
    crt_id_qualifier = qual_none;
    last_namespace = crt_namespace;
	    }
	}
	break;
      case lex_identifier:
	{
	    IDENTIFIER ZI482;

	    {

    ZI482 = crt_token->pp_data.id.use;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI423) = (ZI482);
    crt_id_qualifier = qual_none;
    last_namespace = crt_namespace;
	    }
	}
	break;
      case lex_namespace_Hname:
	{
	    IDENTIFIER ZI482;

	    {

    ZI482 = crt_token->pp_data.id.use;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI423) = (ZI482);
    crt_id_qualifier = qual_none;
    last_namespace = crt_namespace;
	    }
	}
	break;
      case lex_template_Hid:
	{
	    IDENTIFIER ZI482;

	    {

    IDENTIFIER id = crt_token->pp_data.tok.id;
    PPTOKEN *args = crt_token->pp_data.tok.args;
    ZI482 = parse_id_template (id, args, 0);
    crt_templ_qualifier = 1;
    RESCAN_LEXER;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI423) = check_id (NULL_nspace, (ZI482), 0);
    crt_id_qualifier = qual_none;
    last_namespace = crt_namespace;
	    }
	}
	break;
      case lex_operator:
	{
	    IDENTIFIER ZI482;

	    parse_operator (&ZI482);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI423) = check_id (NULL_nspace, (ZI482), 0);
    crt_id_qualifier = qual_none;
    last_namespace = crt_namespace;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO423 = ZI423;
}

void
ZR1172 (EXP ZI1170, EXP *ZO1171)
{
    EXP ZI1171;

  ZL2_1172:;
    switch (CURRENT_TERMINAL) {
      case lex_hash_Helif:
	{
	    EXP ZI501;
	    EXP ZI562;

	    ZI501 = ZI1170;
	    {

    ZI562 = crt_token->pp_data.exp;
	    }
	    ADVANCE_LEXER;
	    {

    EXP c = make_else_cond (crt_hash_cond);
    crt_hash_cond = make_if_cond ((ZI562), c);
	    }
	    {

    target_decl (lex_elif, (ZI562));
	    }
	    ZR838 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    } else {
		ZI1170 = ZI501;
		goto ZL2_1172;
	    }
	}
	/*UNREACHED*/
      default:
	{
	    ZI1171 = ZI1170;
	}
	break;
      case 358:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO1171 = ZI1171;
}

void
ZR775 (EXP *ZO435)
{
    EXP ZI435;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	int ZI674;
	EXP ZI497;
	EXP ZI460;
	EXP ZI562;

	switch (CURRENT_TERMINAL) {
	  case lex_try:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	{

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	}
	{

    (ZI497) = begin_try_stmt (0);
	}
	ZR682 (&ZI460);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    (ZI562) = cont_try_stmt ((ZI497), (ZI460));
	}
	ZR774 (ZI562);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{
 unreached_prev = (ZI674); 
	}
	{

    (ZI435) = end_try_stmt ((ZI562), 0);
	}
	{

    unreached_fall = 1;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR1077 (TYPE ZI418, DECL_SPEC ZI693, EXP *ZO435)
{
    EXP ZI435;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	int ZI718;
	TOKEN ZI501;
	TYPE ZI880;

	ZR1115 (&ZI718);
	switch (CURRENT_TERMINAL) {
	  case lex_template:
	    break;
	  case 358:
	    RESTORE_LEXER;
	    goto ZL1;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	{

    (ZI501) = template_params ((ZI718));
    RESCAN_LEXER;
	}
	{

    (ZI880) = make_template_type ((ZI501), (ZI418));
	}
	ZR1038 (ZI880, ZI693, &ZI435);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    end_template ((ZI501));
	}
	{

    RESCAN_LEXER;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR964 (TYPE *ZO418, IDENTIFIER *ZO423)
{
    TYPE ZI418;
    IDENTIFIER ZI423;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	IDENTIFIER ZI1377;
	TYPE ZI1378;

	{

    /* Resolve parameter declarators from type names */
    (ZI0) = predict_param ();
	}
	if (!ZI0)
	    goto ZL2;
	ZR947 (&ZI1377);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    (ZI1378) = NULL_type;
	}
	{

    IDENTIFIER pid = underlying_id ((ZI1377));
    DEREF_loc (id_loc (pid), decl_loc);
	}
	ZR1166 (ZI1378, ZI1377, &ZI418, &ZI423);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	goto ZL0;
    }
    /*UNREACHED*/
  ZL2:;
    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    ADVANCE_LEXER;
	    ZR1376 (&ZI418, &ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_weak:
	{
	    IDENTIFIER ZI1375;
	    int ZI948;
	    TYPE ZI1381;
	    IDENTIFIER ZI1382;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI1375) = NULL_id;
    crt_id_qualifier = qual_none;
    qual_namespace = NULL_nspace;
	    }
	    {
 (ZI948) = 1; 
	    }
	    {

    func_type_defn (0);
    begin_param ((ZI1375));
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 0;
	    }
	    ZR949 (ZI948, &ZI1381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    end_param ();
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 1;
	    }
	    {

    HASHID nm = lookup_anon ();
    (ZI1382) = DEREF_id (hashid_id (nm));
    crt_id_qualifier = qual_none;
    qual_namespace = NULL_nspace;
	    }
	    {

    IDENTIFIER pid = underlying_id ((ZI1382));
    DEREF_loc (id_loc (pid), decl_loc);
	    }
	    ZR1166 (ZI1381, ZI1382, &ZI418, &ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_open_Hsquare_H1:
	{
	    EXP ZI435;
	    TYPE ZI1379;
	    IDENTIFIER ZI1380;

	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_open_Hsquare_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    ZR958 (&ZI435);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    NAT n = make_array_dim ((ZI435));
    MAKE_type_array (cv_none, NULL_type, n, (ZI1379));
	    }
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_close_Hsquare_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    {

    HASHID nm = lookup_anon ();
    (ZI1380) = DEREF_id (hashid_id (nm));
    crt_id_qualifier = qual_none;
    qual_namespace = NULL_nspace;
	    }
	    {

    IDENTIFIER pid = underlying_id ((ZI1380));
    DEREF_loc (id_loc (pid), decl_loc);
	    }
	    ZR1166 (ZI1379, ZI1380, &ZI418, &ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_nested_Hname_Hstar: case lex_full_Hname_Hstar: case lex_and_H1:
      case lex_star:
	{
	    TYPE ZI501;
	    TYPE ZI484;

	    ZR931 (&ZI501);
	    ZR964 (&ZI484, &ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI418) = (IS_NULL_type ((ZI484)) ? (ZI501): inject_pre_type ((ZI484), (ZI501), 0));
	    }
	}
	break;
      default:
	{
	    {

    (ZI418) = NULL_type;
	    }
	    {

    HASHID nm = lookup_anon ();
    (ZI423) = DEREF_id (hashid_id (nm));
    crt_id_qualifier = qual_none;
    qual_namespace = NULL_nspace;
	    }
	    {

    IDENTIFIER pid = underlying_id ((ZI423));
    DEREF_loc (id_loc (pid), decl_loc);
	    }
	}
	break;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO418 = ZI418;
    *ZO423 = ZI423;
}

void
ZR922 (TYPE *ZI578, BASE_TYPE *ZI879, TYPE *ZI880, CV_SPEC *ZI881, DECL_SPEC *ZI914, BASE_TYPE *ZO515, TYPE *ZO418, CV_SPEC *ZO788, DECL_SPEC *ZO693)
{
    BASE_TYPE ZI515;
    TYPE ZI418;
    CV_SPEC ZI788;
    DECL_SPEC ZI693;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	BASE_TYPE ZI1390;
	TYPE ZI1391;
	CV_SPEC ZI1392;
	DECL_SPEC ZI1393;
	BASE_TYPE ZI883;
	TYPE ZI884;
	CV_SPEC ZI885;
	DECL_SPEC ZI916;

	{

    /* Resolve declaration-specifiers from other declarators */
    (ZI0) = predict_dspec (0);
	}
	if (!ZI0)
	    goto ZL2;
	ZR911 (*ZI578, &ZI1390, &ZI1391, &ZI1392, &ZI1393);
	ZR922 (ZI578, &ZI1390, &ZI1391, &ZI1392, &ZI1393, &ZI883, &ZI884, &ZI885, &ZI916);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    if ((*ZI879) & (ZI883)) {
	(ZI515) = join_pre_types ((*ZI879), (ZI883));
    } else {
	(ZI515) = ((*ZI879) | (ZI883));
    }
	}
	{

    /* Join two partial types */
    if (IS_NULL_type ((*ZI880))) {
	(ZI418) = (ZI884);
    } else if (IS_NULL_type ((ZI884))) {
	(ZI418) = (*ZI880);
    } else {
	report (crt_loc, ERR_dcl_type_simple_many ((*ZI880), (ZI884)));
	(ZI418) = (ZI884);
    }
	}
	{

    CV_SPEC c = ((*ZI881) & (ZI885));
    if (c) report (crt_loc, ERR_dcl_type_cv_dup (c));
    (ZI788) = ((*ZI881) | (ZI885));
	}
	{

    /* Combine two declaration specifiers */
    DECL_SPEC d = (((*ZI914) & (ZI916)) & dspec_duplicate);
    if (d) report (crt_loc, ERR_dcl_spec_dup (d));
    (ZI693) = ((*ZI914) | (ZI916));
	}
	goto ZL0;
    }
    /*UNREACHED*/
  ZL2:;
    switch (CURRENT_TERMINAL) {
      default:
	{
	    ZI515 = *ZI879;
	    ZI418 = *ZI880;
	    ZI788 = *ZI881;
	    ZI693 = *ZI914;
	}
	break;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO515 = ZI515;
    *ZO418 = ZI418;
    *ZO788 = ZI788;
    *ZO693 = ZI693;
}

void
ZR966 (TYPE ZI501, TYPE *ZO418, IDENTIFIER *ZO423)
{
    TYPE ZI418;
    IDENTIFIER ZI423;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	IDENTIFIER ZI1377;
	TYPE ZI1378;
	TYPE ZI484;

	{

    /* Resolve parameter declarators from type names */
    (ZI0) = predict_param ();
	}
	if (!ZI0)
	    goto ZL2;
	ZR947 (&ZI1377);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    (ZI1378) = NULL_type;
	}
	{

    IDENTIFIER pid = underlying_id ((ZI1377));
    DEREF_loc (id_loc (pid), decl_loc);
	}
	ZR1166 (ZI1378, ZI1377, &ZI484, &ZI423);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    (ZI418) = (IS_NULL_type ((ZI484)) ? (ZI501): inject_pre_type ((ZI484), (ZI501), 1));
	}
	goto ZL0;
    }
    /*UNREACHED*/
  ZL2:;
    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    TYPE ZI484;

	    ADVANCE_LEXER;
	    ZR1376 (&ZI484, &ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI418) = (IS_NULL_type ((ZI484)) ? (ZI501): inject_pre_type ((ZI484), (ZI501), 1));
	    }
	}
	break;
      case lex_weak:
	{
	    IDENTIFIER ZI1375;
	    int ZI948;
	    TYPE ZI1381;
	    IDENTIFIER ZI1382;
	    TYPE ZI484;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI1375) = NULL_id;
    crt_id_qualifier = qual_none;
    qual_namespace = NULL_nspace;
	    }
	    {
 (ZI948) = 1; 
	    }
	    {

    func_type_defn (0);
    begin_param ((ZI1375));
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 0;
	    }
	    ZR949 (ZI948, &ZI1381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    end_param ();
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 1;
	    }
	    {

    HASHID nm = lookup_anon ();
    (ZI1382) = DEREF_id (hashid_id (nm));
    crt_id_qualifier = qual_none;
    qual_namespace = NULL_nspace;
	    }
	    {

    IDENTIFIER pid = underlying_id ((ZI1382));
    DEREF_loc (id_loc (pid), decl_loc);
	    }
	    ZR1166 (ZI1381, ZI1382, &ZI484, &ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI418) = (IS_NULL_type ((ZI484)) ? (ZI501): inject_pre_type ((ZI484), (ZI501), 1));
	    }
	}
	break;
      case lex_open_Hsquare_H1:
	{
	    EXP ZI435;
	    TYPE ZI1379;
	    IDENTIFIER ZI1380;
	    TYPE ZI484;

	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_open_Hsquare_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    ZR958 (&ZI435);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    NAT n = make_array_dim ((ZI435));
    MAKE_type_array (cv_none, NULL_type, n, (ZI1379));
	    }
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_close_Hsquare_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    {

    HASHID nm = lookup_anon ();
    (ZI1380) = DEREF_id (hashid_id (nm));
    crt_id_qualifier = qual_none;
    qual_namespace = NULL_nspace;
	    }
	    {

    IDENTIFIER pid = underlying_id ((ZI1380));
    DEREF_loc (id_loc (pid), decl_loc);
	    }
	    ZR1166 (ZI1379, ZI1380, &ZI484, &ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI418) = (IS_NULL_type ((ZI484)) ? (ZI501): inject_pre_type ((ZI484), (ZI501), 1));
	    }
	}
	break;
      case lex_nested_Hname_Hstar: case lex_full_Hname_Hstar: case lex_and_H1:
      case lex_star:
	{
	    TYPE ZI1383;
	    TYPE ZI1384;
	    TYPE ZI484;

	    ZR931 (&ZI1383);
	    ZR964 (&ZI1384, &ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI484) = (IS_NULL_type ((ZI1384)) ? (ZI1383): inject_pre_type ((ZI1384), (ZI1383), 0));
	    }
	    {

    (ZI418) = (IS_NULL_type ((ZI484)) ? (ZI501): inject_pre_type ((ZI484), (ZI501), 1));
	    }
	}
	break;
      default:
	{
	    TYPE ZI484;

	    {

    (ZI484) = NULL_type;
	    }
	    {

    HASHID nm = lookup_anon ();
    (ZI423) = DEREF_id (hashid_id (nm));
    crt_id_qualifier = qual_none;
    qual_namespace = NULL_nspace;
	    }
	    {

    IDENTIFIER pid = underlying_id ((ZI423));
    DEREF_loc (id_loc (pid), decl_loc);
	    }
	    {

    (ZI418) = (IS_NULL_type ((ZI484)) ? (ZI501): inject_pre_type ((ZI484), (ZI501), 1));
	    }
	}
	break;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO418 = ZI418;
    *ZO423 = ZI423;
}

void
ZR1061 (EXP *ZO435)
{
    EXP ZI435;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	EXP ZI497;
	SID_LIST_EXP ZI501;

	switch (CURRENT_TERMINAL) {
	  case lex_asm:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	switch (CURRENT_TERMINAL) {
	  case lex_open_Hround:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_string_Hexp:
		{
		    {

    ZI497 = crt_token->pp_data.exp;
		    }
		    ADVANCE_LEXER;
		}
		break;
	      case lex_wstring_Hexp:
		{
		    {

    ZI497 = crt_token->pp_data.exp;
		    }
		    ADVANCE_LEXER;
		}
		break;
	      default:
		goto ZL1;
	    }
	}
	ZR503 (&ZI501);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    (ZI435) = make_asm ((ZI497), (ZI501));
	}
	switch (CURRENT_TERMINAL) {
	  case lex_close_Hround:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZR422 ();
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR573 (TYPE ZI418, EXP *ZO435)
{
    EXP ZI435;

    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    SID_LIST_EXP ZI501;

	    ADVANCE_LEXER;
	    ZR504 (&ZI501);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 358:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI435) = make_new_init ((ZI418), (ZI501), 1);
	    }
	}
	break;
      default:
	{
	    {

    (ZI435) = make_new_init ((ZI418), NULL_list (EXP), 0);
	    }
	}
	break;
      case 358:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR636 (EXP *ZO435)
{
    EXP ZI435;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	EXP ZI1265;

	ZR634 (&ZI1265);
	ZR1267 (&ZI1265, &ZI435);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR949 (int ZI948, TYPE *ZO418)
{
    TYPE ZI418;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	int ZI950;
	CV_SPEC ZI788;
	SID_LIST_TYPE ZI726;

	ZR946 (&ZI950);
	switch (CURRENT_TERMINAL) {
	  case lex_close_Hround:
	    break;
	  case 358:
	    RESTORE_LEXER;
	    goto ZL1;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZR793 (&ZI788);
	ZR944 (&ZI726);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    CV_SPEC cv = func_linkage ((ZI788));
    if ((ZI948)) (ZI950) |= FUNC_WEAK;
    (ZI418) = make_func_type (NULL_type, (ZI950), cv, (ZI726));
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO418 = ZI418;
}

void
ZR1434 (int *ZI454, int *ZI558, int *ZI559, EXP *ZO562)
{
    EXP ZI562;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	TYPE ZI418;
	int ZI563;
	EXP ZI497;

	{

    /* Resolve type-ids from expressions */
    (ZI0) = predict_typeid (1);
	}
	if (!ZI0)
	    goto ZL2;
	ZR552 (&ZI418, &ZI563);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    (ZI497) = NULL_exp;
	}
	{

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (*ZI454));
	}
	switch (CURRENT_TERMINAL) {
	  case lex_close_Hround:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	goto ZL0;
    }
    /*UNREACHED*/
  ZL2:;
    switch (CURRENT_TERMINAL) {
      case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
      case lex_destructor_Hname: case lex_template_Hid: case lex_template_Htype:
      case lex_nested_Hname: case lex_full_Hname: case lex_char_Hexp:
      case lex_wchar_Hexp: case lex_string_Hexp: case lex_wstring_Hexp:
      case lex_integer_Hexp: case lex_floating_Hexp: case lex_complex_Hexp:
      case lex_complex_Htype: case lex_and_H1: case lex_compl_H1:
      case lex_minus: case lex_minus_Hminus: case lex_not_H1:
      case lex_open_Hround: case lex_plus: case lex_plus_Hplus:
      case lex_star: case lex_colon_Hcolon: case lex_abs:
      case lex_char: case lex_double: case lex_float:
      case lex_int: case lex_long: case lex_short:
      case lex_signed: case lex_sizeof: case lex_unsigned:
      case lex_void: case lex_bool: case lex_const_Hcast:
      case lex_delete: case lex_dynamic_Hcast: case lex_false:
      case lex_new: case lex_operator: case lex_reinterpret_Hcast:
      case lex_static_Hcast: case lex_this: case lex_throw:
      case lex_true: case lex_typeid: case lex_wchar_Ht:
      case lex_alignof: case lex_bottom: case lex_discard:
      case lex_ellipsis_Hexp: case lex_ptrdiff_Ht: case lex_set:
      case lex_size_Ht: case lex_unused: case lex_vtable:
      case lex_inset_Hstart:
	{
	    EXP ZI1430;
	    EXP ZI1283;
	    EXP ZI497;
	    int ZI561;
	    int ZI563;
	    TYPE ZI418;

	    {

    IGNORE incr_value (OPT_VAL_paren_depth);
	    }
	    ZR495 (&ZI1430);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI1283) = make_paren_exp ((ZI1430));
    decr_value (OPT_VAL_paren_depth);
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZR1245 (ZI1283, &ZI497);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI561) = no_side_effects - (*ZI558);
	    }
	    {

    (ZI563) = no_type_defns - (*ZI559);
	    }
	    {

    (ZI418) = typeof_exp (&(ZI497), (ZI561), (*ZI454));
	    }
	    {

    (ZI562) = make_sizeof_exp ((ZI418), (ZI497), (ZI563), (*ZI454));
	    }
	}
	break;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO562 = ZI562;
}

void
ZR947 (IDENTIFIER *ZO423)
{
    IDENTIFIER ZI423;

    switch (CURRENT_TERMINAL) {
      case lex_colon_Hcolon:
	{
	    ADVANCE_LEXER;
	    ZR1351 (&ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_full_Hname:
	{
	    NAMESPACE ZI429;

	    {

    ZI429 = crt_token->pp_data.ns;
	    }
	    ADVANCE_LEXER;
	    ZR1350 (&ZI429, &ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_nested_Hname:
	{
	    NAMESPACE ZI429;

	    {

    ZI429 = crt_token->pp_data.ns;
	    }
	    ADVANCE_LEXER;
	    ZR1349 (&ZI429, &ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_statement_Hname:
	{
	    IDENTIFIER ZI482;

	    {

    ZI482 = crt_token->pp_data.id.use;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI423) = (ZI482);
    crt_id_qualifier = qual_none;
    last_namespace = crt_namespace;
	    }
	}
	break;
      case lex_identifier: case lex_namespace_Hname: case lex_destructor_Hname:
      case lex_template_Hid: case lex_operator:
	{
	    ZR481 (&ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_type_Hname: case lex_template_Htype:
	{
	    IDENTIFIER ZI464;

	    ZR476 (&ZI464);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI423) = constr_name (last_namespace, (ZI464));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO423 = ZI423;
}

void
parse_type (TYPE *ZO418)
{
    TYPE ZI418;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	parse_tok_type (&ZI418);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    object_type ((ZI418), null_tag);
	}
    }
    goto ZL0;
  ZL1:;
    {
	{

    /* Syntax errors */
    ERROR err = ERR_lex_parse (crt_token);
    report (crt_loc, err);
    have_syntax_error = 1;
	}
	{

    (ZI418) = NULL_type;
	}
    }
  ZL0:;
    *ZO418 = ZI418;
}

void
ZR1101 (IDENTIFIER *ZO463)
{
    IDENTIFIER ZI463;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	TYPE ZI578;
	BASE_TYPE ZI879;
	TYPE ZI1512;
	CV_SPEC ZI1513;
	BASE_TYPE ZI515;
	TYPE ZI880;
	CV_SPEC ZI881;
	DECL_SPEC ZI914;
	TYPE ZI884;
	DECL_SPEC ZI693;
	TYPE ZI1079;
	IDENTIFIER ZI423;
	int ZI562;
	TYPE ZI418;

	{

    /* Resolve type-specifiers from other declarators */
    (ZI0) = predict_tspec (0);
	}
	if (!ZI0)
	    goto ZL1;
	{

    (ZI578) = NULL_type;
	}
	ZR877 (ZI578, &ZI879, &ZI1512, &ZI1513);
	ZR890 (&ZI879, &ZI1512, &ZI1513, &ZI515, &ZI880, &ZI881);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{
 (ZI914) = dspec_none; 
	}
	{

    /* Complete a declaration specifier and a type */
    (ZI693) = complete_dspec ((ZI914), (ZI515), (ZI880), (ZI881));
    (ZI884) = complete_pre_type ((ZI515), (ZI880), (ZI881), 0);
    have_type_specifier = 0;
	}
	{

    crt_templ_qualifier = 0;
	}
	ZR955 (ZI884, &ZI1079, &ZI423, &ZI562);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    if ((ZI562)) report (crt_loc, ERR_dcl_init_bad ());
	}
	{

    (ZI418) = make_cond_type ((ZI1079));
	}
	{

    if (type_tag ((ZI418)) == type_func_tag) {
	/* Look ahead for function definitions */
	int def = predict_func_defn ();
	if (def & !have_func_declarator) adjust_param ((ZI418));
	(ZI463) = make_func_decl ((ZI693), (ZI418), (ZI423), def);
	is_function_next = def;
    } else {
	int def = predict_obj_defn ();
	(ZI463) = make_object_decl ((ZI693), (ZI418), (ZI423), def);
	is_function_next = 0;
    }
    if (IS_id_type_alias ((ZI463))) {
	BASE_TYPE bs = DEREF_btype (id_type_alias_rep ((ZI463)));
	bs |= (ZI515);
	COPY_btype (id_type_alias_rep ((ZI463)), bs);
    }
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 0;
	}
	{

    if (crt_access_list.pending) {
	IGNORE report_access ((ZI463));
    }
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO463 = ZI463;
}

void
ZR1132 (OFFSET ZI460, TYPE ZI578, OFFSET *ZO1157, TYPE *ZO1158)
{
    OFFSET ZI1157;
    TYPE ZI1158;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
  ZL2_1132:;
    {
	OFFSET ZI497;
	TYPE ZI418;

	ZR1131 (ZI460, ZI578, &ZI497, &ZI418);
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_dot: case lex_open_Hsquare_H1:
		{
		    ZI460 = ZI497;
		    ZI578 = ZI418;
		    goto ZL2_1132;
		}
		/*UNREACHED*/
	      default:
		{
		    ZI1157 = ZI497;
		    ZI1158 = ZI418;
		}
		break;
	      case 358:
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO1157 = ZI1157;
    *ZO1158 = ZI1158;
}

void
ZR1435 (int *ZI460, EXP *ZO435)
{
    EXP ZI435;

    switch (CURRENT_TERMINAL) {
      case lex_new:
	{
	    int ZI461;
	    SID_LIST_EXP ZI501;
	    TYPE ZI418;
	    int ZI555;
	    int ZI463;
	    EXP ZI578;
	    EXP ZI459;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    {

    (ZI461) = have_type_declaration;
    have_type_declaration = TYPE_DECL_NONE;
	    }
	    ZR575 (&ZI501, &ZI418, &ZI555);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    int td = have_type_declaration;
    (ZI463) = 0;
    if (td != TYPE_DECL_NONE) {
	if (td == TYPE_DECL_ELABORATE && found_elaborate_type) {
	    /* This is allowed */
	    /* EMPTY */
	} else {
	    (ZI463) = 1;
	}
    }
    have_type_declaration = (ZI461);
	    }
	    {

    (ZI578) = begin_new_try ();
	    }
	    ZR573 (ZI418, &ZI459);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI497) = end_new_try ((ZI578), (ZI459));
	    }
	    {

    (ZI435) = make_new_exp ((ZI418), (ZI555) + (ZI463), (*ZI460), (ZI501), (ZI497));
	    }
	}
	break;
      case lex_delete:
	{
	    int ZI454;
	    EXP ZI497;

	    ZR587 (&ZI454);
	    ZR585 (&ZI497);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI435) = make_delete_exp ((ZI454), (*ZI460), (ZI497));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR477 (IDENTIFIER *ZO423)
{
    IDENTIFIER ZI423;

    switch (CURRENT_TERMINAL) {
      case lex_full_Hname:
	{
	    ZR507 (&ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_nested_Hname:
	{
	    ZR506 (&ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_colon_Hcolon:
	{
	    ZR508 (&ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO423 = ZI423;
}

void
ZR996 (TYPE *ZO418)
{
    TYPE ZI418;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	TYPE ZI501;
	TYPE ZI484;

	{

    /* Resolve pointer declarators from expressions */
    (ZI0) = predict_ptr (0);
	}
	if (!ZI0)
	    goto ZL2;
	ZR931 (&ZI501);
	ZR996 (&ZI484);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    (ZI418) = (IS_NULL_type ((ZI484)) ? (ZI501): inject_pre_type ((ZI484), (ZI501), 0));
	}
	goto ZL0;
    }
    /*UNREACHED*/
  ZL2:;
    switch (CURRENT_TERMINAL) {
      case lex_open_Hsquare_H1:
	{
	    ZR995 (&ZI418);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      default:
	{
	    {

    (ZI418) = NULL_type;
	    }
	}
	break;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO418 = ZI418;
}

/* END OF FILE */


syntax highlighted by Code2HTML, v. 0.9.1