2005-08-16 Marek Safar <marek.safar@seznam.cz>
authorMarek Safar <marek.safar@gmail.com>
Tue, 16 Aug 2005 09:21:41 +0000 (09:21 -0000)
committerMarek Safar <marek.safar@gmail.com>
Tue, 16 Aug 2005 09:21:41 +0000 (09:21 -0000)
commit08c8eaa6cd668fb552117ead1d3c6b5577deea24
tree20ea36f4c93a2f0a757eb1522d28b857361ea47f
parent2f86fae2727e978aac2d55d182fe3d9e04a66a95
parent44c85abe672c365d85713a1547d2ee0c5f1347ae
2005-08-16  Marek Safar  <marek.safar@seznam.cz>

The big constants rewrite
Fix #75746, #75685 and more
As a side effect saved 1MB for MWF ;-)

* attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
(GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
enum based for corlib compilation.

* cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
subtractions.

* class.cs (FixedField.Define): Use ResolveAsConstant.

* const.cs (IConstant): Interface constants and enums.
(Const.ResolveValue): New method for constant resolvning.
(ExternalConstant): Constants from imported assemblies.

* constant.cs (Constant.GetTypedValue): Used to get constant with forced
conversion; like enums.
(Constant.ToType): Converts this constant to different type.
(Constant.Increment): Adds 1.

* convert.cs (ImplicitConversionRequired): Simplified.

* cs-parser.jay: Create EnumMember directly.

* decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.

* doc.cs (GenerateEnumDocComment): Removed.

* ecore.cs (Expression.ResolveAsConstant): New constant specific method.
(ConvertIntLiteral): Removed.
(FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).

* enum.cs (EnumMember): Implement IConstant.
(Enum.IsValidEnumConstant): Removed.
(Enum.GetNextDefaultValue): Removed.
(Enum.FindMembers): Updated.
(Enum.GenerateDocComment): Iterate enum members.

* expression.cs (Cast.TryReduce): Handle enums correctly.
(New.Constantify): Made public.
(MemberAccess.DoResolve): Removed contant specific if(s).

* literal.cs (NullLiteral): Implement new abstract methods.

* statement.cs (GotoCase.Resolve): Use new constant methods.
(SwitchLabel.ResolveAndReduce): Use new constant methods.

* typemanager.cs (LookupEnum): Removed.
(IsEnumType): Fixed to work with corlib.
(RegisterConstant): Removed.
(LookupConstant): Removed.
(GetConstant): Changed to work with IConstant.

svn path=/trunk/mcs/; revision=48416
34 files changed:
mcs/errors/cs0019-10.cs
mcs/errors/cs0029-3.cs
mcs/errors/cs0037-3.cs
mcs/errors/cs0037-4.cs
mcs/errors/cs0110-2.cs
mcs/errors/cs0133-5.cs
mcs/errors/cs0159-3.cs
mcs/errors/cs0619-19.cs
mcs/errors/cs0619-39.cs
mcs/errors/cs0619-40.cs
mcs/errors/cs1008.cs
mcs/errors/known-issues-gmcs
mcs/errors/known-issues-mcs
mcs/mcs/ChangeLog
mcs/mcs/attribute.cs
mcs/mcs/cfold.cs
mcs/mcs/class.cs
mcs/mcs/const.cs
mcs/mcs/constant.cs
mcs/mcs/convert.cs
mcs/mcs/cs-parser.jay
mcs/mcs/decl.cs
mcs/mcs/doc.cs
mcs/mcs/ecore.cs
mcs/mcs/enum.cs
mcs/mcs/expression.cs
mcs/mcs/literal.cs
mcs/mcs/statement.cs
mcs/mcs/typemanager.cs
mcs/tests/Makefile
mcs/tests/known-issues-gmcs
mcs/tests/known-issues-mcs
mcs/tests/test-437.cs
mcs/tests/test-49.cs