2002-09-20 Miguel de Icaza <miguel@ximian.com>
[mono.git] / mcs / mcs / ChangeLog
index 26e2a0186c70f9a643553b0483d322b4c764dfdd..f563112e707c1b89f2d367e3badb5a3b0e1b9355 100755 (executable)
@@ -1,6 +1,562 @@
+2002-09-20  Miguel de Icaza  <miguel@ximian.com>
+
+       * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
+
+       * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
+
+2002-09-19  Miguel de Icaza  <miguel@ximian.com>
+
+       * class.cs (TypeContainer.DefineType): We can not use the nice
+       PackingSize with the size set to 1 DefineType method, because it
+       will not allow us to define the interfaces that the struct
+       implements.
+
+       This completes the fixing of bug 27287
+
+       * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
+       means also structs.  This fixes part of the problem. 
+       (Expresion.ImplicitReferenceConversionExists): ditto.
+
+       * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
+       error if there were no errors reported during the type lookup
+       process, to avoid duplicates or redundant errors.  Without this
+       you would get an ambiguous errors plus a type not found.  We have
+       beaten the user enough with the first error.  
+
+       (DeclSparce.FindType): Emit a warning if we have an ambiguous
+       reference. 
+
+       * ecore.cs (SimpleName.DoResolveType): If an error is emitted
+       during the resolution process, stop the lookup, this avoids
+       repeated error reports (same error twice).
+
+       * rootcontext.cs: Emit a warning if we have an ambiguous reference.
+
+       * typemanager.cs (LookupType): Redo the type lookup code to match
+       the needs of System.Reflection.  
+
+       The issue is that System.Reflection requires references to nested
+       types to begin with a "+" sign instead of a dot.  So toplevel
+       types look like: "NameSpace.TopLevelClass", and nested ones look
+       like "Namespace.TopLevelClass+Nested", with arbitrary nesting
+       levels. 
+
+2002-09-19  Martin Baulig  <martin@gnome.org>
+
+       * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
+       says that a method always returns or always throws an exception,
+       don't report the CS0161.
+
+       * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
+       set `Returns = new_returns'.
+
+2002-09-19  Martin Baulig  <martin@gnome.org>
+
+       * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
+       to an enum constant, check for a CS0176.
+
+2002-09-18  Miguel de Icaza  <miguel@ximian.com>
+
+       * class.cs (TypeContainer.CheckPairedOperators): Now we check
+       for operators that must be in pairs and report errors.
+
+       * ecore.cs (SimpleName.DoResolveType): During the initial type
+       resolution process, when we define types recursively, we must
+       check first for types in our current scope before we perform
+       lookups in the enclosing scopes.
+
+       * expression.cs (MakeByteBlob): Handle Decimal blobs.
+
+       (Invocation.VerifyArgumentsCompat): Call
+       TypeManager.TypeToCoreType on the parameter_type.GetElementType.
+       I thought we were supposed to always call this, but there are a
+       few places in the code where we dont do it.
+
+2002-09-17  Miguel de Icaza  <miguel@ximian.com>
+
+       * driver.cs: Add support in -linkres and -resource to specify the
+       name of the identifier.
+
+2002-09-16  Miguel de Icaza  <miguel@ximian.com>
+
+       * ecore.cs (StandardConversionExists): Sync with the conversion
+       code: allow anything-* to void* conversions.
+
+       (FindMostSpecificSource): Use an Expression argument
+       instead of a Type, because we might be handed over a Literal which
+       gets a few more implicit conversions that plain types do not.  So
+       this information was being lost.
+
+       Also, we drop the temporary type-holder expression when not
+       required.
+
+2002-09-17  Martin Baulig  <martin@gnome.org>
+
+       * class.cs (PropertyBase.CheckBase): Don't check the base class if
+       this is an explicit interface implementation.
+
+2002-09-17  Martin Baulig  <martin@gnome.org>
+
+       * class.cs (PropertyBase.CheckBase): Make this work for indexers with
+       different `IndexerName' attributes.
+
+       * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
+       (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
+       virtual CommonResolve().
+
+2002-09-16  Miguel de Icaza  <miguel@ximian.com>
+
+       * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
+       and convert that to the UnderlyingType.
+
+       * statement.cs (Foreach.Resolve): Indexers are just like variables
+       or PropertyAccesses.
+
+       * cs-tokenizer.cs (consume_string): Track line numbers and columns
+       inside quoted strings, we were not doing this before.
+
+2002-09-16  Martin Baulig  <martin@gnome.org>
+
+       * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
+       resolve it.  This is needed for the definite assignment check of the
+       instance expression, fixes bug #29846.
+       (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
+
+2002-09-16  Nick Drochak  <ndrochak@gol.com>
+
+       * parameter.cs: Fix compile error.  Cannot reference static member
+       from an instance object.  Is this an mcs bug?
+
+2002-09-14  Martin Baulig  <martin@gnome.org>
+
+       * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
+       multiple times.  Fixes bug #30295, added test-166.cs.
+
+2002-09-14  Martin Baulig  <martin@gnome.org>
+
+       * statement.cs (Block.Emit): Don't emit unreachable code.
+       (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
+       `break' statements.
+       (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
+
+2002-09-14  Martin Baulig  <martin@gnome.org>
+
+       * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
+       is set.
+
+2002-09-14  Martin Baulig  <martin@gnome.org>
+
+       * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
+       if `type == parent' since in this case `type.IsSubclassOf (parent)' will
+       be false on the ms runtime.
+
+2002-09-13  Martin Baulig  <martin@gnome.org>
+
+       * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
+       the CS0038 error message.
+
+2002-09-12  Miguel de Icaza  <miguel@ximian.com>
+
+       * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
+       constant inside, return it.
+
+2002-09-12  Martin Baulig  <martin@gnome.org>
+
+       * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
+       implicit conversion can be done between enum types.
+
+       * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
+       check whether an implicit conversion to the current enum's UnderlyingType
+       exists and report an error if not.
+
+       * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
+       without debugging support.
+
+       * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
+       Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
+
+2002-09-12  Martin Baulig  <martin@gnome.org>
+
+       * typemanager.cs (TypeManager.IsNestedChildOf): New method.
+
+       * ecore.cs (IMemberExpr.DeclaringType): New property.
+       (SimpleName.SimpleNameResolve): Check whether we're accessing a
+       nonstatic member of an outer type (CS0038).
+
+2002-09-11  Miguel de Icaza  <miguel@ximian.com>
+
+       * driver.cs: Activate the using-error detector at warning level
+       4 (at least for MS-compatible APIs).
+
+       * namespace.cs (VerifyUsing): Small buglett fix.
+
+       * pending.cs (PendingImplementation): pass the container pointer. 
+
+       * interface.cs (GetMethods): Allow for recursive definition.  Long
+       term, I would like to move every type to support recursive
+       definitions, not the current ordering mechanism that we have right
+       now.
+
+       The situation is this: Attributes are handled before interfaces,
+       so we can apply attributes to interfaces.  But some attributes
+       implement interfaces, we will now handle the simple cases
+       (recursive definitions will just get an error).  
+
+       * parameter.cs: Only invalidate types at the end if we fail to
+       lookup all types.  
+
+2002-09-09  Martin Baulig  <martin@gnome.org>
+
+       * ecore.cs (PropertyExpr.Emit): Also check for
+       TypeManager.system_int_array_get_length so this'll also work when
+       compiling corlib.  Fixes #30003.
+
+2002-09-09  Martin Baulig  <martin@gnome.org>
+
+       * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
+       and throw an exception if we can't get the type's size.  Fixed #30040,
+       added test-165.cs.
+
+2002-09-09  Martin Baulig  <martin@gnome.org>
+
+       * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
+
+       * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
+       context.  Fixes bug #30027.
+
+       * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
+       virtual functions.  Fixes bug #30043, added test-164.cs.
+
+2002-09-08  Ravi Pratap  <ravi@ximian.com>
+
+       * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
+
+2002-09-08  Nick Drochak  <ndrochak@gol.com>
+
+       * driver.cs: Use an object to get the windows codepage since it's not a
+       static property.
+
+2002-09-08  Miguel de Icaza  <miguel@ximian.com>
+
+       * statement.cs (For.Emit): for infinite loops (test == null)
+       return whether there is a break inside, not always "true".
+
+       * 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.
+
+       * decl.cs: ditto.
+
+2002-09-06  Ravi Pratap  <ravi@ximian.com>
+
+       * attribute.cs : Fix incorrect code which relied on catching
+       a NullReferenceException to detect a null being passed in
+       where an object was expected.
+
+2002-09-06  Miguel de Icaza  <miguel@ximian.com>
+
+       * statement.cs (Try): flag the catch variable as assigned
+
+       * expression.cs (Cast): Simplified by using ResolveType instead of
+       manually resolving.
+
+       * statement.cs (Catch): Fix bug by using ResolveType.
+
+2002-09-06  Ravi Pratap  <ravi@ximian.com>
+
+       * expression.cs (BetterConversion): Special case for when we have
+       a NullLiteral as the argument and we have to choose between string
+       and object types - we choose string the way csc does.
+
+       * attribute.cs (Attribute.Resolve): Catch the
+       NullReferenceException and report error #182 since the Mono
+       runtime no more has the bug and having this exception raised means
+       we tried to select a constructor which takes an object and is
+       passed a null.
+
+2002-09-05  Ravi Pratap  <ravi@ximian.com>
+
+       * expression.cs (Invocation.OverloadResolve): Flag a nicer error
+       message (1502, 1503) when we can't locate a method after overload
+       resolution. This is much more informative and closes the bug
+       Miguel reported.
+
+       * interface.cs (PopulateMethod): Return if there are no argument
+       types. Fixes a NullReferenceException bug.
+
+       * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
+       expressions too. Previously we were checking only in one place for
+       positional arguments leaving out named arguments.
+
+       * ecore.cs (ImplicitNumericConversion): Conversion from underlying
+       type to the enum type is not allowed. Remove code corresponding to
+       that.
+
+       (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:
+       * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
+
+2002-09-03  Miguel de Icaza  <miguel@ximian.com>
+
+       * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
+       it was important that we stored the right value after the
+       reduction in `converted'.
+
+2002-09-04  Martin Baulig  <martin@gnome.org>
+
+       * location.cs (Location.SymbolDocument): Use full pathnames for the
+       source files.
+
+2002-08-30  Miguel de Icaza  <miguel@ximian.com>
+
+       * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
+       of the expression resolve mechanism, because that will catch the
+       SimpleName error failures.
+
+       (Conditional): If we can not resolve the
+       expression, return, do not crash.
+
+2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+       * cs-tokenizer.cs:
+       (location): display token name instead of its number.
+
+2002-08-28  Martin Baulig  <martin@gnome.org>
+
+       * expression.cs (Binary.ResolveOperator): Don't silently return
+       but return an error if an operator cannot be applied between two
+       enum types.
+
+2002-08-28  Martin Baulig  <martin@gnome.org>
+
+       * class.cs (Constructor.Define): Set the permission attributes
+       correctly instead of making all constructors public.
+
+2002-08-28  Martin Baulig  <martin@gnome.org>
+
+       * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
+       for private members before reporting a CS0103; if we find anything,
+       it's a CS0122.
+
+2002-08-28  Martin Baulig  <martin@gnome.org>
+
+       * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
+       to check whether `closure_start_type == closure_invocation_type',
+       we also need to check whether `m.DeclaringType == closure_invocation_type'
+       before bypassing the permission checks.  We might be accessing
+       protected/private members from the base class.
+       (TypeManager.RealMemberLookup): Only set private_ok if private
+       members were requested via BindingFlags.NonPublic.
+
+       * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
+
+       * expression.cs (MemberAccess.ResolveMemberAccess): Set
+       MethodGroupExpr.IsExplicitImpl if appropriate.
+       (Invocation.DoResolve): Don't report the CS0120 for explicit
+       interface implementations.
+
+2002-08-27  Martin Baulig  <martin@gnome.org>
+
+       * expression.cs (Invocation.DoResolve): If this is a static
+       method and we don't have an InstanceExpression, we must report
+       a CS0120.
+
+2002-08-25  Martin Baulig  <martin@gnome.org>
+
+       * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
+       `==' between a valuetype and an object.
+
+2002-08-25  Miguel de Icaza  <miguel@ximian.com>
+
+       * ecore.cs (TypeExpr): Provide a ToString method.
+
+2002-08-24  Martin Baulig  <martin@gnome.org>
+
+       * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
+       now called proggie.dbg and it's a binary file.
+
+2002-08-23  Martin Baulig  <martin@gnome.org>
+
+       * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
+
+2002-08-23  Martin Baulig  <martin@gnome.org>
+
+       * struct.cs (MyStructInfo.ctor): Make this work with empty
+       structs; it's not allowed to use foreach() on null.
+
+2002-08-23  Martin Baulig  <martin@gnome.org>
+
+       * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
+       writer the full pathname of the generated assembly.
+
+2002-08-23  Martin Baulig  <martin@gnome.org>
+
+       * statements.cs (FlowBranching.UsageVector.MergeChildren):
+       A `finally' block never returns or breaks; improved handling of
+       unreachable code.
+
+2002-08-23  Martin Baulig  <martin@gnome.org>
+
+       * statement.cs (Throw.Resolve): Allow `throw null'.
+
+2002-08-23  Martin Baulig  <martin@gnome.org>
+
+       * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
+       EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
+       `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
+       MemberLookup would return a wrong event if this is an explicit
+       interface implementation and the class has an event with the same
+       name.
+
+2002-08-23  Martin Baulig  <martin@gnome.org>
+
+       * statement.cs (Block.AddChildVariableNames): New public method.
+       (Block.AddChildVariableName): Likewise.
+       (Block.IsVariableNameUsedInChildBlock): Likewise.
+       (Block.AddVariable): Check whether a variable name has already
+       been used in a child block.
+
+       * cs-parser.jay (declare_local_variables): Mark all variable names
+       from the current block as being used in a child block in the
+       implicit block.
+
+2002-08-23  Martin Baulig  <martin@gnome.org>
+
+       * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
+       find the symbol writer.
+
+       * driver.cs: csc also allows the arguments to /define being
+       separated by commas, not only by semicolons.
+
+2002-08-23  Martin Baulig  <martin@gnome.org>
+
+       * interface.cs (Interface.GetMembers): Added static check for events.
+
+2002-08-15  Martin Baulig  <martin@gnome.org>
+
+       * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
+       call, use ec.ContainerType.BaseType as queried_type and invocation_type.
+
+       * ecore.cs (Expression.MemberLookup): Added documentation and explained
+       why the MethodData.EmitDestructor() change was necessary.
+
+2002-08-20  Martin Baulig  <martin@gnome.org>
+
+       * class.cs (TypeContainer.FindMembers): Added static check for events.
+
+       * decl.cs (MemberCache.AddMembers): Handle events like normal members.
+
+       * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
+       use Type.GetEvents(), not Type.FindMembers().
+
+2002-08-20  Martin Baulig  <martin@gnome.org>
+
+       * decl.cs (MemberCache): Added a special method cache which will
+       be used for method-only searched.  This ensures that a method
+       search will return a MethodInfo with the correct ReflectedType for
+       inherited methods.      
+
+2002-08-20  Martin Baulig  <martin@gnome.org>
+
+       * decl.cs (DeclSpace.FindMembers): Made this public.
+
+2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+       * delegate.cs: fixed build on windows.
+       [FIXME:  Filed as bug #29150: MCS must report these errors.]
+
+2002-08-19  Ravi Pratap  <ravi@ximian.com>
+
+       * ecore.cs (StandardConversionExists): Return a false
+       if we are trying to convert the void type to anything else
+       since that is not allowed.
+
+       * delegate.cs (DelegateInvocation.DoResolve): Ensure that
+       we flag error 70 in the event an event is trying to be accessed
+       directly from outside the declaring type.
+
+2002-08-20  Martin Baulig  <martin@gnome.org>
+
+       * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
+       MemberCache from typemanager.cs to decl.cs.
+
+2002-08-19  Martin Baulig  <martin@gnome.org>
+
+       * class.cs (TypeContainer): Implement IMemberContainer.
+       (TypeContainer.DefineMembers): Create the MemberCache.
+       (TypeContainer.FindMembers): Do better BindingFlags checking; only
+       return public members if BindingFlags.Public was given, check
+       whether members are static.
+
+2002-08-16  Martin Baulig  <martin@gnome.org>
+
+       * decl.cs (DeclSpace.Define): Splitted this in Define and
+       DefineMembers.  DefineMembers is called first and initializes the
+       MemberCache.
+
+       * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
+       DefineMembers() on all our DeclSpaces.
+
+       * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
+       but call DefineMembers() on all nested interfaces.  We call their
+       Define() in our new Define() function.
+
+       * interface.cs (Interface): Implement IMemberContainer.
+       (Interface.Define): Moved all code except the attribute stuf to
+       DefineMembers().
+       (Interface.DefineMembers): Initialize the member cache.
+
+       * typemanager.cs (IMemberFinder): Removed this interface, we don't
+       need this anymore since we can use MemberCache.FindMembers directly.
+
+2002-08-19  Martin Baulig  <martin@gnome.org>
+
+       * typemanager.cs (MemberCache): When creating the cache for an
+       interface type, add all inherited members.
+       (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
+       to `out bool used_cache' and documented it.
+       (TypeManager.MemberLookup): If we already used the cache in the first
+       iteration, we don't need to do the interfaces check.
+
+2002-08-19  Martin Baulig  <martin@gnome.org>
+
+       * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
+       here from IMemberFinder and don't implement this interface anymore.
+       (DeclSpace.MemberCache): Moved here from IMemberFinder.
+
+       * typemanager.cs (IMemberFinder): This interface is now only used by
+       classes which actually support the member cache.
+       (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
+       since we only put DeclSpaces into this Hashtable.
+       (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
+       a dynamic type and TypeHandle.GetTypeHandle() otherwise.
+
+2002-08-16  Martin Baulig  <martin@gnome.org>
+
+       * typemanager.cs (ICachingMemberFinder): Removed.
+       (IMemberFinder.MemberCache): New property.
+       (TypeManager.FindMembers): Merged this with RealFindMembers().
+       This function will never be called from TypeManager.MemberLookup()
+       so we can't use the cache here, just the IMemberFinder.
+       (TypeManager.MemberLookup_FindMembers): Check whether the
+       IMemberFinder has a MemberCache and call the cache's FindMembers
+       function.
+       (MemberCache): Rewrote larger parts of this yet another time and
+       cleaned it up a bit.
+
 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
 
-       * driver.cs: Show the CSC-like command line arguments.
+       * driver.cs (LoadArgs): Support quoting.
+
+       (Usage): Show the CSC-like command line arguments.
 
        Improved a few error messages.