kind,
FFEINFO_kindNONE,
ffeexpr_sym_lhs_call_ (ffesymbol s, ffelexToken t){  ffesymbolAttrs sa;  ffesymbolAttrs na;  ffeinfoKind kind;  ffeinfoWhere where;  ffeintrinGen gen;  ffeintrinSpec spec;  ffeintrinImp imp;  bool error = FALSE;  assert ((ffesymbol_state (s) == FFESYMBOL_stateNONE)	  || (ffesymbol_state (s) == FFESYMBOL_stateUNCERTAIN));  na = sa = ffesymbol_attrs (s);  assert (!(sa & ~(FFESYMBOL_attrsACTUALARG		   | FFESYMBOL_attrsADJUSTABLE		   | FFESYMBOL_attrsANYLEN		   | FFESYMBOL_attrsARRAY		   | FFESYMBOL_attrsDUMMY		   | FFESYMBOL_attrsEXTERNAL		   | FFESYMBOL_attrsSFARG		   | FFESYMBOL_attrsTYPE)));  kind = ffesymbol_kind (s);  where = ffesymbol_where (s);  /* Figure out what kind of object we've got based on previous declarations     of or references to the object. */  if (sa & FFESYMBOL_attrsEXTERNAL)    {      assert (!(sa & ~(FFESYMBOL_attrsACTUALARG		       | FFESYMBOL_attrsDUMMY		       | FFESYMBOL_attrsEXTERNAL		       | FFESYMBOL_attrsTYPE)));      if (sa & FFESYMBOL_attrsTYPE)	error = TRUE;      else	/* Not TYPE. */	{	  kind = FFEINFO_kindSUBROUTINE;	  if (sa & FFESYMBOL_attrsDUMMY)	    ;			/* Not TYPE. */	  else if (sa & FFESYMBOL_attrsACTUALARG)	    ;			/* Not DUMMY or TYPE. */	  else			/* Not ACTUALARG, DUMMY, or TYPE. */	    where = FFEINFO_whereGLOBAL;	}    }  else if (sa & FFESYMBOL_attrsDUMMY)    {      assert (!(sa & FFESYMBOL_attrsEXTERNAL));	/* Handled above. */      assert (!(sa & ~(FFESYMBOL_attrsDUMMY		       | FFESYMBOL_attrsEXTERNAL		       | FFESYMBOL_attrsTYPE)));      if (sa & FFESYMBOL_attrsTYPE)	error = TRUE;      else	kind = FFEINFO_kindSUBROUTINE;    }  else if (sa & FFESYMBOL_attrsARRAY)    {      assert (!(sa & ~(FFESYMBOL_attrsARRAY		       | FFESYMBOL_attrsADJUSTABLE		       | FFESYMBOL_attrsTYPE)));      error = TRUE;    }  else if (sa & FFESYMBOL_attrsSFARG)    {      assert (!(sa & ~(FFESYMBOL_attrsSFARG		       | FFESYMBOL_attrsTYPE)));      error = TRUE;    }  else if (sa & FFESYMBOL_attrsTYPE)    {      assert (!(sa & (FFESYMBOL_attrsARRAY		      | FFESYMBOL_attrsDUMMY		      | FFESYMBOL_attrsEXTERNAL		      | FFESYMBOL_attrsSFARG)));	/* Handled above. */      assert (!(sa & ~(FFESYMBOL_attrsTYPE		       | FFESYMBOL_attrsADJUSTABLE		       | FFESYMBOL_attrsANYLEN		       | FFESYMBOL_attrsARRAY		       | FFESYMBOL_attrsDUMMY		       | FFESYMBOL_attrsEXTERNAL		       | FFESYMBOL_attrsSFARG)));      error = TRUE;    }  else if (sa == FFESYMBOL_attrsetNONE)    {      assert (ffesymbol_state (s) == FFESYMBOL_stateNONE);      if (ffeintrin_is_intrinsic (ffesymbol_text (s), t, FALSE,				  &gen, &spec, &imp, &kind))	{	  ffesymbol_signal_change (s);	/* May need to back up to previous					   version. */	  ffesymbol_set_generic (s, gen);	  ffesymbol_set_specific (s, spec);	  ffesymbol_set_implementation (s, imp);	  ffesymbol_set_info (s,			      ffeinfo_new (FFEINFO_basictypeNONE,					   FFEINFO_kindtypeNONE,					   0,					   kind,					   FFEINFO_whereINTRINSIC,					   FFETARGET_charactersizeNONE));	  ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);	  ffesymbol_resolve_intrin (s);	  s = ffecom_sym_learned (s);	  ffesymbol_signal_unreported (s);	/* For debugging purposes. */	  return s;	}      kind = FFEINFO_kindSUBROUTINE;      where = FFEINFO_whereGLOBAL;    }  else    error = TRUE;  /* 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 (error)    ffesymbol_error (s, t);  else if (!(na & FFESYMBOL_attrsANY))    {      ffesymbol_signal_change (s);	/* May need to back up to previous					   version. */      ffesymbol_set_info (s,			  ffeinfo_new (ffesymbol_basictype (s),				       ffesymbol_kindtype (s),				       ffesymbol_rank (s),				       kind,	/* SUBROUTINE. */				       where,	/* GLOBAL or DUMMY. */				       ffesymbol_size (s)));      ffesymbol_set_state (s, FFESYMBOL_stateUNDERSTOOD);      ffesymbol_resolve_intrin (s);      s = ffecom_sym_learned (s);      ffesymbol_signal_unreported (s);	/* For debugging purposes. */    }  return s;}