readonly Expression ValueExpr;
readonly EnumMember prev_member;
- Constant value;
+ EnumConstant value;
bool in_transit;
// TODO: remove or simplify
return true;
}
- if (!prev_member.ResolveValue ())
+ if (!prev_member.ResolveValue ()) {
+ // Suppress cyclic error
+ prev_member.value = new EnumConstant (New.Constantify (parent_enum.UnderlyingType), parent_enum.TypeBuilder);
return false;
+ }
in_transit = true;
try {
- value = prev_member.value.Increment ();
+ value = (EnumConstant)prev_member.value.Increment ();
}
catch (OverflowException) {
Report.Error (543, Location, "The enumerator value `{0}' is too large to fit in its type `{1}'",
#region IConstant Members
- public Constant Value {
- get {
- return value;
- }
+ public Constant CreateConstantReference (Location loc)
+ {
+ if (value == null)
+ return null;
+
+ return new EnumConstant (Constant.CreateConstant (value.Child.Type, value.Child.GetValue(), loc),
+ value.Type);
}
#endregion