Forget to commit.
[mono.git] / mcs / mcs / ChangeLog
index 274ef071be24fe92b56039619ce89be8a7f5f94b..a1953cf9ae279968cf642c9ca853605ef2aa18a7 100644 (file)
@@ -1,6 +1,635 @@
+2007-02-12  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #80749
+       * assign.cs (FieldInitializer): FieldInitializer has to keep track of
+       its parent container.
+
+       * class.cs (DefineFieldInitializers): Each initializer can has different
+       resolve context.
+
+       * const.cs: Updated.
+
+2007-02-11  Miguel de Icaza  <miguel@novell.com>
+
+       * lambda.cs (LambdaExpression.Compatible): Remove some early code,
+       now all the heavy lifting to check that embedded statements or
+       expressions have the right form is done in the ContextualReturn.
+
+       (ContextualReturn): New class.  
+
+       * ecore.cs (Error_InvalidExpressionStatement): Make a helper
+       method that can be invoked to report 201, so we do not replicate
+       this everywhere.
+
+       * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
+       
+       * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
+       treating tabs as spaces. 
+
+2007-02-09  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
+       * assign.cs: Use full implicit conversion for right side check.
+
+2007-02-09  Marek Safar  <marek.safar@gmail.com>
+
+       * statement.cs (Switch): Switch over boolean type is not standardized.
+
+2007-02-08  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #80755
+       * decl.cs (FindBaseEvent): Don't use method cache for events.
+
+2007-02-07  Marek Safar  <marek.safar@gmail.com>
+
+       * cs-parser.jay: Better syntax error handling.
+
+       * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
+       instead of underlying type value.
+
+2007-02-06  Marek Safar  <marek.safar@gmail.com>
+
+       * driver.cs: Check define identifier before is registered.
+
+       * namespace.cs: Use existing error message.
+
+       * report.cs: New warning.
+
+2007-02-06  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #80742
+       * expression.cs: Delegate Invoke method can be called directly.
+
+2007-02-06  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #80676
+       * class.cs (IsEntryPoint): The Main method can have params modifier.
+
+2007-02-04  Miguel de Icaza  <miguel@novell.com>
+
+       * parameter.cs (Parameter, Parameters): Add Clone method.
+
+       * anonymous.cs (Compatible): Turn method into virtual method, so
+       LambdaExpression can implement a different behavior.
+
+       (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
+       out the basic checking here, so it can be used by
+       LambdaExpressions.
+       
+       * lambda.cs: Introduce "Compatible" function that will do the
+       heavy lifting.
+
+2007-02-02  Marek Safar  <marek.safar@gmail.com>
+
+       * attribute.cs: Unified one error message.
+
+       * class.cs (Class): Use type attributes and not properties to test static
+       class.
+       (IsEntryPoint): Don's pass local variable.
+
+       * convert.cs: Removed duplicate check.
+
+       * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
+
+       * driver.cs: Don't crash when soft reference does not exist.
+
+       * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
+       (UsingEntry): Removed redundant allocation.
+
+       * parameter.cs: Add fast path for type parameters.
+
+       * support.cs: Don't allocate attribute when it's not used.
+
+2007-01-30  Miguel de Icaza  <miguel@novell.com>
+
+       * anonymous.cs
+       (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
+       this into a virtual method, so we can override it in LambdaExpression.
+
+       * driver.cs: Improve diagnostics in case of failure. 
+
+       * cs-tokenizer.cs: Instead of trying to parse a type and a name,
+       write a function that is slightly more complex and that parses:
+
+       type identifier [, type identifier]* )
+
+       The old function would return incorrectly a OPEN_PARENS_LAMBDA for
+       this expression:
+
+               (canEmpty ? i >= 0 : i > 0)
+
+2007-01-30  Raja R Harinath  <rharinath@novell.com>
+
+       * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
+       exception on possibly valid code.
+
+2007-01-29  Raja R Harinath  <rharinath@novell.com>
+
+       * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
+       Push/PopPosition.
+       (parse_opt_type_arguments): Remove.  It's almost the same as
+       parse_less_than.
+       (parse_namespace_or_typename): Use parse_less_than.
+
+2007-01-28  Miguel de Icaza  <miguel@novell.com>
+
+       * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
+       this bug took a few hours to find, because the state saved and
+       restored by PushPosition and PopPosition was ignoring the state of
+       parse_generic_less_than.
+
+       I can also now remove the handling of OP_LT and OP_GT, this solves
+       the big mistery.
+       
+       * cs-tokenizer.cs: store the location for the ARROW token, we use
+       that in the parser.
+
+       (PushPosition, PopPosition): save/restore also `current_token',
+       restore `parse_generic_less_than' (was missing).
+
+       (parse_opt_type_arguments): use parse_type, not
+       parse_namespace_or_typename to parse types.
+
+       * lambda.cs: Empty new file, will eventually have the lambda
+       expression implementation.
+
+       * lambda.test: used to test the internal tokenizer. 
+
+       * report.cs (FeatureIsNotISO1): Rename from
+       FeatureIsNotStandardized, because it was about the language level
+       (1 vs 2) it was not about standarization.
+
+       (FeatureRequiresLINQ): New.
+
+       * support.cs (SeekableStreamReader): Only require that the reader
+       is a TextReader, not a StreamReader, so we can plug StringReader. 
+
+       * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
+       given position in the input stream the following tokens can be
+       parsed as a type followed by an identifier.
+
+       (is_punct): after a '(' if parse_type_and_parameter returns true,
+       then return a special token OPEN_PARENS_LAMBDA which is used to
+       avoid reduce/reduce errors in the grammar for the
+       lambda_expression rules.
+
+       (parse_type): implement a type parser inside the
+       tokenizer, the parser only returns true or false depending on
+       whether the input at a given position can be parsed as a type.
+
+       (peek_token): new method used during type parsing.
+
+2007-01-28  Raja R Harinath  <rharinath@novell.com>
+
+       Fix #80531
+       * anonymous.cs (ScopeInfo.InflateParameters): New.
+       (AnonymousContainer.Resolve): Use it to redirect types of
+       delegate parameters.
+
+2007-01-27  Raja R Harinath  <rharinath@novell.com>
+
+       Fix #80530
+       * expression.cs (Error_InvalidArguments): Don't use two different
+       messages for CS1503.  Use ExtraInformation and
+       SymbolRelatedToPreviousError instead.
+
+       Fix #80358
+       * decl.cs (DeclSpace.initialize_type_params): Don't access
+       'type_params' of a partial class directly.
+
+2007-01-26  Miguel de Icaza  <miguel@novell.com>
+
+       * constant.cs: Removed a handful of out-of-range checks that were
+       not necessary. 
+
+2007-01-25  Marek Safar  <marek.safar@gmail.com>
+
+       * expression.cs (CheckUselessComparison): Add additional check for char
+       constants.
+
+       * namespace.cs: Fixed typo.
+
+2007-01-23  Miguel de Icaza  <miguel@novell.com>
+
+       * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
+       gone, instead we inline the test, preventing the needless casts to
+       longs, ulongs and doubles for the parameters, avoiding calls to
+       methods that overchecked stuff, and instead inlined things
+       nicely. 
+
+2007-01-20  Marek Safar  <marek.safar@gmail.com>
+
+       * cs-parser.jay: Better parameter error handling.
+
+2007-01-17  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #80368, #80522
+       * expression.cs (ArrayCreation.only_constant_initializers): Indicates
+       whether array initializer contains constants only.
+       (ArrayCreation.Emit): Use better formula to decide when
+       are array initializers for static initialization.
+       (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
+       have to emit even constants otherwise they are pre-initialized.
+
+2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
+           Raja R Harinath  <rharinath@novell.com>
+
+       Fix emit order of 'get' vs. 'set'.
+       * support.cs (Accessors): New.
+       * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
+       Note the order in which accessors are declared in the source.
+       * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
+       Refactored from Property.Define and Indexer.Define.
+       (PropertyBase.DefineAccessors): New helper that calls the above in
+       appropriate order as noted by the parser.
+       (Property.Define, Indexer.Define): Update to changes.
+       (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
+
+2007-01-17  Raja R Harinath  <rharinath@novell.com>
+
+       Fix cs0029-6.cs and gcs0029-2.cs (regression)
+       * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
+       there's an implicit conversion from the current type to the target
+       type before converting the underlying constant.
+
+2007-01-16  Marek Safar  <marek.safar@gmail.com>
+
+       * const.cs (ResolveValue): Updated after constant conversion was made more
+       generic.
+
+       * constant.cs (GetAttributableValue): constant to object conversion is
+       used for attributes only.
+       (IntConstant.ConvertImplicitly): Moved from convert to be used in all
+       constant conversions.
+       (LongConstant.ConvertImplicitly): Ditto.
+
+       * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
+       (ImplicitConversionStandard): Handle constant conversion as extra step.
+       It solves the issue when constant conversion was called indirectly like
+       inside array initializer and constant folding was skipped.
+
+       * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
+       this change.
+
+       * statement.cs(ImplicitConversionStandard): Updated after constant
+       conversion was made more generic.
+
+2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
+
+       * expression.cs (As.DoResolve): Use GenericConstraints instead of
+       Constraints, solves the problem where the compiler incorrectly
+       reported that a type parameter was not constrained to a class (Bug
+       80518)
+
+2007-01-14  Marek Habersack  <grendello@gmail.com>
+
+       * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
+
+2007-01-14  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #80368
+       * assign.cs (FieldInitializer): New class implements field
+       initializer statement.
+
+       * attribute.cs: Update after FieldMember rename.
+
+       * class.cs (PropertyBasedMember): New common class for property based
+       types.
+       (InterfaceMemberBase): New base class for all members which can be used as
+       an interface members.
+       (MethodCore): Moved really common code to InterfaceMemberBase.
+       (Method.Define): Equal and GetHasCode detection is relevant for methods
+       only.
+       (MethodData.Define): Don't assume that public event implements an
+       interface automatically.
+       (MethodData.DefineMethodBuilder): Issue an error even if only extern
+       modifier is used.
+       (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
+       (FieldMember): Merged with FieldBase.
+       (EventProperty.AEventPropertyAccessor): New specialization to check whether
+       event extern modifier can be used.
+       (EventField.EventFieldAccessor): Moved event field specific code here.
+       (Event.AllowedModifiers): Even event can be extern.
+       (Event.FindOutBaseMethod): New override specific to events.
+       (Indexer.parameters): Reintroduce parameters because base class holds
+       only properties common data.
+       (Indexer.CheckForDuplications): Indexers are threated as methods so we
+       need do extra parameters check.
+
+       * const.cs: Update after FieldMember rename.
+
+       * decl.cs (MemberCache.FindBaseEvent): New method.
+
+       * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
+       to reflect that indexer is now derived from PropertyBased.
+
+       * ecore.cs (GetMemberType): Made public.
+       (EventExpr.ResolveMemberAccess): Use right event cache and checks for
+       obsolete event.
+
+       * flowanalysis.cs, statement.cs: Update after FieldMember rename.
+       
+       * typemanager.cs (CSharpSignature): Correctly print event accessors.
+       (RegisterEvent): Removed.
+       (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
+       (GetPrivateFieldOfEvent): Renamed to GetEventField.
+
+2007-01-11  Raja R Harinath  <rharinath@novell.com>
+
+       Fix #80249
+       * statement.cs (CollectionForeach.TryType): Prefer generic
+       GetEnumerator over non-generic variant.  Fix code to follow comments.
+
+2007-01-09  Raja R Harinath  <rharinath@novell.com>
+
+       Fix #80446
+       * support.cs (ReflectionParameter): Don't use an invalid index on
+       the generic parameter data.
+
+2007-01-08  Miguel de Icaza  <miguel@novell.com>
+
+       * driver.cs: Just add a tiny bit of infrastructure.
+
+2007-01-02  Marek Safar  <marek.safar@gmail.com>
+
+       * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
+       where field type is struct from current assembly.
+       
+       * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
+       it is possible.
+
+2007-01-02  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #80381
+       * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
+       the core types.
+
+       * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
+       messages.
+       (Namespace.LookupType): Always use core types from corlib when speficied.
+
+       * report.cs: A new warning.
+
+       * rootcontext.cs (BootstrapCorlib_ResolveInterface,
+       BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
+       (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
+
+       * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
+       (InitCoreTypes): Set expression type of object_type and value_type
+       immediately after lookup.
+
+2007-01-01  Miguel de Icaza  <miguel@novell.com>
+
+       * cs-tokenizer.cs: Accept Pc class characters (Connector
+       Punctuation) as valid identifiers.  Fixes #78259
+
+       * expression.cs (Invocation.DoResolve): Moved the check for the
+       use of `this' for doing method calls to the Invocation resolution
+       step, after overload resolution has taken place instead of doing
+       the check at the low-level `This.DoResolve' level.
+
+       The `This.DoResolve' happens before overload resolution, so it has
+       no way of knowing if the method that will be called will be
+       instace or static, triggering an erroneous report for cs0188 (Bug
+       78113).
+
+       We now do the check for instance method invocations after we know
+       what method will be called.
+
+       (This.CheckThisUsage): Move the actual use of this structure
+       checking into its own method and expose it. 
+
+       * Everywhere that called Error_ValueCannotBeConverted: pass a new
+       EmitContext.
+
+       Exceptions: Null.ConvertImplicitly,
+       Constant.ImplicitConversionRequired as there are too many call
+       sites for passing the ec. 
+
+       * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
+       EmitContext, if the value is null, then we do not try to provide
+       the extra information from the error (If a userdefined conversion
+       exists, as UserDefinedConversion requires a non null-EmitContext).
+
+       Fixes: #80347
+
+2006-12-30  Raja R Harinath  <rharinath@novell.com>
+
+       * flowanalysis.cs (MyBitVector): Document some invariants.
+       (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
+       introduced below, and add a couple of others, 
+
+2006-12-30  Marek Safar  <marek.safar@gmail.com>
+
+       * attribute.cs (GetMethodObsoleteAttribute): Uses new
+       GetPropertyFromAccessor and GetEventFromAccessor.
+       
+       * class.cs (MethodCore.CheckBase): A new warning when obsolete member
+       overrides non-obsolete one.
+       (Indexer.Define): Error message has been moved to the parser.
+
+       * cs-parser.jay: Better syntax errors handling.
+
+       * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
+       when an invocation has no arguments.
+
+       * ecore.cs: Removed not used caching.
+
+       * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
+       implementation.
+
+       * report.cs: Add a new warning.
+
+       * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
+
+       * typemanager.cs (enumeration_type): Removed.
+       (CSharpSignature): Reuses IsSpecialMethod.
+       (IsEqual): Hack for MS BCL.
+       (GetPropertyFromAccessor): New method.
+       (GetEventFromAccessor): New method.
+       (IsSpecialMethod): Fixed to handle more cases.
+
+2006-12-30  Marek Safar  <marek.safar@gmail.com>
+
+       * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
+       Made white spaces array static.
+
+       * ecore.cs (RemoveGenericArity): Optimized.
+
+       * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
+       10 times faster).
+       (MyBitVector.initialize_vector): Simplified.
+
+2006-12-22  Miguel de Icaza  <miguel@novell.com>
+
+       * ecore.cs: Am not entirely happy with this hack, but it seems to
+       address the issue in 80257 (a small test case for
+       CreativeDocs.NET). 
+
+       I set the MethodGroupExpr.Type to an internal compiler type
+       (itself in this case) to force the resolution to take place.   Why
+       it does not take place with a null is beyond me.
+
+2006-12-20  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #80288
+       * expression.cs (ResolveOperator): Consider user defined conversion for
+       logical and operator too.
+       (EmitBranchable): Optimization for logical and when full constant folding
+       could not be applied but one operand is constant.
+
+2006-12-19  Marek Safar  <marek.safar@gmail.com>
+
+       * class.cs (GetClassBases): Write 5 times every day, will never use
+       FullName for error reporting.
+
+       * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
+
+2006-12-19  Martin Baulig  <martin@ximian.com>
+
+       * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
+       the symbol file info here.
+
+2006-12-18  Marek Safar  <marek.safar@gmail.com>
+
+       * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
+       of `elseif' is taking then following sections are not taking.
+       Fixes an issue reported on mono mailing list.
+
+2006-12-18  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #80300
+       * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
+       a caller is not taking.
+
+2006-12-18  Raja R Harinath  <rharinath@novell.com>
+
+       * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
+       (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
+       (RootScopeInfo, AnonymousMethodMethod): Update to changes.
+       * iterator.cs: Change several TypeContainer declarations to DeclSpace.
+       * class.cs: Update to changes.
+
+2006-12-17  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #79934
+       * anonymous.cs (CompilerGeneratedClass): Register class in a shared
+       partial container.
+
+       * class.cs (ResolveMembers): Register an iterator in current container and
+       not in shared one.
+
+2006-12-16  Raja R Harinath  <rharinath@novell.com>
+
+       Fix test-543.cs
+       * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
+       satisfy a params annotated parameter.
+
+2006-12-16  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #77014
+       * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
+       paramters correctly and not rely on hacks in Parameters class.
+       (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
+       at any possition.
+       (Invocation.VerifyArgumentsCompat): Ditto.
+       (Invocation.EmitArguments): Changed to correctly emit params arguments at
+       any possition.
+
+       * parameter.cs (HasParams): Don't assume that params is the last one.
+
+       * support.cs (ReflectionParameters.ctor): Look for params attribute
+       correctly.
+       (ReflectionParameters.ParameterType): Removed hack when we returned last
+       parameter for out of range parameters.
+       (ParameterName, ParameterModifier): Ditto.
+
+2006-12-14  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #79987
+       * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
+       when assembly is not CLS compliant but type is. I have no idea why is this
+       allowed.
+
+       * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
+
+2006-12-13  Miguel de Icaza  <miguel@novell.com>
+
+       * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
+       in struct constructors, they are basically no-ops.
+
+2006-12-12  Marek Safar  <marek.safar@gmail.com>
+
+       * cs-tokenizer.cs (Position): Save preprocessor status too.
+
+2006-12-12  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #77794
+       * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
+
+2006-12-12  Marek Safar  <marek.safar@gmail.com>
+
+       * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
+       Fixes #69299.
+       (pp_expr): Report error for an invalid expression.
+       (handle_preprocessing_directive): Simplified; add more error checking.
+
+2006-12-11  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #74939
+       * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
+       directives handling.
+
+2006-12-10  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bugs #80093, and #75984
+       * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
+       logic, it seems to me as it worked before "by coincidence".
+       (xtoken): Simplified to use reworked handle_preprocessing_directive.
+       (cleanup): Enabled endif check.
+
+2006-12-09  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #80162
+       * statement.cs (CollectionForeach.TryType): Generics and non-generics
+       enumerators are never ambiguous.
+
+2006-12-08  Raja R Harinath  <rharinath@novell.com>
+
+       Fix #80060
+       * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
+
+2006-12-06  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #80144
+       * class.cs (EventProperty.Define): Explicit implementation means
+       that an even is used.
+
+2006-12-06  Marek Safar  <marek.safar@gmail.com>
+
+       Fixes the operators implementation (part II)
+
+       * cfold.cs (DoConstantNumericPromotions): Renamed to
+       DoBinaryNumericPromotions and simplified.
+       (BinaryFold): Couple of conversion fixes; simplified.
+
+       * constant.cs, ecore.cs, literal.cs
+       (ToType): Renamed to ConvertImplicitly.
+       (Reduce): Renamed to ConvertExplicitly.
+
+       * class.cs, convert.cs: Updated.
+
+       * expression.cs: TryReduce doesn't throw an exception.
+
+2006-12-01  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #80108
+       * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
+       compatible.
+
 2006-11-30  Marek Safar  <marek.safar@gmail.com>
 
-       Correct unary operators implementation (part I)
+       Fixes unary operators implementation (part I)
        Also fixes #80026
 
        * cfold.cs (Error_CompileTimeOverflow): Made internal