&extents));
&extents, is_ugly_assumed));
ffestc_R501_item (ffelexToken name, ffebld kind, ffelexToken kindt,		  ffesttDimList dims, ffebld len, ffelexToken lent,		  ffebld init, ffelexToken initt, bool clist){  ffesymbol s;  ffesymbol sfn;		/* FUNCTION symbol. */  ffebld array_size;  ffebld extents;  ffesymbolAttrs sa;  ffesymbolAttrs na;  ffestpDimtype nd;  bool is_init = (init != NULL) || clist;  bool is_assumed;  ffeinfoRank rank;  ffestc_check_item_ ();  assert (name != NULL);  assert (ffelex_token_type (name) == FFELEX_typeNAME);	/* Not NAMES. */  assert (kind == NULL);	/* No way an expression should get here. */  ffestc_establish_declinfo_ (kind, kindt, len, lent);  is_assumed = (ffestc_local_.decl.basic_type == FFEINFO_basictypeCHARACTER)    && (ffestc_local_.decl.size == FFETARGET_charactersizeNONE);  if ((dims != NULL) || is_init)    ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);  s = ffesymbol_declare_local (name, TRUE);  sa = ffesymbol_attrs (s);  /* First figure out what kind of object this is based solely on the current     object situation (type params, dimension list, and initialization). */  na = FFESYMBOL_attrsTYPE;  if (is_assumed)    na |= FFESYMBOL_attrsANYLEN;  nd = ffestt_dimlist_type (dims);  switch (nd)    {    case FFESTP_dimtypeNONE:      break;    case FFESTP_dimtypeKNOWN:      na |= FFESYMBOL_attrsARRAY;      break;    case FFESTP_dimtypeADJUSTABLE:      na |= FFESYMBOL_attrsARRAY | FFESYMBOL_attrsADJUSTABLE;      break;    case FFESTP_dimtypeASSUMED:      na |= FFESYMBOL_attrsARRAY | FFESYMBOL_attrsANYSIZE;      break;    case FFESTP_dimtypeADJUSTABLEASSUMED:      na |= FFESYMBOL_attrsARRAY | FFESYMBOL_attrsADJUSTABLE	| FFESYMBOL_attrsANYSIZE;      break;    default:      assert ("unexpected dimtype" == NULL);      na = FFESYMBOL_attrsetNONE;      break;    }  if (!ffesta_is_entry_valid      && (((na & (FFESYMBOL_attrsANYLEN | FFESYMBOL_attrsARRAY))	   == (FFESYMBOL_attrsANYLEN | FFESYMBOL_attrsARRAY))))    na = FFESYMBOL_attrsetNONE;  if (is_init)    {      if (na == FFESYMBOL_attrsetNONE)	;      else if (na & (FFESYMBOL_attrsANYLEN		     | FFESYMBOL_attrsADJUSTABLE		     | FFESYMBOL_attrsANYSIZE))	na = FFESYMBOL_attrsetNONE;      else	na |= FFESYMBOL_attrsINIT;    }  /* Now figure out what kind of object we've got based on previous     declarations of or references to the object. */  if (na == FFESYMBOL_attrsetNONE)    ;  else if (!ffesymbol_is_specable (s)	   && (((ffesymbol_where (s) != FFEINFO_whereCONSTANT)		&& (ffesymbol_where (s) != FFEINFO_whereINTRINSIC))	       || (na & (FFESYMBOL_attrsARRAY | FFESYMBOL_attrsINIT))))    na = FFESYMBOL_attrsetNONE;	/* Can't dcl sym ref'd in sfuncdef, and can't				   dimension/init UNDERSTOODs. */  else if (sa & FFESYMBOL_attrsANY)    na = sa;  else if ((sa & na)	   || ((sa & (FFESYMBOL_attrsSFARG		      | FFESYMBOL_attrsADJUSTS))	       && (na & (FFESYMBOL_attrsARRAY			 | FFESYMBOL_attrsANYLEN)))	   || ((sa & FFESYMBOL_attrsRESULT)	       && (na & (FFESYMBOL_attrsARRAY			 | FFESYMBOL_attrsINIT)))	   || ((sa & (FFESYMBOL_attrsSFUNC		      | FFESYMBOL_attrsEXTERNAL		      | FFESYMBOL_attrsINTRINSIC		      | FFESYMBOL_attrsINIT))	       && (na & (FFESYMBOL_attrsARRAY			 | FFESYMBOL_attrsANYLEN			 | FFESYMBOL_attrsINIT)))	   || ((sa & FFESYMBOL_attrsARRAY)	       && !ffesta_is_entry_valid	       && (na & FFESYMBOL_attrsANYLEN))	   || ((sa & (FFESYMBOL_attrsADJUSTABLE		      | FFESYMBOL_attrsANYLEN		      | FFESYMBOL_attrsANYSIZE		      | FFESYMBOL_attrsDUMMY))	       && (na & FFESYMBOL_attrsINIT))	   || ((sa & (FFESYMBOL_attrsSAVE		      | FFESYMBOL_attrsNAMELIST		      | FFESYMBOL_attrsCOMMON		      | FFESYMBOL_attrsEQUIV))	       && (na & (FFESYMBOL_attrsADJUSTABLE			 | FFESYMBOL_attrsANYLEN			 | FFESYMBOL_attrsANYSIZE))))    na = FFESYMBOL_attrsetNONE;  else if ((ffesymbol_kind (s) == FFEINFO_kindENTITY)	   && (ffesymbol_where (s) == FFEINFO_whereCONSTANT)	   && (na & FFESYMBOL_attrsANYLEN))    {				/* If CHARACTER*(*) FOO after PARAMETER FOO. */      na |= FFESYMBOL_attrsTYPE;      ffestc_local_.decl.size = ffebld_size (ffesymbol_init (s));    }  else    na |= sa;  /* Now see what we've got for a new object: NONE means a new error cropped     up; ANY means an old error to be ignored; otherwise, everything's ok,     update the object (symbol) and continue on. */  if (na == FFESYMBOL_attrsetNONE)    {      ffesymbol_error (s, name);      ffestc_parent_ok_ = FALSE;    }  else if (na & FFESYMBOL_attrsANY)    ffestc_parent_ok_ = FALSE;  else    {      ffesymbol_set_attrs (s, na);      if (ffesymbol_state (s) == FFESYMBOL_stateNONE)	ffesymbol_set_state (s, FFESYMBOL_stateSEEN);      rank = ffesymbol_rank (s);      if (dims != NULL)	{	  ffesymbol_set_dims (s, ffestt_dimlist_as_expr (dims, &rank,							 &array_size,							 &extents));	  ffesymbol_set_arraysize (s, array_size);	  ffesymbol_set_extents (s, extents);	  if (!(0 && ffe_is_90 ())	      && (ffebld_op (array_size) == FFEBLD_opCONTER)	      && (ffebld_constant_integerdefault (ffebld_conter (array_size))		  == 0))	    {	      ffebad_start (FFEBAD_ZERO_ARRAY);	      ffebad_here (0, ffelex_token_where_line (name),			   ffelex_token_where_column (name));	      ffebad_finish ();	    }	}      if (init != NULL)	{	  ffesymbol_set_init (s,			      ffeexpr_convert (init, initt, name,					       ffestc_local_.decl.basic_type,					       ffestc_local_.decl.kind_type,					       rank,					       ffestc_local_.decl.size,					       FFEEXPR_contextDATA));	  ffecom_notify_init_symbol (s);	  ffesymbol_update_init (s);#if FFEGLOBAL_ENABLED	  if (ffesymbol_common (s) != NULL)	    ffeglobal_init_common (ffesymbol_common (s), initt);#endif	}      else if (clist)	{	  ffebld symter;	  symter = ffebld_new_symter (s, FFEINTRIN_genNONE,				      FFEINTRIN_specNONE,				      FFEINTRIN_impNONE);	  ffebld_set_info (symter,			   ffeinfo_new (ffestc_local_.decl.basic_type,					ffestc_local_.decl.kind_type,					rank,					FFEINFO_kindNONE,					FFEINFO_whereNONE,					ffestc_local_.decl.size));	  ffestc_local_.decl.initlist = ffebld_new_item (symter, NULL);	}      if (na & FFESYMBOL_attrsINTRINSIC)	;			/* Do none of the below. */      else if (ffesymbol_basictype (s) == FFEINFO_basictypeNONE)	{	  ffesymbol_set_info (s,			      ffeinfo_new (ffestc_local_.decl.basic_type,					   ffestc_local_.decl.kind_type,					   rank,					   ffesymbol_kind (s),					   ffesymbol_where (s),					   ffestc_local_.decl.size));	  if ((na & FFESYMBOL_attrsRESULT)	      && ((sfn = ffesymbol_funcresult (s)) != NULL))	    {	      ffesymbol_set_info (sfn,				  ffeinfo_new (ffestc_local_.decl.basic_type,					       ffestc_local_.decl.kind_type,					       rank,					       ffesymbol_kind (sfn),					       ffesymbol_where (sfn),					       ffestc_local_.decl.size));	      ffesymbol_signal_unreported (sfn);	    }	}      else if ((ffestc_local_.decl.basic_type != ffesymbol_basictype (s))	       || (ffestc_local_.decl.kind_type != ffesymbol_kindtype (s))	       || ((ffestc_local_.decl.basic_type		    == FFEINFO_basictypeCHARACTER)		   && (ffestc_local_.decl.size != ffesymbol_size (s))))	{			/* Explicit type disagrees with established				   implicit type. */	  ffesymbol_error (s, name);	}      if ((na & FFESYMBOL_attrsADJUSTS)	  && ((ffestc_local_.decl.basic_type != FFEINFO_basictypeINTEGER)	      || (ffestc_local_.decl.kind_type != FFEINFO_kindtypeINTEGER1)))	ffesymbol_error (s, name);      ffesymbol_signal_unreported (s);      ffestc_parent_ok_ = TRUE;    }}