**** Merged from MCS ****
[mono.git] / mcs / gmcs / ChangeLog
index 09ed9712080cc39e9ef75cbc6754efe6cbe9cd6e..c7cc4ec292da94d76b42e038465b2a3d3b55d65c 100755 (executable)
@@ -1,3 +1,513 @@
+2004-04-28  Martin Baulig  <martin@ximian.com>
+
+       * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
+       (Block.AddLabel): Call DoLookupLabel() to only search in the
+       current block.
+
+2004-04-28  Martin Baulig  <martin@ximian.com>
+
+       * cfold.cs (ConstantFold.BinaryFold): Added special support for
+       comparing StringConstants and NullLiterals in Equality and Inequality.
+
+2004-04-28  Jackson Harper  <jackson@ximian.com>
+
+       * driver.cs: Attempt to load referenced assemblies from the
+       GAC. This is the quick and dirty version of this method that
+       doesnt take into account versions and just takes the first
+       canidate found. Will be good enough for now as we will not have more
+       then one version installed into the GAC until I update this method.
+
+2004-04-28  Martin Baulig  <martin@ximian.com>
+
+       * typemanager.cs (TypeManager.CheckStructCycles): New public
+       static method to check for cycles in the struct layout.
+
+       * rootcontext.cs (RootContext.PopulateTypes): Call
+       TypeManager.CheckStructCycles() for each TypeContainer.
+       [Note: We only need to visit each type once.]
+
+2004-04-28  Martin Baulig  <martin@ximian.com>
+
+       * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
+
+       * const.cs (Const.LookupConstantValue): Return a `bool' signalling
+       success and added `out object value'.  Use a `bool resolved' field
+       to check whether we've already been called rather than
+       `ConstantValue != null' since this breaks for NullLiterals.
+
+2004-04-28  Raja R Harinath  <rharinath@novell.com>
+
+       * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
+       setting of this flag, since the 'set' method may be non-public.
+
+2004-04-28  Raja R Harinath  <rharinath@novell.com>
+
+       * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
+       check on current_vector.Block.
+
+2004-04-27  Martin Baulig  <martin@ximian.com>
+
+       * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
+       a field initializer.  Fixes #56459.
+
+2004-04-27  Martin Baulig  <martin@ximian.com>
+
+       * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
+       we're not attempting to use an indexer.  Fixes #52154.
+
+2004-04-27  Martin Baulig  <martin@ximian.com>
+
+       * statement.cs (Return): Don't create a return label if we don't
+       need it; reverts my change from January 20th.  Thanks to Ben
+       Maurer for this.
+
+2004-04-27  Martin Baulig  <martin@ximian.com>
+
+       According to the spec, `goto' can only leave a nested scope, but
+       never enter it.
+
+       * statement.cs (Block.LookupLabel): Only lookup in the current
+       block, don't recurse into parent or child blocks.
+       (Block.AddLabel): Check in parent and child blocks, report
+       CS0140/CS0158 if we find a duplicate.
+       (Block): Removed this indexer for label lookups.
+       (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
+       this already does the error reporting for us.
+
+       * flowanalysis.cs
+       (FlowBranching.UsageVector.Block): New public variable; may be null.
+       (FlowBranching.CreateSibling): Added `Block' argument.
+       (FlowBranching.LookupLabel): New public virtual method.  Lookup a
+       label for the target of a `goto' and check whether we're not
+       leaving a `finally'.
+
+2004-04-27  Martin Baulig  <martin@ximian.com>
+
+       * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
+       a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
+       just for returns).
+
+2004-04-27  Martin Baulig  <martin@ximian.com>
+
+       * statement.cs (Block.AddLabel): Also check for implicit blocks
+       and added a CS0158 check.
+
+2004-04-27  Martin Baulig  <martin@ximian.com>
+
+       * flowanalysis.cs (FlowBranchingLoop): New class.
+       (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
+       UsageVector's instead of an ArrayList.
+       (FlowBranching.Label): Likewise.
+       (FlowBranching.UsageVector.MergeBreakOrigins): New method.
+       (FlowBranching.AddBreakVector): New method.
+
+2004-04-27  Miguel de Icaza  <miguel@ximian.com>
+
+       * attribute.cs: Small regression fix: only convert the type if we
+       the type is different, fixes System.Drawing build.
+
+2004-04-27  Martin Baulig  <martin@ximian.com>
+
+       * attribute.cs (Attribute.Resolve): If we have a constant value
+       for a named field or property, implicity convert it to the correct
+       type.
+
+>>>>>>> 1.1450
+2004-04-27  Raja R Harinath  <rharinath@novell.com>
+
+       * statement.cs (Block.Block): Implicit blocks share
+       'child_variable_names' fields with parent blocks.
+       (Block.AddChildVariableNames): Remove.
+       (Block.AddVariable): Mark variable as "used by a child block" in
+       every surrounding block.
+       * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
+       been used in a child block, complain about violation of "Invariant
+       meaning in blocks" rule.
+       * cs-parser.jay (declare_local_variables): Don't use
+       AddChildVariableNames.
+       (foreach_statement): Don't create an implicit block: 'foreach'
+       introduces a scope.
+
+2004-04-23  Miguel de Icaza  <miguel@ximian.com>
+
+       * convert.cs (ImplicitNumericConversion): 0 is also positive when
+       converting from 0L to ulong.  Fixes 57522.
+
+2004-04-22  Marek Safar  <marek.safar@seznam.cz>
+
+       * decl.cs (FindMemberToOverride): Fix wrong warning for case when
+        derived class hides via 'new' keyword field from base class (test-242.cs).
+        TODO: Handle this in the more general way.
+        
+       * class.cs (CheckBase): Ditto.
+
+2004-04-22  Marek Safar  <marek.safar@seznam.cz>
+
+       * decl.cs (caching_flags): New member for storing cached values
+       as bit flags.
+       (MemberCore.Flags): New enum where bit flags for caching_flags
+       are defined.
+       (MemberCore.cls_compliance): Moved to caching_flags.
+       (DeclSpace.Created): Moved to caching_flags.
+
+       * class.cs: Use caching_flags instead of DeclSpace.Created
+        
+2004-04-21  Miguel de Icaza  <miguel@ximian.com>
+
+       * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
+       if we are only a derived class, not a nested class.
+
+       * typemanager.cs: Same as above, but do this at the MemberLookup
+       level (used by field and methods, properties are handled in
+       PropertyExpr).   Allow for the qualified access if we are a nested
+       method. 
+
+2004-04-21  Marek Safar  <marek.safar@seznam.cz>
+
+       * class.cs: Refactoring.
+       (IMethodData): New inteface; Holds links to parent members
+       to avoid member duplication (reduced memory allocation).
+       (Method): Implemented IMethodData interface.
+       (PropertyBase): New inner classes for get/set methods.
+       (PropertyBase.PropertyMethod): Implemented IMethodData interface
+       (Event): New inner classes for add/remove methods.
+       (Event.DelegateMethod): Implemented IMethodData interface.
+
+       * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
+       EmitContext (related to class.cs refactoring).
+
+2004-04-21  Raja R Harinath  <rharinath@novell.com>
+
+       * delegate.cs (Delegate.VerifyApplicability): If the number of
+       arguments are the same as the number of parameters, first try to
+       verify applicability ignoring  any 'params' modifier on the last
+       parameter.
+       Fixes #56442.
+
+2004-04-16  Raja R Harinath  <rharinath@novell.com>
+
+       * class.cs (TypeContainer.AddIndexer): Use
+       'ExplicitInterfaceName' to determine if interface name was
+       explicitly specified.  'InterfaceType' is not initialized at this time.
+       (TypeContainer.DefineIndexers): Remove use of temporary list.  The
+       Indexers array is already in the required order.  Initialize
+       'IndexerName' only if there are normal indexers.
+       (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
+       (TypeContainer.Emit): Emit DefaultMember attribute only if
+       IndexerName is initialized.
+       Fixes #56300.
+
+2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
+
+       * enum.cs (Enum.DefineType): Don't allow char as type for enum.
+       Fixes #57007
+
+2004-04-15  Raja R Harinath  <rharinath@novell.com>
+
+       * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
+       attributes.
+       Fix for #56456.
+
+       * attribute.cs (Attribute.Resolve): Check for duplicate named
+       attributes.
+       Fix for #56463.
+
+2004-04-15  Miguel de Icaza  <miguel@ximian.com>
+
+       * iterators.cs (MarkYield): track whether we are in an exception,
+       and generate code accordingly.  Use a temporary value to store the
+       result for our state.
+
+       I had ignored a bit the interaction of try/catch with iterators
+       since their behavior was not entirely obvious, but now it is
+       possible to verify that our behavior is the same as MS .NET 2.0
+
+       Fixes 54814
+
+2004-04-14  Miguel de Icaza  <miguel@ximian.com>
+
+       * iterators.cs: Avoid creating temporaries if there is no work to
+       do. 
+
+       * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
+       Enumerations, use TypeManager.EnumToUnderlying and call
+       recursively. 
+
+       Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
+       bug #57013
+
+       (This.Emit): Use EmitContext.EmitThis to emit our
+       instance variable.
+
+       (This.EmitAssign): Ditto.
+
+       * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
+       codepaths, we will move all the functionality into
+       Mono.CSharp.This 
+
+       (FieldExpr.EmitAssign): Ditto.
+
+       This fixes several hidden bugs that I uncovered while doing a code
+       review of this today.
+
+       * codegen.cs (EmitThis): reworked so the semantics are more clear
+       and also support value types "this" instances.
+
+       * iterators.cs: Changed so that for iterators in value types, we
+       do not pass the value type as a parameter.  
+
+       Initialization of the enumerator helpers is now done in the caller
+       instead of passing the parameters to the constructors and having
+       the constructor set the fields.
+
+       The fields have now `assembly' visibility instead of private.
+
+2004-04-11  Miguel de Icaza  <miguel@ximian.com>
+
+       * expression.cs (Argument.Resolve): Check if fields passed as ref
+       or out are contained in a MarshalByRefObject.
+
+       * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
+       another compiler type.
+
+2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * class.cs (Indexer.Define): use the new name checking method.
+       Also, return false on an error.
+       * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
+       (is_identifier_[start/part]_character): make static.
+
+2004-04-10  Miguel de Icaza  <miguel@ximian.com>
+
+       * expression.cs (Binary.ResolveOperator): Do no append strings
+       twice: since we can be invoked more than once (array evaluation)
+       on the same concatenation, take care of this here.  Based on a fix
+       from Ben (bug #56454)
+
+2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * codegen.cs: Fix another case where CS1548 must be reported (when 
+       delay-sign isn't specified and no private is available #56564). Fix
+       loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
+       error when MCS is used on the MS runtime and we need to delay-sign 
+       (which seems unsupported by AssemblyBuilder - see #56621).
+
+2004-04-08  Marek Safar  <marek.safar@seznam.cz>
+
+       * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
+       (TypeManager.ComputeNamespaces): Faster implementation for
+       Microsoft runtime.
+
+       * compiler.csproj: Updated AssemblyName to mcs.
+
+2004-05-11  Jackson Harper  <jackson@ximian.com>
+
+       * Makefile: Preserve MONO_PATH
+       
+2004-05-11  Jackson Harper  <jackson@ximian.com>
+
+       * Makefile: Use mono and mcs to build gmcs
+       
+2004-05-03  Miguel de Icaza  <miguel@ximian.com>
+
+       * codegen.cs: Add patch from Robert Shade
+       <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
+       sync with mcs.
+
+2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * CryptoConvert.cs: Updated to latest version. Fix issue with 
+       incomplete key pairs (#57941).
+
+2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * codegen.cs: Fix another case where CS1548 must be reported (when 
+       delay-sign isn't specified and no private is available #56564). Fix
+       loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
+       error when MCS is used on the MS runtime and we need to delay-sign 
+       (which seems unsupported by AssemblyBuilder - see #56621).
+
+2004-04-29  Jackson Harper  <jackson@ximian.com>
+
+       * Makefile: Set MONO_PATH to use the bootstrap corlib
+       * driver.cs: Check the GAC for referenced assemblies.
+               
+2004-04-29  Martin Baulig  <martin@ximian.com>
+
+       * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
+
+2004-04-07  Martin Baulig  <martin@ximian.com>
+
+       * expression.cs (Binary.ResolveOperator): Added special case for
+       Equality/Inequality between a type parameter and a null literal.
+
+2004-04-07  Martin Baulig  <martin@ximian.com>
+
+       * convert.cs: Check null literal -> type parameter conversions.
+
+2004-04-07  Martin Baulig  <martin@ximian.com>
+
+       * generic.cs (ConstructedType.CheckConstraints): Enforce the
+       `class' and `struct' constraints.
+
+2004-04-07  Martin Baulig  <martin@ximian.com>
+
+       * generic.cs (SpecialConstraint): New public enum.
+       (Constraints.Resolve): Added support for the `class' and `struct'
+       constraints.
+
+       * cs-parser.jay (type_parameter_constraint): Added support for the
+       `class' and `struct' constraints.
+
+2004-04-07  Martin Baulig  <martin@ximian.com>
+
+       * support.cs (GenericConstraints): Replaced `Types' by
+       `ClassConstraint' and `InterfaceConstraints'; added
+       `HasClassConstraint'.   
+
+2004-04-07  Martin Baulig  <martin@ximian.com>
+
+       * generic.cs
+       (Constraints.InterfaceConstraints): New public property.
+       (Constraints.Types): Make this property public
+       (TypeParameter): Implement IMemberContainer.
+       (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
+       instead of a TypeBuilder/MethodBuilder; pass the interface
+       constraints to TypeManager.AddTypeParameter().
+       (TypeParameter.DefineType): Just take an EmitContext and no
+       TypeBuilder/MethodBuilder.  Use the new public API.
+
+       * typemanager.cs (TypeManager.AddTypeParameter): Added
+       `TypeExpr[]' argument; add the interfaces to the
+       `builder_to_ifaces' hash.
+       (TypeManager.LookupMemberContainer): For
+       GenericTypeParameterBuilders, get the TypeParameter from the
+       `builder_to_type_param'.
+       (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
+       the TypeParameter and call FindMembers on it.
+
+2004-04-07  Martin Baulig  <martin@ximian.com>
+
+       * class.cs
+       (MethodCore.GenericMethod): Moved this field here from Method.
+       (MethodCore.IsDuplicateImplementation): Take the number of type
+       parameters into account if we're a generic method.
+
+       * expression.cs (Invocation.InferTypeArguments): Don't return true
+       if `arguments' is null; we still need to check whether we actually
+       don't need to infer anything in this case.
+       (MemberAccess): Merged the functionality from GenericMemberAccess
+       into this class.
+
+       * generic.cs (GenericMemberAccess): Removed.
+
+2004-04-05  Martin Baulig  <martin@ximian.com>
+
+       * decl.cs (MemberCore): For generic classes, interfaces and
+       structs, `Name' now includes the number of type parameters
+       ("Stack!1.Node!1").
+       (DeclSpace.FindType): Removed the `num_type_args' argument; we now
+       encode the number of type arguments in the type name.
+
+       * expression.cs (Expression.MemberLookup): Removed the
+       `num_type_args' argument; we now encode the number of type
+       arguments in the type name.
+
+       * ecore.cs (SimpleName): Encode the number of type arguments in
+       the type name itself.
+
+       * generic.cs (ConstructedType): Likewise.
+
+       * tree.cs (Tree.RecordDecl): Take a `string' instead of a
+       `MemberName'; we now include the number of type parameters in the
+       type name.
+
+       * typemanager.cs (TypeManager.CheckGeneric): Removed.
+       (TypeManager.MemberLookup): Removed the
+       `num_type_args' argument; we now encode the number of type
+       arguments in the type name.     
+
+2004-04-03  Martin Baulig  <martin@ximian.com>
+
+       * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
+       (MemberCore.MemberName): Moved here from MemberBase.
+       (DeclSpace.SetParameterInfo): Just take the constraints as an
+       ArrayList; we already have the type parameters in our
+       `MemberName'; also do the CS0080 reporting here.
+
+       * cs-parser.jay (struct_declaration): Use `member_name' instead of
+       `IDENTIFIER opt_type_parameter_list'; when constructing our
+       `MemberName', it'll already include our type parameters.
+       (class_declaration, interface_declaration): Likewise.
+       (delegate_declaration): Likewise.
+       (MakeName): Take a MemberName and return a MemberName.
+       The following two changes are required to avoid shift/reduce conflicts:
+       (member_name): Don't include a TypeName anymore; ie. this is now
+       just 'IDENTIFIER opt_type_parameter_list'.
+       (property_declaration, event_declaration): Use a
+       `namespace_or_type_name' instead of a `member_name'.            
+
+2004-04-03  Martin Baulig  <martin@ximian.com>
+
+       * decl.cs (MemberName): Renamed to `TypeName' and created a new
+       `MemberName' class.
+       (TypeName): Formerly known as MemberName.
+
+       * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
+       instead of a `MemberName'.
+
+       * cs-parser.jay (namespace_or_type_name): Create a TypeName.
+       (member_name): New rule; create a MemberName.
+
+2004-04-02  Martin Baulig  <martin@ximian.com>
+
+       * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
+       (CS0305 and CS0308).
+
+2004-04-02  Martin Baulig  <martin@ximian.com>
+
+       * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
+       support for nested types.
+
+2004-04-02  Martin Baulig  <martin@ximian.com>
+
+       * ecore.cs (IAlias): New public interface.
+       (TypeExpr, TypeExpression): Implement IAlias.
+       (TypeAliasExpression): New public class.
+
+       * namespace.cs (Namespace): Implement IAlias.
+       (Namespace.Lookup): Return an IAlias instead on an object.
+       (Namespace.DefineName): Take an IAlias instead of an object.
+       (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
+       an object.
+       (NamespaceEntry.UsingAlias): Take a Membername instead of an
+       Expression.
+       (NamespaceEntry.LookupAlias): Return an IAlias instead on an
+       object.
+       (NamespaceEntry.Lookup): Likewise.
+
+       * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
+       instead of a Type.      
+
+       * decl.cs (DeclSpace): Implement IAlias.
+       (DeclSpace.LookupAlias): Return an IAlias instead of a string.
+
+       * generic.cs (ConstructedType): Improved error checking.
+
+2004-04-02  Martin Baulig  <martin@ximian.com>
+
+       * convert.cs: Added type parameter conversions.
+
+       * ecore.cs
+       (UnboxCast.Emit): Emit an `unbox.any' for type params.
+       (ClassCast.Emit): If the source type is a type parameter, box it.
+       If the target type is a type parameter, emit an `unbox.any'
+       instead of a `classcast'.1      
+
+2004-04-01  Martin Baulig  <martin@ximian.com>
+
+       * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
+
 2004-04-01  Martin Baulig  <martin@ximian.com>
 
        * expression.cs (Invocation.EmitCall): If we're invoking a method
        MemberName into an expression.
        (method_header): Use namespace_or_type_name instead of member_name.     
 
+2004-04-07  Miguel de Icaza  <miguel@ximian.com>
+
+       * rootcontext.cs: Add new types to the boot resolution.
+
+       * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
+       MulticastDelegate is not allowed.
+
+       * typemanager.cs: Add new types to lookup: System.TypedReference
+       and ArgIterator.
+
+       * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
+       check for TypedReference or ArgIterator, they are not allowed. 
+
+       * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
+       makes us properly catch 1510 in some conditions (see bug 56016 for
+       details). 
+
+2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
+
+       * CryptoConvert.cs: update from corlib version
+       with endian fixes.
+
+2004-04-05  Miguel de Icaza  <miguel@ximian.com>
+
+       * class.cs (Indexer.Define): Check indexername declaration
+
+2004-04-05  Marek Safar  <marek.safar@seznam.cz>
+
+       * attribute.cs (IsClsCompliant): Fixed problem with handling
+       all three states (compliant, not-compliant, undetected).
+
+2004-03-30  Marek Safar  <marek.safar@seznam.cz>
+
+       * attribute.cs (Attribute): Location is now public.
+       (Resolve): Store resolved arguments (pos_values) in attribute class.
+       Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
+       (GetClsCompliantAttributeValue): New method that gets
+       CLSCompliantAttribute value.
+       (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
+       if exists else null.
+       (AttributeTester): New class for CLS-Compliant verification routines.
+
+       * class.cs (Emit): Add CLS-Compliant verification.
+       (Method.GetSignatureForError): Implemented.
+       (Constructor.GetSignatureForError): Implemented
+       (Constructor.HasCompliantArgs): Returns if constructor has
+       CLS-Compliant arguments.
+       (Constructor.Emit): Override.
+       (Construcor.IsIdentifierClsCompliant): New method; For constructors
+       is needed to test only parameters.
+       (FieldBase.GetSignatureForError): Implemented.
+       (TypeContainer): New member for storing base interfaces.
+       (TypeContainer.FindMembers): Search in base interfaces too.
+
+       * codegen.cs (GetClsComplianceAttribute): New method that gets
+       assembly or module CLSCompliantAttribute value.
+       (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
+       for assembly.
+       (ModuleClass.Emit): Add error 3012 test.
+
+       * const.cs (Emit): Override and call base for CLS-Compliant tests.
+
+       * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
+       state for all decl types.
+       (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
+       if CLS-Compliant tests are required.
+       (IsClsCompliaceRequired): New method. Analyze whether code
+       must be CLS-Compliant.
+       (IsExposedFromAssembly): New method. Returns true when MemberCore
+       is exposed from assembly.
+       (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
+       value or gets cached value.
+       (HasClsCompliantAttribute): New method. Returns true if MemberCore
+       is explicitly marked with CLSCompliantAttribute.
+       (IsIdentifierClsCompliant): New abstract method. This method is
+       used to testing error 3005.
+       (IsIdentifierAndParamClsCompliant): New method. Common helper method
+       for identifier and parameters CLS-Compliant testing.
+       (VerifyClsCompliance): New method. The main virtual method for
+       CLS-Compliant verifications.
+       (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
+       null. I don't know why is null (too many public members !).
+       (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
+       and get value of first CLSCompliantAttribute that found.
+
+       * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
+       (VerifyClsCompliance): Override and add extra tests.
+
+       * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
+       clscheck- disable CLS-Compliant verification event if assembly is has
+       CLSCompliantAttribute(true).
+
+       * enum.cs (Emit): Override and call base for CLS-Compliant tests.
+       ApllyAttribute is now called in emit section as in the other cases.
+       Possible future Emit integration.
+       (IsIdentifierClsCompliant): New override.
+       (VerifyClsCompliance): New override.
+       (GetEnumeratorName): Returns full enum name.
+
+       * parameter.cs (GetSignatureForError): Implemented.
+
+       * report.cs (WarningData): New struct for Warning message information.
+       (LocationOfPreviousError): New method.
+       (Warning): New method. Reports warning based on the warning table.
+       (Error_T): New method. Reports error based on the error table.
+
+       * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
+       verifications are done here.
+
+       * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
+
+       * typemanager.cs (cls_compliant_attribute_type): New member thath holds
+       CLSCompliantAttribute.
+       (all_imported_types): New member holds all imported types from other
+       assemblies.
+       (LoadAllImportedTypes): New method fills static table with exported types
+       from all referenced assemblies.
+       (Modules): New property returns all assembly modules.
+
+2004-03-30  Miguel de Icaza  <miguel@ximian.com>
+
+       * cs-parser.jay: Add a rule to catch wrong event syntax instead of
+       throwing a parser error.
+
+       * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
+       which removes the hardcoded get_/set_ prefixes for properties, as
+       IL allows for the properties to be named something else.  
+
+       Bug #56013
+
+       * expression.cs: Do not override operand before we know if it is
+       non-null.  Fix 56207
+
+2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * typemanager.cs: support for pinned variables.
+
+2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * decl.cs, typemanager.cs: Avoid using an arraylist
+       as a buffer if there is only one result set.
+
+2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * expression.cs: Make sure you cant call a static method
+       with an instance expression, bug #56174.
+
+2004-03-29  Miguel de Icaza  <miguel@ximian.com>
+
+       * class.cs (IsDuplicateImplementation): Improve error reporting to
+       flag 663 (method only differs in parameter modifier).
+
+       * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
+       in preprocessor directives.
+
+       * location.cs (LookupFile): Allow for the empty path.
+
+       * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
+       better approach for some of that patch, but its failing with the
+       CharSet enumeration.  For now try/catch will do.
+
+       * typemanager.cs: Do not crash if a struct does not have fields.
+       Fixes 56150.
+
+2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * expression.cs: cs0213, cant fix a fixed expression.
+       fixes 50231.
+
+2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * cs-parser.jay: detect invalid embeded statements gracefully.
+       bug #51113.
+
+2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
+       As a regex:
+       s/
+       the invocation type may not be a subclass of the tye of the item/
+       The type of the item must be a subclass of the invocation item.
+       /g
+
+       Fixes bug #50820.
+
+2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * attribute.cs: Added methods to get a string and a bool from an
+       attribute. Required to information from AssemblyKeyFileAttribute,
+       AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
+       * codegen.cs: Modified AssemblyName creation to include support for
+       strongnames. Catch additional exceptions to report them as CS1548.
+       * compiler.csproj: Updated include CryptoConvert.cs.
+       * compiler.csproj.user: Removed file - user specific configuration.
+       * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
+       Mono.Security assembly. The original class is maintained and tested in
+       /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
+       * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
+       like CSC 8.0 (C# v2) supports.
+       * Makefile: Added CryptoConvert.cs to mcs sources.
+       * rootcontext.cs: Added new options for strongnames.
+
+2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * driver.cs: For --expect-error, report error code `2'
+       if the program compiled with no errors, error code `1' if
+       it compiled with an error other than the one expected.
+
+2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * compiler.csproj: Updated for Visual Studio .NET 2003.
+       * compiler.csproj.user: Updated for Visual Studio .NET 2003.
+       * compiler.sln: Updated for Visual Studio .NET 2003.
+
+2004-03-24  Ravi Pratap M  <ravi@ximian.com>
+
+       * expression.cs: Fix bug #47234. We basically need to apply the
+       rule that we prefer the conversion of null to a reference type
+       when faced with a conversion to 'object' (csc behaviour).
+
+2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * statement.cs: Shorter form for foreach, eliminates
+       a local variable. r=Martin.
+
+2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
+       checks if we can use brtrue/brfalse to test for 0.
+       * expression.cs: use the above in the test for using brtrue/brfalse.
+       cleanup code a bit.
+
+2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * expression.cs: Rewrite string concat stuff. Benefits:
+
+       - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
+       - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
+       rather than a concat chain.
+
+       * typemanager.cs: Add lookups for more concat overloads.
+
+2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * expression.cs: Emit shorter il code for array init.
+
+       newarr
+       dup
+       // set 1
+
+       // set 2
+
+       newarr
+       stloc.x
+
+       ldloc.x
+       // set 1
+
+       ldloc.x
+       // set 2
+
+2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * statement.cs: Before, two switch blocks would be merged if the
+       total size of the blocks (end_item - begin_item + 1) was less than
+       two times the combined sizes of the blocks.
+
+       Now, it will only merge if after the merge at least half of the
+       slots are filled.
+
+       fixes 55885.
+
+2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * class.cs : csc build fix for GetMethods(). See bug #52503.
+
+2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * expression.cs: Make sure fp comparisons work with NaN.
+       This fixes bug #54303. Mig approved this patch a long
+       time ago, but we were not able to test b/c the runtime
+       had a related bug.
+
+2004-03-19  Miguel de Icaza  <miguel@ximian.com>
+
+       * ecore.cs (TypExpr.GetHashCode): implement this overload. 
+
 2004-03-19  Martin Baulig  <martin@ximian.com>
 
        * class.cs (MemberCore.IsDuplicateImplementation): Check whether
 
        Also, it fixes bug 52458 which is that nested classes are not
        taken into account when finding the base class member.
-       
+
        Reviewed/Approved by Martin.
 
 2004-03-17  Martin Baulig  <martin@ximian.com>
        positions and don't mix them with character offsets to the buffer.
 
        Patch from Gustavo Giráldez
-       
+
 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
 
        * interface.cs (InterfaceSetGetBase): Removed double member
 
        * expression.cs (Invocation.EmitCall): Miguel's last commit
        caused a regression. If you had:
-       
+
            T t = null;
            t.Foo ();
 
        In Foo the implict this would be null.
-       
+
 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
 
        * expression.cs (Invocation.EmitCall): If the method is not
 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
 
        * codegen.cs: Implemented attribute support for modules.
-        New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
-        Assembly/Module functionality.
-        
-        * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
-        interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
-        Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
+       New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
+       Assembly/Module functionality.
+
+       * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
+       interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
+       Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
 
 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
 
                public MyEnumerator GetEnumerator () {
                        return new MyEnumerator(this);
                }
-       
+
                IEnumerator IEnumerable.GetEnumerator () {
                        ...
                }
 
        Would have the interface methods called, even if there were public impls of the
        method. In a struct, this lead to invalid IL code.
-       
+
 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
 
-        * const.cs: Const is now derived from FieldBase. Method EmitConstant name
+       * const.cs: Const is now derived from FieldBase. Method EmitConstant name
          renamed to Emit.
 
-        * delegate.cs (Define): Fixed crash when delegate type is undefined.
-        
+       * delegate.cs (Define): Fixed crash when delegate type is undefined.
+
 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
 
        * cs-parser.jay: Fix small regression: we were not testing V2
 
 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
 
-        * decl.cs (GetSignatureForError): New virtual method to get full name
+       * decl.cs (GetSignatureForError): New virtual method to get full name
          for error messages.
-        
+
        * attribute.cs (IAttributeSupport): New interface for attribute setting.
          Now it is possible to rewrite ApplyAttributes method to be less if/else.
 
-        * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
+       * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
          Duplicated members and code in these classes has been removed.
          Better encapsulation in these classes.
 
 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
 
        * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
-        in the member name duplication tests. Property and operator name duplication
-        was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
+       in the member name duplication tests. Property and operator name duplication
+       was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
 
 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
 
 
        * interface.cs (Emit): Apply attributes on the get and set
        accessors of properties and indexers too.
-       
+
        * attribute.cs (ApplyAttributes): Modify accordingly to use the
        right MethodBuilder when applying attributes to the get and set accessors.
 
 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
 
        * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
-        setting for default constructors.
+       setting for default constructors.
        For default constructors are almost every time set wrong Modifier. The
        generated IL code has been alright. But inside mcs this values was
        wrong and this was reason why several of my CLS Compliance tests
        assinged in a 'try'; fixes exception4.cs.
 
 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
-        * class.cs : Implemented parameter-less constructor for TypeContainer
-        
-        * decl.cs: Attributes are now stored here. New property OptAttributes
-        
-        * delegate.cs, enum.cs, interface.cs: Removed attribute member.
-        
-        * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
+       * class.cs : Implemented parameter-less constructor for TypeContainer
+
+       * decl.cs: Attributes are now stored here. New property OptAttributes
+
+       * delegate.cs, enum.cs, interface.cs: Removed attribute member.
+
+       * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
 
 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
 
        * typemanager.cs (CSharpSignature): Now reports also inner class name.
-          (CSharpSignature): New method for indexer and property signature.
+         (CSharpSignature): New method for indexer and property signature.
 
 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
 
 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
 
        * cs-parser.jay: Fixed problem where the last assembly attribute
-          has been applied also to following declaration (class, struct, etc.)
-          
+         has been applied also to following declaration (class, struct, etc.)
+         
 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
 
        * class.cs: Added error CS0538, CS0539 reporting.
-        Fixed crash on Microsoft runtime when field type is void.
+       Fixed crash on Microsoft runtime when field type is void.
 
        * cs-parser.jay: Added error CS0537 reporting.
 
        * pending.cs: Added error CS0535 reporting.
-        Improved error report for errors CS0536, CS0534.
+       Improved error report for errors CS0536, CS0534.
 
 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
 
        Merge a few bits from the Anonymous Method MCS tree.
-       
+
        * statement.cs (ToplevelBlock): New class for toplevel methods,
        will hold anonymous methods, lifted variables.
 
        Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
 
        Fixes: 52933
-       
+
 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
 
        * expression.cs (Binary.ResolveOperator): Perform an implicit
        * ecore.cs (Expression.Resolve): Do not flag error 654
        (Methodgroupd needs parenthesis) if running on the V2 compiler, as
        we allow conversions from MethodGroups to delegate types now.
-       
+
        * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
        assignments in v2 either.
 
        Applied patch from Benjamin Jemlich 
 
        * expression.cs (UnaryMutator): Avoid leaking local variables. 
-       
+
 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
 
        * cs-tokenizer.cs (IsCastToken): Allow the various native types
                (XXX) int.MEMBER ()
 
        Fixed 49836 and all the other dups
-       
+
 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
 
        * driver.cs: Implement /win32res and /win32icon.
        initialization of events. 
 
        * ecore.cs: Better report missing constructors.
-       
+
        * expression.cs (Binary.ResolveOperator): My previous bug fix had
        the error reporting done in the wrong place.  Fix.
 
        Jemlich that fixes bug #52597, MCS was generating invalid code for
        idisposable structs.   Thanks to Ben for following up with this
        bug as well.
-       
+
 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
 
        * driver.cs: Allow assemblies without code to be generated, fixes
   CS0077
 
 2004-01-03 Todd Berman <tberman@gentoo.org>
-       
+
        * ecore.cs, attribute.cs:
        Applying fix from #52429.
 
        * class.cs (FindMembers): Remove foreach's.
 
        Bootstrap times:
-       
+
        BEFORE
                Run 1:   8.74 seconds
                Run 2:   8.71 seconds
-       
+
        AFTER
                Run 1:   8.64 seconds
                Run 2:   8.58 seconds
-       
+
 
 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
 
        9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
        9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
        Total memory allocated: 56397 KB
-       
+
        AFTER
        9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
        8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
        BEFORE
                Run 1:   8.74 seconds
                Run 2:   8.71 seconds
-       
+
        AFTER
                Run 1:   8.65 seconds
                Run 2:   8.56 seconds
-       
+
 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
 
        * Makefile: Add a new target `do-time' that does a quick and simple
 
        * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
        which fixes bug 51347.  This time test it.
-       
+
        * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
        attributes for example can not tell the difference between these.
        The difference was only a syntax feature of the language. 
 
        * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
        which fixes bug 51347.
-       
+
 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
 
        * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
        which fixes the -warnaserror command line option.
-       
+
 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
 
        * cfold.cs (DoNumericPromotions): During constant folding of
 
        * namespace.cs: Track all the namespaces defined in a hashtable
        for quick lookup.
-       
+
        (IsNamespace): New method
 
 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
 
        (Binary): remove method, argumetns, and DelegateOperator: when
        dealing with methods, 
-       
+
        * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
 
        * statement.cs (Block): use bitfields for the three extra booleans
        * statement.cs (Foreach): our variable is now stored as an
        Expression;  During resolution, follow the protocol, dont just
        assume it will return this.
-       
+
 2003-08-06  Martin Baulig  <martin@ximian.com>
 
        * support.cs (SeekableStreamReader.cs): New public class.
        * class.cs (Operator.Emit): Do not emit attributes here - it is
        taken care of by the Method class that we delegate too. This takes
        care of bug #45876.
-       
+
 2003-07-10  Martin Baulig  <martin@ximian.com>
 
        * expression.cs (TypeOfVoid): New class.
 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
 
        * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
-       
+
 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
 
        * attribute.cs: And this test is onger needed.
@@ -3073,7 +3870,7 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
        underscores.
 
        * cs-parser.jay: Update grammar to include anonymous methods.
-       
+
        * anonymous.cs: new file.
 
 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
@@ -3118,7 +3915,7 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
        * expression.cs (PointerArithmetic.Emit): If our operand is a
        long, convert our constants to match the operand before
        multiplying.  Convert to I type before adding.   Fixes 43670.
-       
+
 2003-05-14  Ravi Pratap  <ravi@ximian.com>
 
        * enum.cs (ImplicitConversionExists) : Rename to
@@ -3170,16 +3967,16 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
        its own file.
 
        Perform the following renames:
-       
+
        StandardConversionExists -> ImplicitStandardConversionExists
        ConvertImplicit -> ImplicitConversion
-        ConvertImplicitStandard -> ImplicitStandardConversion
-        TryImplicitIntConversion -> ImplicitIntConversion
-        ConvertImplicitRequired -> ImplicitConversionRequired
-        ConvertNumericExplicit -> ExplicitNumericConversion
-        ConvertReferenceExplicit -> ExplicitReferenceConversion
-        ConvertExplicit -> ExplicitConversion
-        ConvertExplicitStandard -> ExplicitStandardConversion
+       ConvertImplicitStandard -> ImplicitStandardConversion
+       TryImplicitIntConversion -> ImplicitIntConversion
+       ConvertImplicitRequired -> ImplicitConversionRequired
+       ConvertNumericExplicit -> ExplicitNumericConversion
+       ConvertReferenceExplicit -> ExplicitReferenceConversion
+       ConvertExplicit -> ExplicitConversion
+       ConvertExplicitStandard -> ExplicitStandardConversion
 
 2003-05-19  Martin Baulig  <martin@ximian.com>
 
@@ -3350,7 +4147,7 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
 
        * iterators.cs: Propagate parameter values;  Store parameter
        values in the proxy classes.
-       
+
 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
 
        * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
@@ -3358,7 +4155,7 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
 
        * cs-parser.jay (constructor_initializer): catch another error,
        and display nice message.
-       
+
        (field_declaration): catch void field declaration
        to flag a better error. 
 
@@ -3462,11 +4259,11 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
        (which is out-of-line with the regular Resolve/Emit process for a
        statement, as this is done ahead of time, but still gets a chance
        to call constant resolve).
-       
+
        (Block.Flags): new enum for adding a new flag.
 
        (Block.EmitMeta): track the state of unchecked.
-       
+
        (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
        to enable constant resolution to work there as well.
 
@@ -3478,7 +4275,7 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
 
        TODO: Test more than one conditional per method.
-       
+
        * class.cs (Indexer.Define): Report the location where the user is
        referencing the unsupported feature.
 
@@ -3489,7 +4286,7 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
        (Method): Implement the new IIteratorContainer interface.
        (Method.SetYields): Implement the method by setting the ModFlags
        to contain METHOD_YIELDS.
-       
+
        * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
        which just got set to null.
 
@@ -3527,7 +4324,7 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
        front end.
 
        (TypeManager.IsNamespace): Use binarysearch.
-       
+
        * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
        AddDelegate): I did not quite use the new IsValid API properly: I
        have to pass the short-name and the fullname.  I was passing only
@@ -3551,7 +4348,7 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
        separate type from a nested type).  Use LookupTypeReflection
        directly which bypasses the type->name hashtable (that we already
        know does not contain the type.
-       
+
        * decl.cs (DeclSpace.ResolveTypeExpr): track the
        location/container type. 
 
@@ -3591,7 +4388,7 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
        * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
        fullname.  Short name is used to compare against container name.
        Fullname is used to check against defined namespace names.
-       
+
        * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
        AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
 
@@ -3655,12 +4452,12 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
        we parse the input we have historically overloaded Resolve to
        perform the Type lookups if a special flag is passed.  Now this is
        eliminated and two methods take their place. 
-       
+
        The differences in the two methods between xStep and xTerminal is
        that xStep is involved in our current lookup system that uses
        SimpleNames to compose a name, while xTerminal is used just to
        catch the case where the simplename lookup failed.
-       
+
 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
 
        * expression.cs (ResolveMemberAccess): Remove redundant code.
@@ -3694,7 +4491,7 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
        SimpleName at the end) plus the rank composition "[]". 
 
        Also fixes 35567
-       
+
 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
 
        * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
@@ -3766,13 +4563,13 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
 
        *expression.cs (Indirection.ToString): Provide ToString method for
        debugging. 
-       
+
 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
 
-        * class.cs: Null out fields holding references to Block objects so
-        they can be garbage collected.
+       * class.cs: Null out fields holding references to Block objects so
+       they can be garbage collected.
 
-        * expression.cs (OverloadResolve): Remove unused local.
+       * expression.cs (OverloadResolve): Remove unused local.
 
 2003-04-07  Martin Baulig  <martin@ximian.com>
 
@@ -3992,7 +4789,7 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
        semantics. 
 
        Fixes bug 36505
-       
+
 2003-02-23  Martin Baulig  <martin@ximian.com>
 
        * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
@@ -4094,7 +4891,7 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
 
        The goal here is to remove the dependency on EmptyCast.Peel ().
        Killing it completely.
-       
+
        The problem is that currently in a number of places where
        constants are expected, we have to "probe" for an EmptyCast, and
        Peel, which is not the correct thing to do, as this will be
@@ -4108,13 +4905,13 @@ Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
        the duplicate pattern where we were "peeling" emptycasts to check
        whether they were constants.  Now constants will always be
        constants.
-       
+
        * ecore.cs: Use an enumconstant here instead of wrapping with
        EmptyCast.  
 
        * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
        throwing me off.  By handling this we can get rid of a few hacks.
-       
+
        * statement.cs (Switch): Removed Peel() code.
 
 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
@@ -4258,7 +5055,7 @@ Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
 
        * decl.cs: Check access levels when resolving types
-       
+
 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
 
        * statement.cs: Add parameters and locals set in catch blocks that might 
@@ -4267,7 +5064,7 @@ Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
 
        * class.cs (Operator): Set the SpecialName flags for operators.
-       
+
        * expression.cs (Invocation.DoResolve): Only block calls to
        accessors and operators on SpecialName methods.
 
@@ -4277,15 +5074,15 @@ Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
 
        * statement.cs: small memory and time optimization in FlowBranching.
-       
+
 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
 
-        * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
-        problem that the last fix but in the other sid (Set).
+       * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
+       problem that the last fix but in the other sid (Set).
+
+       * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
+       access when there is no indexer in the hierarchy.
 
-        * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
-        access when there is no indexer in the hierarchy.
-       
 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
 
        * class.cs: Combine some if statements.
@@ -4307,7 +5104,7 @@ Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
        We were only handling this in one case.
 
        Improve the if situation there to not have negations.
-       
+
        * class.cs (Field.Define): Turns out that we do not need to check
        the unsafe bit on field definition, only on usage.  Remove the test.
 
@@ -4330,7 +5127,7 @@ Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
 2003-01-20  Duncan Mak  <duncan@ximian.com>
 
        * AssemblyInfo.cs: Bump the version number to 0.19.
-       
+
 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
 
        * cs-tokenizer.cs: little fixes to line numbering when #line is used.
@@ -4373,7 +5170,7 @@ Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
 
        * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
-       
+
 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
 
        * attribute.cs: only set GuidAttr to true when we have a
@@ -4394,10 +5191,10 @@ Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
 
        * cs-parser.jay (fixed_statement): take a type instead of a
        pointer_type, so we can produce a better error message later.
-       
+
        * statement.cs (Fixed.Resolve): Flag types that are not pointers
        as an error.  
-       
+
        (For.DoEmit): Make inifinite loops have a
        non-conditional branch back.
 
@@ -4496,14 +5293,14 @@ Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
 
        * decl.cs: Added special case to allow overrides on "protected
        internal" methods
-       
+
 2002-12-18  Ravi Pratap  <ravi@ximian.com>
 
        * attribute.cs (Attributes.AddAttributeSection): Rename to this
        since it makes much more sense.
 
        (Attributes.ctor): Don't require a Location parameter.
-       
+
        * rootcontext.cs (AddGlobalAttributeSection): Rename again.
 
        * attribute.cs (ApplyAttributes): Remove extra Location parameters
@@ -4701,7 +5498,7 @@ Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
        Another 3% is spend on wrapping `xtoken' in the `token' function.
 
        Handle 0xa0 as whitespace (#34752)
-       
+
 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
 
        * typemanager.cs (IsCLRType): New routine to tell whether a type
@@ -4733,7 +5530,7 @@ Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
        Do not short-circuit, because if we do, we
        report errors (ie, #if false && true would produce an invalid
        directive error);
-       
+
 
 2002-11-24  Martin Baulig  <martin@ximian.com>
 
@@ -4928,7 +5725,7 @@ Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
        * attribute.cs (Attribute.Resolve): Catch the
        NullReferenceException and report it since it isn't supposed to
        happen. 
-       
+
 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
 
        * expression.cs (Binary.EmitBranchable): Also handle the cases for
@@ -4956,7 +5753,7 @@ Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        But a bogus return here to keep the semantics of the old code
        until the Mono runtime is fixed.
-       
+
        * pending.cs (GetMissingInterfaces): New method used to remove all
        the interfaces that are already implemented by our parent
        classes from the list of pending methods. 
@@ -4981,7 +5778,7 @@ Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
        operators. 
 
        * driver.cs: use error 5.
-       
+
 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
 
        * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
@@ -5000,7 +5797,7 @@ Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
        IndexerAccess.DoResolve): ditto. 
 
        (Invocation.DoResolve): ditto.
-       
+
        (Invocation.FullMethodDesc): Improve the report string.
 
        * statement.cs (Block): Eliminate IsVariableDefined as it is
@@ -5019,7 +5816,7 @@ Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * expression.cs: Reverted last patch, that was wrong.  Is_ref is
        not used to mean `ref' but `ref or out' in ParameterReference
-       
+
        * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
        full type signature instead of calling TypeManger.CSharpName
        ourselves. 
@@ -5058,7 +5855,7 @@ Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
        * expression.cs (BaseAccess): Provide an DoResolveLValue method,
        so we can call the children DoResolveLValue method (this will
        properly signal errors on lvalue assignments to base properties)
-       
+
        * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
        getter are null, and we have a property info, we know that this
        happened because the lookup failed, so we report an error 122 for
@@ -5137,7 +5934,7 @@ Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
        Constructor requires an EmitContext.  The resolution process does
        not happen here, but we need to compute the accessors before,
        because the resolution does not always happen for properties.
-       
+
        * typemanager.cs (RealMemberLookup): Set private_ok if we are a
        subclass, before we did not update this flag, but we did update
        bindingflags. 
@@ -5147,7 +5944,7 @@ Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        Notice that this broke the cs1540 detection, but that will require
        more thinking. 
-       
+
 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
 
        * class.cs:
@@ -5183,7 +5980,7 @@ Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
 
 2002-10-20  Mark Crichton  <crichton@gimp.org>
 
-        * cfold.cs: Fixed compile blocker.  Really fixed it this time.
+       * cfold.cs: Fixed compile blocker.  Really fixed it this time.
 
 2002-10-20  Nick Drochak  <ndrochak@gol.com>
 
@@ -5386,12 +6183,12 @@ Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
        (LookupType): We now also track the real type name, as sometimes
        we can get a quey for the real type name from things like
        ComposedCast.  This fixes bug 31422.
-       
+
        * expression.cs (ComposedCast.Resolve): Since we are obtaining a
        complete type fullname, it does not have to go through the type
        resolution system to obtain the composed version of the type (for
        obtaining arrays or pointers).
-       
+
        (Conditional.Emit): Use the EmitBoolExpression to
        generate nicer code, as requested by Paolo.
 
@@ -5753,7 +6550,7 @@ Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
        * namespace.cs (UsingEntry): New struct to hold the name of the
        using definition, the location where it is defined, and whether it
        has been used in a successful type lookup.
-       
+
        * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
        strings.
 
@@ -5807,7 +6604,7 @@ Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
        (ConvertNumericExplicit): Allow explicit conversions from
        the underlying type to enum type. This precisely follows the spec
        and closes a bug filed by Gonzalo.
-       
+
 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
 
        * compiler.csproj:
@@ -7243,7 +8040,7 @@ Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
        * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
 
        (LoadAssembly): Do not add the dll if it is already specified
-       
+
        (MainDriver): Add the System directory to the link path at the end,
        after all the other -L arguments. 
 
@@ -7291,7 +8088,7 @@ Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
        private field.
 
        * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
-       
+
 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
 
        * expression.cs (Binary.EmitBranchable): this routine emits the
@@ -7322,7 +8119,7 @@ Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
        always (Emit) instead of the Address of This.  Particularly
        interesting when This is a value type, as we dont want the Emit
        effect (which was to load the object).
-       
+
 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
 
        * attribute.cs: Pass the entry point to the DefinePInvokeMethod
@@ -7563,7 +8360,7 @@ Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
        not explicitly implementing a property from an interface.  Use the
        correct name also for those properties (the same CSC uses,
        although that is really not needed).
-       
+
        (Property.Emit): Do not emit attributes for explicitly implemented
        properties, as there is no TypeBuilder.
 
@@ -7596,12 +8393,12 @@ Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
        the interfaces and work around the lame differences between
        System.Type and System.Reflection.Emit.TypeBuilder in the results
        result for GetInterfaces.
-       
+
        (ExpandInterfaces): Given an array of interface types, expand and
        eliminate repeated ocurrences of an interface.  This expands in
        context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
        be IA, IB, IC.
-       
+
 2002-06-21  Martin Baulig  <martin@gnome.org>
 
        * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
@@ -7681,7 +8478,7 @@ Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
 
        * expression.cs (Unary.ResolveOperator): Use TypeManager
        to resolve the type.
-       
+
 2002-06-13  Ravi Pratap  <ravi@ximian.com>
 
        * cs-parser.jay (enum_member_declaration): Pass in the attributes
@@ -7697,7 +8494,7 @@ Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
 
        * typemanager.cs (TypeManager.VerifyUnManaged): Allow
        address-of operator on both value types and pointers.
-       
+
 2002-06-10  Martin Baulig  <martin@gnome.org>
 
        * interface.cs (Interface.PopulateIndexer): Add the indexer's
@@ -7737,7 +8534,7 @@ Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
        to handle the Accessor kind :-)
 
        * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
-       
+
 2002-06-08  Martin Baulig  <martin@gnome.org>
 
        * expression.cs (Unary.TryReduceNegative): Added support for
@@ -7851,7 +8648,7 @@ Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
 
        (DefineMethod): Return whether we are doing an interface
        implementation. 
-       
+
        * typemanager.cs: Temporary hack until we get attributes in
        interfaces (Ravi is working on that) and we get IndexerName
        support in interfaces.
@@ -8018,7 +8815,7 @@ Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
        avoid having side effects
 
        (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
-       
+
        * ecore.cs (Expression.CacheTemporaries): Provide empty default
        implementation.
 
@@ -8030,7 +8827,7 @@ Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
        (StoreFromPtr): Handle stobj as well.
 
        * expression.cs (UnaryMutator): Share more code.
-       
+
        * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
        down: I was not tracking the Filter function as well, which
        was affecting the results of the cache.
@@ -8085,7 +8882,7 @@ Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
 
        Do not allow instances of abstract classes or interfaces to be
        created.
-       
+
        * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
        We have to compare the assembly property here when dealing with
        FamANDAssem and Assembly access modifiers, because we might be
@@ -8166,7 +8963,7 @@ Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
        * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
        nested foreach statements instead of for, and also break out of
        the inner loop once a match is found.
-       
+
        (Invocation.OverloadResolve): Use foreach, simplify the code. 
 
 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
@@ -8211,7 +9008,7 @@ Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
 
        * parameter.cs (ParameterType): Make it a property for now although the
        purpose really isn't anything immediate.
-       
+
        * expression.cs (Is*Applicable): Do better checking on the parameter type
        of a ref/out parameter. The ones from the system assemblies are already 
        marked with the correct type so we don't need to do any correction.
@@ -8236,7 +9033,7 @@ Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
 
        (EmitCode): Apply attributes within an EmitContext that represents
        the container they were declared on.
-       
+
        * cs-parser.jay: Track bases for structs.  How did I get this wrong?
 
 2002-05-06  Ravi Pratap  <ravi@ximian.com>
@@ -8303,7 +9100,7 @@ Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
 
        * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
        events are always registered FieldBuilders.
-       
+
        * class.cs (FieldBase): New class shared by Fields 
 
        * delegate.cs: If we are a toplevel delegate, use our full name.
@@ -8358,7 +9155,7 @@ Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
        byte b |= 1 + 2
 
        From the spec:
-       
+
        x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
        to the type of x) if y is implicitly convertible to the type of x,
        and the operator is a builtin operator and the return type of the
@@ -8377,7 +9174,7 @@ Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
 
        This code could go away when we move to a table driven model, but
        i could not come up with a good plan last night.
-       
+
 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
 
        * typemanager.cs (CSharpName): reimplementation using regex.
@@ -8395,7 +9192,7 @@ Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
        not catching sem errors in there.  The same process is needed
        everywhere else. 
        (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
-       
+
 
        (Statement.Warning_DeadCodeFound): Factorize code.
        (While): Report dead code here too.
@@ -8409,7 +9206,7 @@ Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
        expression here.    
        (MakeBoolean): New utility function that resolve, implicitly
        converts to boolean and tags the expression. 
-       
+
 
        (If, Do): Implement dead code elimination.
        (While): Implement loop inversion
@@ -8437,7 +9234,7 @@ Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
 
        * support.cs: InternalParameters.ParameterDesc variable tmp initialized
        with String.Empty.
-       
+
 2002-04-26  Ravi Pratap  <ravi@ximian.com>
 
        * delegate.cs (Define): Fix extremely silly bug where I was
@@ -8479,7 +9276,7 @@ Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
 
        (TypeContainer.MemberLookup): Implement using the
        TypeManager.MemberLookup now. 
-       
+
        * typemanager.cs: Make MemberLookup a function of the TypeManager,
        and return MemberInfos, so that these can be used without an
        EmitContext (what we had before).
@@ -8519,7 +9316,7 @@ Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
        * expression.cs (Argument.Type): Ensure that we return the correct
        type when we have out or ref parameters [in which case we 
        append a "&"].
-       
+
 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
 
        * class.cs (Property, Indexer): Allow extern modifier in there. 
@@ -8578,7 +9375,7 @@ Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
 
        (TypeContainer.Targets): The default for attribute types is
        AttributeTargets.All.
-       
+
        * attribute.cs (ApplyAttributes): Registering the attribute type
        is done elsewhere, not when we discover we have a Usage attribute.
 
@@ -8588,7 +9385,7 @@ Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
        and get rid of is_delegate parameter.
 
        * everywhere : update.
-       
+
 2002-04-12  Ravi Pratap  <ravi@ximian.com>
 
        * cs-parser.jay (compilation_unit): Revamp completely to use
@@ -8721,7 +9518,7 @@ Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
 
        * class.cs (Indexer.CheckBase): Only check if both parents are
        non-null. 
-       
+
        * cs-parser.jay (accessor_body): If empty, set to null.
 
        * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
@@ -8798,7 +9595,7 @@ Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
        (FindType): Moved LookupInterfaceOrClass here.  Moved the
        LookupBaseClasses method that used to live in class.cs and
        interface.cs here, and renamed to FindType.
-       
+
        * delegate.cs: Implement DefineType.  Take advantage of the
        refactored pattern for locating the parent builder without taking
        the parent_builder argument (which we know does not work if we are
@@ -8841,8 +9638,8 @@ Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
                                    implementing.DeclaringType.IsInterface)
                                        flags |= MethodAttributes.Final;
 
-        I do not know what I was smoking when I used that.
-       
+       I do not know what I was smoking when I used that.
+
 
        * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
        step into fixing the name resolution issues for delegates and
@@ -9071,7 +9868,7 @@ Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * class.cs (Invocation.EmitArguments): Fix to emit arguments for
        empty param arrays.
-       
+
        * class.cs (Method.LabelParameters): Fix incorrect code path that
        prevented the `ParamArrayAttribute' from being applied to the
        params attribute.
@@ -9150,7 +9947,7 @@ Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        Nested interfaces need to be closed after their parents have been
        created. 
-       
+
        * interface.cs (InterfaceAttr): Put all the logic for computing
        the interface attribute here. 
 
@@ -9161,7 +9958,7 @@ Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * cs-parser.jay: rework foreach statement to work with the new
        changes to the policy on SimpleNames.
-       
+
        * report.cs: support Stacktrace on warnings as well.
 
        * makefile: drop --unsafe and /unsafe from the compile.
@@ -9186,7 +9983,7 @@ Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
        performing type lookups, instead of DoResolve, we could have a
        ResolveType entry point, and only participating pieces of the
        production (simplename, deref, array) would implement this. 
-       
+
        * codegen.cs (EmitContext): New field OnlyLookupTypes used to
        signal SimpleName to only resolve type names and not attempt to
        resolve anything else.
@@ -9264,13 +10061,13 @@ Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        (Resolve): Handle the case when we are parsing the special MarshalAs
        attribute [we need to store the unmanaged type to use later]
-       
+
        * typemanager.cs (marshal_as_attr_type): Built in type for the 
        MarshalAs Attribute.
 
        * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
        on parameters and accordingly set the marshalling info.
-       
+
 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
 
        * class.cs: Optimizing slightly by removing redundant code after
@@ -9287,7 +10084,7 @@ Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
        Enums since those are types too. 
 
        * cs-parser.jay (enum_declaration): Record enums as we parse them.
-       
+
        * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
        thanks to a call during the lookup process.
 
@@ -9339,7 +10136,7 @@ Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
        for interfaces
 
        * report.cs: Allow for --fatal to be used with --probe.
-       
+
        * typemanager.cs (NoTypes): Move the definition for the empty Type
        array here. 
 
@@ -9368,14 +10165,14 @@ Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
 
        Constant Folding has been implemented now.
-       
+
        * expression.cs (Unary.Reduce): Do not throw an exception, catch
        the error instead on types that are not supported in one's
        complement. 
 
        * constant.cs (Constant and all children): New set of functions to
        perform implict and explicit conversions.
-       
+
        * ecore.cs (EnumConstant): Implement the new functions to perform
        conversion by proxying to the child expression.
 
@@ -9397,7 +10194,7 @@ Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
 
        * cfold.cs: New file, this file contains the constant folder.
-       
+
        * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
        argument to track whether we are using the resulting address to
        load or store a value and provide better error messages. 
@@ -9549,7 +10346,7 @@ Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
        handling.
 
        Catch DirectoryNotFoundException when calling GetFiles.
-       
+
        (SplitPathAndPattern): Used to split the input specification into
        a path and a pattern that we can feed to Directory.GetFiles.
 
@@ -9575,12 +10372,12 @@ Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
        (StackAlloc): Implement stackalloc keyword.
 
        * cs-parser.jay: Add rule to parse stackalloc.
-       
+
        * driver.cs: Handle /h, /help, /?
 
        * expression.cs (MakeByteBlob): Removed the hacks we had in place
        before we supported unsafe code.
-       
+
        * makefile: add --unsafe to the self compilation of mcs.
 
 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
@@ -9593,14 +10390,14 @@ Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
        address of an array.
 
        (ElementAccess): Implement array access for pointers
-       
+
        * statement.cs (Fixed): Implement fixed statement for arrays, we
        are missing one more case before we are done.
 
        * expression.cs (Indirection): Implement EmitAssign and set the
        ExprClass to Variable.  This allows pointer dereferences to be
        treated as variables, and to have values assigned to them.
-       
+
        * ecore.cs (Expression.StoreFromPtr): New utility function to
        store values dereferencing.
 
@@ -9822,7 +10619,7 @@ Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
        the rules for the special rule on Type/instances.  First check if
        we have the same name, and if so, try that special static path
        rather than the instance path.
-       
+
 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
 
        * cs-parser.jay: Emit 642 (warning: possible empty statement) for
@@ -9932,7 +10729,7 @@ Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
        the object type, so we take care of that.
 
        * expression.cs (FullMethodDesc): Also include the return type in descriptions.
-       
+
        * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
        added to non-params parameters :-)
 
@@ -10024,7 +10821,7 @@ Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
        default_member_type which already exists.
 
        * interface.cs, attribute.cs : Update accordingly.
-       
+
 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
 
        * typemanager.cs: Enable IndexerPropertyName again.  It does not
@@ -10075,7 +10872,7 @@ Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * class.cs (Indexer): Implement explicit interface implementation
        for indexers.
-       
+
 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * class.cs: make the default instance constructor public and hidebysig.
@@ -10118,7 +10915,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        is_base, this is used to determine whether the `call' or
        `callvirt' opcode should be used.
 
-       
+
        * delegate.cs: update EmitCall.
 
        * class.cs (Method.Define): Set NewSlot for the cases where we are
@@ -10192,7 +10989,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        only.
 
        (Goto): Finally implement this bad boy.
-       
+
        * cs-parser.jay: Update to reflect new mechanism to implement
        labels.
 
@@ -10249,7 +11046,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        Although we do this check for methods later on in the semantic
        analysis, catching repeated default constructors is so easy that
        we catch these here. 
-       
+
        * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
        promotions code.
 
@@ -10290,7 +11087,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * decl.cs: CloseType is now an virtual method, the default
        implementation just closes this type.
-       
+
 2001-12-28  Ravi Pratap  <ravi@ximian.com>
 
        * attribute.cs (DefinePInvokeMethod): Set the implementation flags
@@ -10309,7 +11106,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        in overload resolution. 
 
        More spec conformance.
-       
+
 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
 
        * driver.cs: Add --timestamp, to see where the compiler spends
@@ -10339,7 +11136,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        (Binary.Resolve): If types are reference types, then do a cast to
        object on operators != and == of both arguments.
-       
+
        * typemanager.cs (FindMembers): Extract instance and static
        members if requested.
 
@@ -10529,7 +11326,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
 
        * assign.cs : Get rid of EventIsLocal everywhere.
-       
+
 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
 
        * ecore.cs (ConvertIntLiteral): finished the implementation.
@@ -10556,7 +11353,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        resolve the types.  This is not really needed, but it helps debugging.
 
        * statement.cs: report location.
-       
+
        * cs-parser.jay: pass location to throw statement.
 
        * driver.cs: Small bug fix.
@@ -10619,23 +11416,23 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * statement.cs (SwitchLabel): define an ILLabel for each
        SwitchLabel. 
-       
+
        (Switch.CheckSwitch): If the value is a Literal, extract
        the underlying literal.
-       
+
        Also in the unused hashtable we had, add the SwitchLabel so we can
        quickly look this value up.
 
        * constant.cs: Implement a bunch of new constants.  Rewrite
        Literal based on this.  Made changes everywhere to adapt to this.
-       
+
        * expression.cs (Expression.MakeByteBlob): Optimize routine by
        dereferencing array only once, and also copes with enumrations.
 
        bytes are two bytes wide, not one.
 
        (Cast): Perform constant conversions.
-       
+
        * ecore.cs (TryImplicitIntConversion): Return literals instead of
        wrappers to the literals here.
 
@@ -10752,12 +11549,12 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (Interface.SemanticAnalysis): Use `this' instead of our parent to
        resolve names.  Because we need to be resolve in our context, not
        our parents.
-       
+
        * driver.cs: Implement response files.
 
        * class.cs (TypeContainer.DefineType): If we are defined, do not
        redefine ourselves.
-       
+
        (Event.Emit): Emit the code for add/remove handlers.
        (Event.Define): Save the MethodBuilders for add/remove.
 
@@ -10765,10 +11562,10 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
        DictionaryEntry requires the first argument to be non-null.  
-       
+
        (enum_declaration): Compute full name for registering the
        enumeration.
-       
+
        (delegate_declaration): Instead of using
        formal_parameter_list, use opt_formal_parameter_list as the list
        can be empty.
@@ -10828,7 +11625,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * cs-tokenizer.cs: Add support for defines.
        Add support for #if, #elif, #else, #endif
-       
+
        (eval_var): evaluates a variable.
        (eval): stubbed for evaluating functions.
 
@@ -10847,7 +11644,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        (MemberCore.Define): New abstract method, we will be using this in
        the warning reporting engine in Populate.
-       
+
        (Operator.Define): Adjust to new MemberCore protocol. 
 
        * const.cs (Const): This does not derive from Expression, it is a
@@ -10870,7 +11667,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        argument. 
 
        * class.cs (Event.Define): The lookup can fail.
-       
+
        * cs-tokenizer.cs: Begin implementation of pre-procesor. 
 
        * expression.cs: Resolve the this instance before invoking the code.
@@ -10883,7 +11680,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        Note that this still does not handle the more complex rules of
        casts. 
-       
+
 
        * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
 
@@ -11001,7 +11798,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
 
        * class.cs (MakeKey): Kill routine.
-       
+
        * class.cs (TypeContainer.Define): Correctly define explicit
        method implementations (they require the full interface name plus
        the method name).
@@ -11038,7 +11835,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        (TypeContainer.Define): Add support for explicit interface method
        implementation. 
-       
+
 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
 
        * typemanager.cs: Keep track of the parameters here instead of
@@ -11075,7 +11872,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
        LocalBuilder to store the result of the function.  ReturnLabel is
        the target where we jump.
-       
+
 
 2001-12-09  Radek Doulik  <rodo@ximian.com>
 
@@ -11114,7 +11911,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        (Parameter.ParameterType): The type of the parameter (base,
        without ref/out applied).
-       
+
        (Parameter.Resolve): Perform resolution here.
        (Parameter.ExternalType): The full type (with ref/out applied).
 
@@ -11169,7 +11966,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
        above to do the task of extracting information and defining the method.
-       
+
 2001-12-04  Ravi Pratap  <ravi@ximian.com>
 
        * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
@@ -11196,12 +11993,12 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
        default'.
-       
+
        (Foreach.Emit): Foreach on arrays was not setting
        up the loop variables (for break/continue).
 
        (GotoCase): Semi-implented.
-       
+
 2001-12-03  Ravi Pratap  <ravi@ximian.com>
 
        * attribute.cs (CheckAttribute): Handle system attributes by using
@@ -11295,10 +12092,10 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
        (we need to load the address of the field here).  This fixes
        test-22. 
-       
+
        (FieldExpr.DoResolveLValue): Call the DoResolve
        function to initialize the Instance expression.
-       
+
        * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
        correctly the GetEnumerator operation on a value type.
 
@@ -11385,12 +12182,12 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * statement.cs (Switch, SwitchSection, SwithLabel): Started work
        on Switch statement.
-       
+
 2001-11-23  Ravi Pratap  <ravi@ximian.com>
 
        * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
        the same. 
-       
+
        * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
        parameter. Apparently, any expression is allowed. 
 
@@ -11434,7 +12231,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        Use the grammar productions from Rhys to handle casts (this is
        not complete like Rhys syntax yet, we fail to handle that corner
        case that C# has regarding (-x), but we will get there.
-       
+
 2001-11-22  Ravi Pratap  <ravi@ximian.com>
 
        * class.cs (EmitFieldInitializer): Take care of the case when we have a
@@ -11610,7 +12407,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
        Test 33 now passes again.
-       
+
 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
 
        * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
@@ -11666,7 +12463,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (NewDelegate.DoResolve): Update for Argument.Resolve.
 
        * class.cs (ConstructorInitializer.DoResolve): ditto.
-       
+
        * attribute.cs (Attribute.Resolve): ditto.
 
 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
@@ -11677,7 +12474,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        IAssignMethod instead. 
 
        (LocalVariableReference): ditto.
-       
+
        * ecore.cs (FieldExpr): Drop IStackStorage and implement
        IAssignMethod instead. 
 
@@ -11838,13 +12635,13 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (Event.Emit): ditto.
 
        Reworked to have less levels of indentation.
-       
+
 2001-11-08  Ravi Pratap  <ravi@ximian.com>
 
        * class.cs (Property): Emit attributes.
 
        (Field): Ditto.
-       
+
        (Event): Ditto.
 
        (Indexer): Ditto.
@@ -11870,7 +12667,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 2001-11-07  Ravi Pratap  <ravi@ximian.com>
 
        * expression.cs (EvalConstantExpression): Move into ecore.cs
-       
+
        * enum.cs (Enum): Rename some members and make them public and readonly
        according to our convention.
 
@@ -11901,9 +12698,9 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
 
        (Literalize): Revamp a bit to take two arguments.
-       
+
        (EnumLiteral): New class which derives from Literal to wrap enum literals.
-       
+
 2001-11-06  Ravi Pratap  <ravi@ximian.com>
 
        * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
@@ -11962,7 +12759,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        (Expression.Reduce): New method used to perform constant folding
        and CSE.  This is needed to support constant-expressions. 
-       
+
        * statement.cs (Statement.EmitBoolExpression): Pass true and false
        targets, and optimize for !x.
 
@@ -11999,9 +12796,9 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (positional_argument_list, named_argument_list, named_argument): New rules
 
        (attribute_arguments): Use the above so that we are more correct.
-       
+
 2001-11-02  Ravi Pratap  <ravi@ximian.com>
-       
+
        * expression.cs (Invocation::IsParamsMethodApplicable): Implement
        to perform all checks for a method with a params parameter.
 
@@ -12021,7 +12818,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
        use the new class names.
-       
+
 2001-11-01  Ravi Pratap  <ravi@ximian.com>
 
        * class.cs (Method::Define): Complete definition for params types too
@@ -12046,7 +12843,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        * expression.cs : Clean out code which uses the above.
 
 2001-10-31  Ravi Pratap  <ravi@ximian.com>
-       
+
        * typemanager.cs (RegisterMethod): Check if we already have an existing key
        and bale out if necessary by returning a false.
 
@@ -12203,7 +13000,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        * expression.cs (New::DoResolve): Implement guts of array creation.
 
        (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
-       
+
 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
 
        * expression.cs: Fix bug I introduced lsat night that broke
@@ -12211,9 +13008,9 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        (Expression.Resolve): Report a 246 error (can not resolve name)
        if we find a SimpleName in the stream.
-       
+
        (Expression.ResolveLValue): Ditto.
-       
+
        (Expression.ResolveWithSimpleName): This function is a variant of
        ResolveName, this one allows SimpleNames to be returned without a
        warning.  The only consumer of SimpleNames is MemberAccess
@@ -12234,7 +13031,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
        Threading.Monitor.Exit 
-       
+
 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
 
        * expression.cs (IndexerAccess::DoResolveLValue): Set the
@@ -12250,7 +13047,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        and Properties for handling assignment.
 
        (Assign::Emit): Simplify and reuse code. 
-       
+
        * expression.cs (IndexerAccess, PropertyExpr): Implement
        IAssignMethod, clean up old code. 
 
@@ -12284,7 +13081,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        * class.cs (Method::Define): For the case where we are implementing a method
        inherited from an interface, we need to set the MethodAttributes.Final flag too. 
        Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
-       
+
 2001-10-21  Ravi Pratap  <ravi@ximian.com>
 
        * interface.cs (FindMembers): Implement to work around S.R.E
@@ -12311,12 +13108,12 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * assign.cs (Assign::Resolve): Resolve right hand side first, and
        then pass this as a hint to ResolveLValue.
-       
+
        * expression.cs (FieldExpr): Add Location information
 
        (FieldExpr::LValueResolve): Report assignment to readonly
        variable. 
-       
+
        (Expression::ExprClassFromMemberInfo): Pass location information.
 
        (Expression::ResolveLValue): Add new method that resolves an
@@ -12333,12 +13130,12 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        now is part of Expression.
 
        (ElementAccess): Depending on the element access type
-       
+
        * typemanager.cs: Add `indexer_name_type' as a Core type
        (System.Runtime.CompilerServices.IndexerNameAttribute)
 
        * statement.cs (Goto): Take a location.
-       
+
 2001-10-18  Ravi Pratap  <ravi@ximian.com>
 
        * delegate.cs (Delegate::VerifyDelegate): New method to verify
@@ -12426,7 +13223,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
        (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
        end loop
-       
+
        * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
        properties that track the label for the current loop (begin of the
        loop and end of the loop).
@@ -12470,7 +13267,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (ConvertReferenceExplicit): Implement array conversion.
 
        (ExplicitReferenceConversionExists): New method to determine precisely that :-)
-       
+
 2001-10-12  Ravi Pratap  <ravi@ximian.com>
 
        * cs-parser.jay (delegate_declaration): Store the fully qualified
@@ -12487,7 +13284,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        (Emit): Emit any code, if necessary. I am not sure about this really, but let's
        see.
-       
+
        (CloseDelegate): Finally creates the delegate.
 
        * class.cs (TypeContainer::DefineType): Update to define delegates.
@@ -12529,7 +13326,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * expression.cs (LValue::LValueResolve): New method in the
        interface, used to perform a second resolution pass for LValues. 
-       
+
        (This::DoResolve): Catch the use of this in static methods.
 
        (This::LValueResolve): Implement.
@@ -12550,7 +13347,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
        value types returned from functions when we need to invoke a
        method on the sturcture.
-       
+
 
 2001-10-11  Ravi Pratap  <ravi@ximian.com>
 
@@ -12592,14 +13389,14 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
        the default constructor.
-       
+
        (TypeContainer::Populate): Fix minor bug which led to creating default constructors
        twice.
 
        (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
 
        * interface.cs (CloseType): Create the type here.
-       
+
        * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
        the hierarchy.
 
@@ -12633,12 +13430,12 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        TypeContainer.
 
        Replaced `l' and `location' for `loc', for consistency.
-       
+
        (Error, Warning): Remove unneeded Tc argument.
 
        * assign.cs, literal.cs, constant.cs: Update to new calling
        convention. 
-       
+
        * codegen.cs: EmitContext now contains a flag indicating whether
        code is being generated in a static method or not.
 
@@ -12681,9 +13478,9 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
 
        * expression.cs (ElementAccess): Implement the LValue interface too.
-       
+
 2001-10-06  Ravi Pratap  <ravi@ximian.com>
-       
+
        * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
        except that user defined conversions are not included.
 
@@ -12705,7 +13502,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        corresponding code generation bits to the statement classes. 
 
        Added support for try/catch/finalize and throw.
-       
+
        * cs-parser.jay: Added support for try/catch/finalize.
 
        * class.cs: Catch static methods having the flags override,
@@ -12834,7 +13631,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        (Unary::report23): Change name to error23 and make first argument a TypeContainer
        as I was getting thoroughly confused between this and error19 :-)
-       
+
        * expression.cs (Expression::ImplicitUserConversion): Re-write fully
        (::FindMostEncompassedType): Implement.
        (::FindMostEncompassingType): Implement.
@@ -12910,10 +13707,10 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 2001-10-01  Ravi Pratap  <ravi@ximian.com>
 
        *  expression.cs (Expression::ImplicitUserConversion): Use location
-        even in the case when we are examining True operators.
+       even in the case when we are examining True operators.
  
-        * class.cs (Operator::Define): Perform extensive checks to conform
-        with the rules for operator overloading in the spec.
+       * class.cs (Operator::Define): Perform extensive checks to conform
+       with the rules for operator overloading in the spec.
 
        * expression.cs (Expression::ImplicitReferenceConversion): Implement
        some of the other conversions mentioned in the spec.
@@ -12973,7 +13770,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * cs-parser.jay: Pass location information for various new
        constructs. 
-       
+
        * delegate.cs (Delegate): take a location argument.
 
        * driver.cs: Do not call EmitCode if there were problesm in the
@@ -12988,7 +13785,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * rootcontext.cs: Provide better information about the location of
        failure when CreateType fails.
-       
+
 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
 
        * rootcontext.cs (RootContext::PopulateTypes): Populates structs
@@ -13066,12 +13863,12 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
                  convert from an Int to a Short use an OpcodeCast', not
                  `To convert from an Int to a Short use the OpcodeCast on
                  the variable 5' (which is what this patch was doing).
-       
+
 2001-09-28  Ravi Pratap  <ravi@ximian.com>
 
        * expression.cs (Invocation::ConversionExists): Re-write to use
        the conversion cache
-       
+
        (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
        cache all conversions done, not just user-defined ones.
 
@@ -13086,12 +13883,12 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * expression.cs (ConvertImplicit): Use a cache for conversions
        already found. Check level of recursion and bail out if necessary.
-       
+
 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
 
        * typemanager.cs (string_concat_string_string, string_concat_object_object):
        Export standard methods that we expect for string operations.
-       
+
        * statement.cs (Block::UsageWarning): Track usage of variables and
        report the errors for not used variables.
 
@@ -13126,7 +13923,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        (UserImplicitCast::Resolve): Eliminate, objects of type
        UserImplicitCast are born in a fully resolved state. 
-       
+
        * typemanager.cs (InitCoreTypes): Init also value_type
        (System.ValueType). 
 
@@ -13160,10 +13957,10 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (ParameterReference::Emit, ::Store): same.
 
        (FieldExpr::AddressOf): Implement.
-       
+
        * typemanager.cs: TypeManager: made public variable instead of
        property.
-       
+
        * driver.cs: document --fatal.
 
        * report.cs (ErrorMessage, WarningMessage): new names for the old
@@ -13203,7 +14000,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
        we have to convert to bool types. Not complete yet.
-       
+
 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
 
        * typemanager.cs (TypeManager::CSharpName): support ushort.
@@ -13218,7 +14015,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        (Invocation::Emit): If InstanceExpression is null, then it means
        that we perform a call on this.
-       
+
 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
 
        * expression.cs (Unary::Emit): Remove some dead code.
@@ -13244,7 +14041,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        * class.cs (Operator): Update the operator names to reflect the
        ones that the spec expects (as we are just stringizing the
        operator names).
-       
+
        * expression.cs (Unary::ResolveOperator): Fix bug: Use
        MethodInfo's ReturnType instead of LookupMethodByBuilder as the
        previous usage did only work for our methods.
@@ -13260,7 +14057,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (Binary::ResolveOperator): ditto.
        (Invocation::ConversionExists): ditto.
        (UserImplicitCast::Resolve): ditto.
-       
+
 2001-09-26  Ravi Pratap  <ravi@ximian.com>
 
        * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
@@ -13321,17 +14118,17 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        pass (Bytes) or the wrong argument will be selected.
 
        * expression.cs (Unary::Emit): Emit code for -expr.
-       
+
        (Unary::ResolveOperator): Handle `Substract' for non-constants
        (substract from zero from the non-constants).
        Deal with Doubles as well. 
-       
+
        (Expression::ConvertImplicitRequired): New routine that reports an
        error if no implicit conversion exists. 
 
        (Invocation::OverloadResolve): Store the converted implicit
        expressions if we make them
-       
+
 2001-09-24  Ravi Pratap  <ravi@ximian.com>
 
        * class.cs (ConstructorInitializer): Take a Location argument.
@@ -13368,7 +14165,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
        a given method.
-       
+
 2001-09-21  Ravi Pratap  <ravi@ximian.com>
 
        * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
@@ -13400,10 +14197,10 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (Unary::ResolveOperator): Implement ++, !, ~,
 
        (Invocation::Emit): Deal with new Emit convetion.
-       
+
        * All Expression derivatives: Updated their Emit method to return
        whether they leave values on the stack or not.
-       
+
        * codegen.cs (CodeGen::EmitStatement): Pop values left on the
        stack for expressions that are statements. 
 
@@ -13413,7 +14210,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        LValue objects.
        (LocalVariableReference, ParameterReference, FieldExpr): Implement
        LValue interface.
-       
+
        * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
        interface for generating code, simplifies the code.
 
@@ -13573,7 +14370,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        * expression.cs (Binary::Emit): Comment out code path to emit method
        invocation stuff for the case when we have a user defined operator. I am
        just not able to get it right !
-       
+
 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
 
        * expression.cs (Expression::OverloadResolve): Drop TypeContainer
@@ -13603,7 +14400,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        default constructors if none was provided.
 
        (ConstructorInitializer): Add methods Resolve and Emit. 
-       
+
        * expression.cs: Cast to ConstructorInfo instead of MethodInfo
 
 2001-09-17  Ravi Pratap  <ravi@ximian.com>
@@ -13639,7 +14436,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * expression.cs (Binary::Emit): Update to emit the appropriate code for
        the case when we have a user-defined operator.
-       
+
 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
 
        * rootcontext.cs: Fix bug: tree.Namespaces might be null.
@@ -13695,7 +14492,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
        FamORAssem, not FamANDAssem.
-       
+
 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
 
        * driver.cs: Added --parse option that only parses its input files
@@ -13736,7 +14533,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
        of top-level types as claimed.
-       
+
 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
 
        * expression.cs (MemberLookup): Fruitless attempt to lookup
@@ -13848,7 +14645,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        (OpcodeCast): New type for casts of types that are performed with
        a sequence of bytecodes.
-       
+
        (BoxedCast): New type used for casting value types into reference
        types.  Emits a box opcode.
 
@@ -13858,7 +14655,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (Binary::EmitBranchable): Optimization.
 
        (Binary::Emit): Implement code emission for expressions.
-       
+
        * typemanager.cs (TypeManager): Added two new core types: sbyte
        and byte.
 
@@ -13899,7 +14696,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (Indexer::Define): Ditto.
        (Event::Define): Ditto.
        (Property::Define): Ditto.
-       
+
 2001-09-10  Ravi Pratap  <ravi@ximian.com>
 
        * class.cs (TypeContainer::Populate): Now define operators too. 
@@ -13923,7 +14720,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
        for the get and set accessors.
        (Indexer::Define): Implement.
-       
+
 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
 
        * expression.cs (Binary::Resolve): Beginning of it.  I scratched
@@ -13980,7 +14777,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (BaseAccess): New class for expressions of the type 'base access.'
        (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
        respectively.
-       
+
        * cs-parser.jay (element_access): Implement action.
        (base_access): Implement actions.
        (checked_expression, unchecked_expression): Implement.
@@ -13994,13 +14791,13 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        name and the specifiers.
 
        * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
-       
+
        * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
        making them all public ;-)
 
        * cs-parser.jay (error): Remove entirely as we have an implementation in the base
        class anyways.
-       
+
 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
 
        * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
@@ -14039,14 +14836,14 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (event_declaration): Ditto.
        (enum_declaration): Ditto.
        (indexer_declaration): Ditto.
-       
+
        * class.cs (Operator::Operator): Update constructor accordingly.
        (Event::Event): Ditto.
 
        * delegate.cs (Delegate::Delegate): Same here.
 
        * enum.cs (Enum::Enum): Same here.
-       
+
 2001-09-05  Ravi Pratap  <ravi@ximian.com>
 
        * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
@@ -14066,14 +14863,14 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (parameter_array): Ditto.
        (property_declaration): Ditto.
        (destructor_declaration): Ditto.
-       
+
        * class.cs (Struct::Struct): Update constructors accordingly.
        (Class::Class): Ditto.
        (Field::Field): Ditto.
        (Method::Method): Ditto.
        (Property::Property): Ditto.
        (TypeContainer::OptAttribute): update property's return type.
-       
+
        * interface.cs (Interface.opt_attributes): New member.
        (Interface::Interface): Update to take the extra Attributes argument.
 
@@ -14130,14 +14927,14 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        a Type.
 
        (Invocation::Resolve): Begin implementing resolution of invocations.
-       
+
        * literal.cs (StringLiteral):  Implement Emit.
 
 2001-09-05  Ravi Pratap  <ravi@ximian.com>
 
        * cs-parser.jay (error): Add new modifier because we are hiding an inherited
        member.
-       
+
 2001-09-04  Ravi Pratap  <ravi@ximian.com>
 
        * cs-parser.jay (attribute_arguments): Implement actions.
@@ -14157,7 +14954,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (attribute_section): Modify production to use 2 different rules to 
        achieve the same thing. 1 s/r conflict down !
        Clean out commented, useless, non-reducing dimension_separator rules.
-       
+
        * class.cs (TypeContainer.attributes): New member to hold list
        of attributes for a type.
        (Struct::Struct): Modify to take one more argument, the attribute list.
@@ -14165,7 +14962,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (Field::Field): Ditto.
        (Method::Method): Ditto.
        (Property::Property): Ditto.
-       
+
        * cs-parser.jay (struct_declaration): Update constructor call to
        pass in the attributes too.
        (class_declaration): Ditto.
@@ -14256,7 +15053,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        define all enumerations.
 
        * enum.cs (Define): Implement.
-       
+
 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
 
        * cs-parser.jay (overloadable_operator): The semantic value is an
@@ -14298,7 +15095,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
        Hooray, try and catch statements parse fine !
-       
+
 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
 
        * statement.cs (Block::GetVariableType): Fix logic to extract the type
@@ -14374,7 +15171,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * cs-parser.jay (array_creation_expression): Implement to call
        the overloaded New constructor.
-       
+
 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
 
        * class.cs (TypeContainer::Constructors): Return member
@@ -14394,14 +15191,14 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
        generation from working.     Also add some temporary debugging
        code. 
-       
+
 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
 
        * codegen.cs: Lots of code generation pieces.  This is only the
        beginning, will continue tomorrow with more touches of polish.  We
        handle the fundamentals of if, while, do, for, return.  Others are
        trickier and I need to start working on invocations soon.
-       
+
        * gen-treedump.cs: Bug fix, use s.Increment here instead of
        s.InitStatement. 
 
@@ -14449,7 +15246,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (TypeContainer::EmitMethod):  New method.  Emits methods.
 
        * expression.cs: Removed MethodGroup class from here.
-       
+
        * parameter.cs (Parameters::GetCallingConvention): new method.
 
 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
@@ -14460,7 +15257,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (Constructor::CallingConvention): Returns the calling convention.
        (Constructor::ParameterTypes): Returns the constructor parameter
        types. 
-       
+
        (TypeContainer::AddConstructor): Keep track of default constructor
        and the default static constructor.
 
@@ -14480,7 +15277,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        (constructor_declarator): If there is no implicit `base' or
        `this', then invoke the default parent constructor. 
-       
+
        * modifiers.cs (MethodAttr): New static function maps a set of
        modifiers flags into a MethodAttributes enum
        (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
@@ -14538,16 +15335,16 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * rootcontext.cs (LookupType): New function.  Used to locate types 
 
-       
+
 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
 
        * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
        this System.Reflection code is.  Kudos to Microsoft
-       
+
        * typemanager.cs: Implement a type cache and avoid loading all
        types at boot time.  Wrap in LookupType the internals.  This made
        the compiler so much faster.  Wow.  I rule!
-       
+
        * driver.cs: Make sure we always load mscorlib first (for
        debugging purposes, nothing really important).
 
@@ -14591,7 +15388,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (ResolveTree): Encapsulated all the tree resolution here.
        (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
        types. 
-       
+
        * driver.cs: Add support for --nostdlib, to avoid loading the
        default assemblies.
        (Main): Do not put tree resolution here. 
@@ -14606,7 +15403,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * rootcontext.cs (CreateInterface): Handle the case where there
        are no parent interfaces.
-       
+
        (CloseTypes): Routine to flush types at the end.
        (CreateInterface): Track types.
        (GetInterfaces): Returns an array of Types from the list of
@@ -14615,7 +15412,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        * typemanager.c (AddUserType): Mechanism to track user types (puts
        the type on the global type hash, and allows us to close it at the
        end). 
-       
+
 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
 
        * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
@@ -14646,7 +15443,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
        (enum_body): Put an opt_comma here instead of putting it on
        enum_body or enum_member_declarations so we can handle trailing
        commas on enumeration members.  Gets rid of a shift/reduce.
-       
+
        (type_list): Need a COMMA in the middle.
 
        (indexer_declaration): Tell tokenizer to recognize get/set
@@ -14659,7 +15456,7 @@ Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
 
        * cs-parser.jay: Add precendence rules for a number of operators
        ot reduce the number of shift/reduce conflicts in the grammar.
-       
+
 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
 
        * tree.cs: moved IGenerator interface and renamed it to ITreeDump