protected override Constant DoResolveValue(EmitContext ec) { if (ValueExpr != null) { Constant c = ValueExpr.ResolveAsConstant(ec, this); if (c == null) { return(null); } if (c is EnumConstant) { c = ((EnumConstant)c).Child; } c = c.ImplicitConversionRequired(ec, ParentEnum.UnderlyingType, Location); if (c == null) { return(null); } if (!IsValidEnumType(c.Type)) { Enum.Error_1008(Location); return(null); } return(new EnumConstant(c, MemberType)); } if (prev_member == null) { return(new EnumConstant( New.Constantify(ParentEnum.UnderlyingType), MemberType)); } if (!prev_member.ResolveValue()) { return(null); } try { return((EnumConstant)prev_member.value.Increment()); } catch (OverflowException) { Report.Error(543, Location, "The enumerator value `{0}' is too " + "large to fit in its type `{1}'", GetSignatureForError(), TypeManager.CSharpName(ParentEnum.UnderlyingType)); return(null); } }