+2006-07-28 Raja R Harinath <rharinath@novell.com>
+
+ * class.cs (TypeContainer.AddMemberType): Rename from
+ AddToTypeContainer.
+ (TypeContainer.AddMember): Rename from AddToMemberContainer.
+ (AddTypeContainer): New. Combine AddClassOrStruct and
+ AddInterface.
+ (AddPartial): Update. Add 'is_partial' argument.
+ * roottypes.cs: Update to changes.
+ * cs-parser.jay (push_current_class): New helper for handling
+ current_container and current_class.
+ (struct_declaration, interface_declaration, class_declaration):
+ Use it.
+
+2006-07-26 Raja R Harinath <rharinath@novell.com>
+
+ * roottypes.cs: Rename from tree.cs.
+
+ Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
+ * tree.cs (Tree, ITreeDump): Remove types.
+ * rootcontext.cs (tree, Tree): Remove fields.
+ (root, ToplevelTypes): New.
+ * *.cs: Update to rename.
+
+ * tree.cs (Tree.RecordDecl): Remove.
+ (RootTypes.AddToTypeContainer): Record the toplevel type in its
+ namespace here.
+ * class.cs, cs-parser.jay: Remove mention of RecordDecl.
+
+2006-07-23 Raja R Harinath <harinath@gmail.com>
+
+ * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
+ DoFlowAnalysis and OmitStructFlowAnalysis here.
+ (ec.With): Rename from WithUnsafe and generalize.
+ (ec.WithCheckState): Remove. All users can be handled by 'With'.
+ (ec.WithFlowAnalyis): New.
+ * ecore.cs, expression.cs, statement.cs: Update.
+
+2006-07-22 Raja R Harinath <harinath@gmail.com>
+
+ * statement.cs (Block.ResolveMeta): Simplify slightly.
+
+ * codegen.cs (EmitContext.Flags): New enum. Used to represent the
+ multiple boolean fields. Convert InUnsafe, constant_check_state,
+ check_state to flags.
+ (CheckState, ConstantCheckState): Update.
+ (InUnsafe): New read-only property.
+ (FlagsHandle): Rename from CheckStateHandle and convert to handle
+ arbitrary flags.
+ (WithUnsafe): New helper similar to WithCheckState.
+ * statement.cs (Block.ResolveMeta): Use WithUnsafe.
+ (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
+
+2006-07-21 Raja R Harinath <rharinath@novell.com>
+
+ Make comparisons use the same IL irrespective of whether they're
+ in a 'checked' or 'unchecked' context: one of the issues in #78899
+ * codegen.cs (EmitContext.CheckState): Make read-only property.
+ (EmitContext.ConstantCheckState): Likewise.
+ (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
+ helper that implement a save/restore stack for CheckState
+ values. This is the only way to change check-state.
+ * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
+ * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
+ (CheckedExpr.EmitBranchable): New forwarding method.
+ (UnCheckedExpr): Likewise.
+ * statement.cs (Block.ResolveMeta): Use WithCheckState.
+ (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
+ (Checked.Resolve, checked.DoEmit): Likewise.
+
+2006-07-21 Martin Baulig <martin@ximian.com>
+
+ * generic.cs (TypeManager.InferType): When inferring an array
+ type, also allow IList<T> and ICollection<T>. Fixes #78900.
+
+2006-07-21 Martin Baulig <martin@ximian.com>
+
+ * generic.cs (TypeManager.IsIEnumerable): Renamed into IsIList()
+ and allow IList`1 and all its base interfaces.
+
+ * convert.cs (Convert.ImplicitReferenceConversion): Allow
+ converting from an array-type of T to IList<T>.
+
+2006-07-21 Martin Baulig <martin@ximian.com>
+
+ * ecore.cs (SimpleName.DoSimpleNameResolve): Added CS0307 check.
+
+2006-07-20 Miguel de Icaza <miguel@novell.com>
+
+ * anonymous.cs: Cache the resolved anonymous delegate, and return
+ this so that the ResolveTopBlock is only triggered once, not
+ twice.
+
+ Currently we trigger ResolvetopBlock twice due to a first pass of
+ argument check compatibility, and a second pass that does the
+ actual resolution.
+
+2006-07-16 Marek Safar <marek.safar@seznam.cz>
+
+ A fix for #70506
+ * driver.cs (MainDriver): When a file extension is missing,
+ use a default one.
+
+2006-07-15 Marek Safar <marek.safar@seznam.cz>
+
+ * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
+ modifiers.
+ * rootcontext.cs (Reset): Add helper_classes.
+
+2006-07-15 Marek Safar <marek.safar@seznam.cz>
+
+ A fix for #78860
+ * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
+ correctly.
+
+2006-07-13 Miguel de Icaza <miguel@novell.com>
+
+ * statement.cs (Lock): Handle expressions of type
+ TypeManager.null_type specially. Fixes #78770
+
+2006-07-08 Marek Safar <marek.safar@seznam.cz>
+
+ * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
+ to an event.
+
+2006-07-08 Marek Safar <marek.safar@seznam.cz>
+
+ * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
+ for accessors as well.
+ * ecore.cs (EventExpr): Add AccessorTable.
+
+2006-07-03 Martin Baulig <martin@ximian.com>
+
+ * ecore.cs (UnboxCast.Emit): Also use `Unbox_Any' for generic
+ instances of value types.
+
+ * convert.cs (Convert.ExplicitConversion): Correctly handle
+ object->nullable conversions.
+
+2006-07-01 Marek Safar <marek.safar@seznam.cz>
+
+ A fix for #78738
+ * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
+ for CS0122 where appropriate.
+ * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
+ level attributes.
+ (Filter): Assembly can be null in the case of top level attributes.
+
+2006-06-28 Raja R Harinath <rharinath@novell.com>
+
+ Fix #78716
+ * generic.cs (TypeManager.InferParamsTypeArguments): If there are
+ no arguments, return 'false': nothing can be inferred.
+
+2006-06-25 Marek Safar <marek.safar@seznam.cz>
+
+ A fix for #78690
+
+ * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
+ is done at global level.
+
+2006-06-24 Marek Safar <marek.safar@seznam.cz>
+
+ A fix for #77002, Implemented TypeForwarder support.
+
+ * attribute.cs (Attribute.GetArgumentType): Reads type argument.
+ * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Add TypeForwarder
+ attribute handling.
+ * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
+ * typemanager.cs (): Add type_forwarder_attr_type.
+
+2006-06-24 Marek Safar <marek.safar@seznam.cz>
+
+ * report.cs: Add CS0469 warning.
+
+2006-06-22 Martin Baulig <martin@ximian.com>
+
+ * class.cs
+ (TypeContainer.GetNormalBases): Also use ResolveAsBaseTerminal()
+ for interfaces; fixes #78686, which is a modification of #78380
+ with interfaces instead of classes.
+
+2006-06-21 Martin Baulig <martin@ximian.com>
+
+ * codegen.cs (CodeGen.Save): Moved the symbol file generation into
+ the `try'-block, so we also report CS0016 etc. there.
+
+2006-06-21 Martin Baulig <martin@ximian.com>
+
+ * ecore.cs (FieldExpr.EmitAssign, FieldExpr.AddressOf): Correctly
+ handle SetAssigned() and SetMemberIsUsed() for generic types;
+ fixes #77545.
+
+2006-06-21 Martin Baulig <martin@ximian.com>
+
+ * delegate.cs
+ (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
+
+2006-06-21 Martin Baulig <martin@ximian.com>
+
+ * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
+ also report CS1686 for parameters.
+
+2006-06-21 Martin Baulig <martin@ximian.com>
+
+ * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
+ instead of an error if the value is not implicitly convertible to
+ the switch types; fixes #77964.
+
+2006-06-21 Raja R Harinath <rharinath@novell.com>
+
+ Fix #78673
+ * class.cs (FieldBase.ResolveInitializer): Stop resolution if
+ FieldBuilder is null.
+
+ Fix #78662
+ * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
+ 'left' and 'right' before error-checking.
+
+2006-06-19 Martin Baulig <martin@ximian.com>
+
+ * convert.cs
+ (Convert.ImplicitConversionStandard): Cleanup and correctly
+ implement nullable conversions.
+ (Convert.ImplicitStandardConversionExists): Likewise.
+ (Convert.ExplicitConversion): Likewise.
+
+2006-06-19 Martin Baulig <martin@ximian.com>
+
+ * generic.cs
+ (Nullable.Wrap.Create, Nullable.Unwrap.Create): New public static
+ methods; make the ctors protected.
+
+2006-06-19 Martin Baulig <martin@ximian.com>
+
+ Fixed #78380; added gtest-273.cs.
+
+ * ecore.cs
+ (Expression.ResolveAsBaseTerminal): Move the constraint checking
+ into ResolveAsTypeTerminal().
+
+ * generic.cs
+ (ConstraintChecker.HasDefaultConstructor): Use the non-cache based
+ TypeManager.FindMembers() to check for the default ctor.
+
+2006-06-18 Marek Safar <marek.safar@seznam.cz>
+
+ * generic.cs: Fixed NullableInfo accessibility.
+
+2006-06-16 Martin Baulig <martin@ximian.com>
+
+ * generic.cs
+ (Constraints.InflatedConstraints.inflate): Correctly inflate
+ generic types; fixes #78400.
+
+2006-06-16 Juraj Skripsky <js@hotfeet.ch>
+
+ * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
+ Fixed bug #78601.
+ (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
+ (FieldExpr.DoResolve): likewise.
+ (PropertyExpr.InstanceResolve): likewise.
+ (EventExpr.InstanceResolve): likewise.
+
+2006-06-15 Martin Baulig <martin@ximian.com>
+
+ * statement.cs
+ (SwitchLabel.ResolveAndReduce): Added `bool allow_nullable'
+ argument; always allow a `null' label if true.
+ (Switch.SwitchGoverningType): Take an `Expression expr' argument.
+ (Switch.TableSwitchEmit, Switch.SimpleSwitchEmit): Check whether
+ we have a `null' label and mark the new `null_target' label;
+ default to the `default' label.
+ (Switch.Resolve): Add support for nullable types. Fixes #78630.
+
+2006-06-15 Martin Baulig <martin@ximian.com>
+
+ * class.cs (Operator.Define): Allow an implicit/explicit operator
+ to convert to/from a nullable value of the enclosing type.
+
+ * generic.cs (TypeManager.IsNullableTypeOf): New public method.
+ (Nullable.Unwrap, Nullable.Wrap): Make these classes public.
+
+ * convert.cs
+ (Convert.ImplicitStandardConversionExists): Add support for lifted
+ implicit/explicit conversions.
+ (Convert.ImplicitConversionStandard): Likewise.
+
+2006-06-13 Martin Baulig <martin@ximian.com>
+
+ * ecore.cs (SimpleName.DoSimpleNameResolve): Check whether we have
+ type arguments and create a ConstructedType if necessary. Fixes #78400.
+
+2006-06-04 Marek Safar <marek.safar@seznam.cz>
+
+ * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
+ attribute applicable tests for attribute argument.
+
+2006-06-02 Raja R Harinath <rharinath@novell.com>
+
+ Fix #78079
+ * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
+ (Binary.OverloadResolve_PredefinedIntegral): New.
+ (Binary.OverloadResolve_PredefinedFloating): New.
+ (Binary.OverloadResolve_PredefinedString): New.
+ (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
+ Follow the standard more closely, and treat numeric promotions in
+ terms of overload resolution.
+ (Binary.CheckShiftArguments): Simplify.
+
+2006-06-01 Raja R Harinath <rharinath@novell.com>
+
+ * flowanalysis.cs (MyBitVector): Simplify representation.
+ (MyBitVector.Clone): Avoid allocating BitArray.
+ (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
+ (MyBitVector.operator|): Likewise, with MyBitVector.Or.
+ (*): Update. Change all references to MyBitVector.And and
+ MyBitVector.Or to &= and |=.
+
+2006-05-31 Raja R Harinath <rharinath@novell.com>
+
+ * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
+ Use bne.un instead of ceq+brfalse.
+
+ Fix cs0208-[23].cs
+ * typemanager.cs (IsUnmanagedType): Disallow generic types and
+ generic parameters.
+
+2006-05-29 Raja R Harinath <rharinath@novell.com>
+
+ Fix cs0231-[34].cs.
+ * cs-parser.jay (formal_parameter_list): Extend the pattern below
+ to param arguments too.
+
+2006-05-26 Miguel de Icaza <miguel@novell.com>
+
+ * cs-parser.jay: Catch another parsing form for arglist being
+ followed by other arguments. Fixes #78313.
+
+2006-05-25 Raja R Harinath <rharinath@novell.com>
+
+ Fix #78324
+ * expression.cs (Binary.DoResolve): Use Nullable.LiftedBinaryOperator
+ also when one of the operands is a null literal.
+ * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality): Rewrite
+ to improve clarity, and generate slightly better code.
+
+2006-05-24 Raja R Harinath <rharinath@novell.com>
+
+ * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
+ checking of out parameters to ...
+ (FlowBranchingToplevel.Merge): ... here.
+ (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
+ set, propagate the origin upward, and only complain if there was
+ no other error.
+ (FlowBranchingException.AddContinueOrigin): Likewise.
+ (FlowBranchingException.AddReturnOrigin): Likewise.
+ (FlowBranchingException.AddGotoOrigin): Likewise.
+
+2006-05-23 Raja R Harinath <rharinath@novell.com>
+
+ * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
+ unreachable, skip it.
+ (FlowBranchingException.Merge): Always propagate jumps, even if
+ the finally block renders subsequent code unreachable.
+
+2006-05-18 Raja R Harinath <rharinath@novell.com>
+
+ Fix #77601
+ * statement.cs (Goto.Resolve): Move responsibility for resolving
+ 'goto' to FlowBranching.AddGotoOrigin.
+ (Goto.SetResolvedTarget): New. Callback to set the
+ LabeledStatement that's the target of the goto.
+ (Goto.DoEmit): Use Leave instead of Br when crossing an
+ unwind-protect boundary.
+ * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
+ LookupLabel and adjust to new semantics.
+ (FlowBranchingToplevel.AddGotoOrigin): Likewise.
+ (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
+ Goto.SetResolvedTarget to update target.
+ (FlowBranchingLabeled.AddGotoOrigin): Likewise.
+ (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
+ AddBreakOrigin & co. Delay propagation until ...
+ (FlowBranchingException.Merge): ... this.
+
+ * statement.cs (Block.Resolve): Always depend on flow-branching to
+ determine unreachability. Kill workaround that originally emitted
+ only one statement after an "unreachable" label (see infloop in
+ test-515.cs).
+
+ Fix #77869, #76148, #77755, #75255 and a host of other bugs.
+ This is still "wrong", but anything better would probably need a
+ multi-pass algorithm.
+ * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
+ usage vector. Force current usage vector to be reachable, to
+ optimistically signify backward jumps.
+ (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
+ detected.
+ (FlowBranchingLabeled.Merge): New. If no backward jump was
+ detected, return the original salted-away usage vector instead,
+ updated with appropriate changes. Print unreachable warning if
+ necessary.
+ * statement.cs (Block.Resolve): Don't print unreachable warning on
+ a labeled statement.
+
+2006-05-17 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * driver.cs: Pass filename without path to AssemblyBuilder's
+ AddResourceFile. Fixes bug #78407.
+
+2006-05-17 Raja R Harinath <rharinath@novell.com>
+
+ * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
+ * flowanalysis.cs (FlowBranchingLabeled): ... here.
+ (FlowBranching.MergeChild): Overwrite
+ reachability information from Labeled branchings too.
+
+2006-05-16 Raja R Harinath <rharinath@novell.com>
+
+ * statement.cs (Goto.Resolve): Merge jump origins here ...
+ * flowanalysis.cs (FlowBranching.Label): ... rather than here.
+
+ * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
+ (FlowBranchingToplevel.LookupLabel): ... here. Add CS1632 check.
+ (FlowBranchingGoto.LookupLabel): New. Handle back jumps.
+ (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
+ here, ...
+ * statement.cs (Goto.Resolve): ... not here.
+ (Goto.Emit): Remove CS1632 check.
+
+2006-05-14 Marek Safar <marek.safar@seznam.cz>
+
+ * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
+ error message.
+
+2006-05-11 Raja R Harinath <rharinath@novell.com>
+
+ * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
+ (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
+ (FlowBranchingException.Label): Likewise.
+
+ * flowanalysis.cs (MyBitVector.SetAll): New. Sets all bits to the
+ given value.
+ (MyBitVector.Or): Use it to avoid losing information (Count).
+ (FlowBranching.MergeOrigins): Likewise.
+
+ * flowanalysis.cs (UsageVector.IsDirty): Remove.
+ (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
+ (UsageVector.Locals, UsageVector.LocalVector): Likewise.
+ (UsageVector.ToString): Simplify.
+ (UsageVector.MergeSiblings): Move here from ...
+ (FlowBranching.Merge): ... here.
+ (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
+ not a MyBitVector.
+
+2006-05-10 Raja R Harinath <rharinath@novell.com>
+
+ * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
+ null bitvector is treated as all-true.
+
+ * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
+ (MyBitVector): Rationalize invariants. 'vector != null' implies
+ that we have our own copy of the bitvector. Otherwise,
+ 'InheritsFrom == null' implies all inherited bits are true.
+
+2006-05-09 Marek Safar <marek.safar@seznam.cz>
+
+ * statement.cs (LocalInfo): Add IsConstant.
+ (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
+ local variable for constants.
+
2006-05-09 Raja R Harinath <rharinath@novell.com>
* flowanalysis.cs (MyBitVector.Empty): New.