2002-08-19 Martin Baulig <martin@gnome.org>
[mono.git] / mcs / mcs / ChangeLog
index dbc53d0236d0c14dc9e25d1e4ea43411ecd43e53..7db9fe1a8d75168242aebe8da665339d578d64e4 100755 (executable)
@@ -1,3 +1,189 @@
+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 (LoadArgs): Support quoting.
+
+       (Usage): Show the CSC-like command line arguments.
+
+       Improved a few error messages.
+
+2002-08-15  Martin Baulig  <martin@gnome.org>
+
+       * typemanager.cs (IMemberContainer.Type): New property.
+       (IMemberContainer.IsInterface): New property.
+
+       The following changes are conditional to BROKEN_RUNTIME, which is
+       defined at the top of the file.
+
+       * typemanager.cs (MemberCache.MemberCache): Don't add the base
+       class'es members, but add all members from TypeHandle.ObjectType
+       if we're an interface.
+       (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
+       is the current type.
+       (MemberCache.CacheEntry.Container): Removed this field.
+       (TypeHandle.GetMembers): Include inherited members.
+
+2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+       * typemanager.cs: fixed compilation and added a comment on a field that
+       is never used.
+
+2002-08-15  Martin Baulig  <martin@gnome.org>
+
+       * class.cs (ConstructorInitializer.Resolve): In the
+       Expression.MemberLookup call, use the queried_type as
+       invocation_type.
+
+       * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
+       declared' attribute, it's always true.
+       (IMemberContainer.Parent, IMemberContainer.Name): New properties.
+       (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
+       temporary wrapper for FindMembers which tells MemberLookup whether
+       members from the base classes are included in the return value.
+       This will go away soon.
+       (TypeManager.MemberLookup): Use this temporary hack here; once the
+       new MemberCache is completed, we don't need to do the DeclaredOnly
+       looping here anymore since the MemberCache will take care of this.
+       (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
+       (MemberCache): When creating the MemberCache for a class, get
+       members from the current class and all its base classes.
+       (MemberCache.CacheEntry.Container): New field.  This is a
+       temporary hack until the Mono runtime is fixed to distinguish
+       between ReflectedType and DeclaringType.  It allows us to use MCS
+       with both the MS runtime and the unfixed Mono runtime without
+       problems and without accecting performance.
+       (MemberCache.SearchMembers): The DeclaredOnly looping from
+       TypeManager.MemberLookup is now done here.      
+
+2002-08-14  Martin Baulig  <martin@gnome.org>
+
+       * statement.cs (MyStructInfo.MyStructInfo): Don't call
+       Type.GetFields on dynamic types but get the fields from the
+       corresponding TypeContainer.
+       (MyStructInfo.GetStructInfo): Added check for enum types.
+
+       * typemanager.cs (MemberList.IsSynchronized): Implemented.
+       (MemberList.SyncRoot): Implemented.
+       (TypeManager.FilterWithClosure): No need to check permissions if
+       closure_start_type == closure_invocation_type, don't crash if
+       closure_invocation_type is null.
+
+2002-08-13  Martin Baulig  <martin@gnome.org>
+
+       Rewrote TypeContainer.FindMembers to use a member cache.  This
+       gives us a speed increase of about 35% for the self-hosting MCS
+       build and of about 15-20% for the class libs (both on GNU/Linux).
+
+       * report.cs (Timer): New class to get enhanced profiling.  This
+       whole class is "TIMER" conditional since it remarkably slows down
+       compilation speed.
+
+       * class.cs (MemberList): New class.  This is an IList wrapper
+       which we're now using instead of passing MemberInfo[]'s around to
+       avoid copying this array unnecessarily.
+       (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
+       (ICachingMemberFinder, IMemberContainer): New interface.
+       (TypeManager.FilterWithClosure): If `criteria' is null, the name
+       has already been checked, otherwise use it for the name comparision.
+       (TypeManager.FindMembers): Renamed to RealMemberFinder and
+       provided wrapper which tries to use ICachingMemberFinder.FindMembers
+       if possible.  Returns a MemberList, not a MemberInfo [].
+       (TypeHandle): New class, implements IMemberContainer.  We create
+       one instance of this class per type, it contains a MemberCache
+       which is used to do the member lookups.
+       (MemberCache): New class.  Each instance of this class contains
+       all members of a type and a name-based hash table.
+       (MemberCache.FindMembers): This is our new member lookup
+       function.  First, it looks up all members of the requested name in
+       the hash table.  Then, it walks this list and sorts out all
+       applicable members and returns them.
+
+2002-08-13  Martin Baulig  <martin@gnome.org>
+
+       In addition to a nice code cleanup, this gives us a performance
+       increase of about 1.4% on GNU/Linux - not much, but it's already
+       half a second for the self-hosting MCS compilation.
+
+       * typemanager.cs (IMemberFinder): New interface.  It is used by
+       TypeManager.FindMembers to call FindMembers on a TypeContainer,
+       Enum, Delegate or Interface.
+       (TypeManager.finder_to_member_finder): New PtrHashtable.
+       (TypeManager.finder_to_container): Removed.
+       (TypeManager.finder_to_delegate): Removed.
+       (TypeManager.finder_to_interface): Removed.
+       (TypeManager.finder_to_enum): Removed.
+
+       * interface.cs (Interface): Implement IMemberFinder.
+
+       * delegate.cs (Delegate): Implement IMemberFinder.
+
+       * enum.cs (Enum): Implement IMemberFinder.
+
+       * class.cs (TypeContainer): Implement IMemberFinder.
+
+2002-08-12  Martin Baulig  <martin@gnome.org>
+
+       * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
+
+2002-08-12  Martin Baulig  <martin@gnome.org>
+
+       * ecore.cs (ITypeExpression): New interface for expressions which
+       resolve to a type.
+       (TypeExpression): Renamed to TypeLookupExpression.
+       (Expression.DoResolve): If we're doing a types-only lookup, the
+       expression must implement the ITypeExpression interface and we
+       call DoResolveType() on it.
+       (SimpleName): Implement the new ITypeExpression interface.
+       (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
+       hack, the situation that we're only looking up types can't happen
+       anymore when this method is called.  Moved the type lookup code to
+       DoResolveType() and call it.
+       (SimpleName.DoResolveType): This ITypeExpression interface method
+       is now doing the types-only lookup.
+       (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
+       (ResolveFlags): Added MaskExprClass.
+
+       * expression.cs (MemberAccess): Implement the ITypeExpression
+       interface.
+       (MemberAccess.DoResolve): Added support for a types-only lookup
+       when we're called via ITypeExpression.DoResolveType().
+       (ComposedCast): Implement the ITypeExpression interface.
+
+       * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
+       Expression.Resolve() with ResolveFlags.Type instead.
+
+2002-08-12  Martin Baulig  <martin@gnome.org>
+
+       * interface.cs (Interface.Define): Apply attributes.
+
+       * attribute.cs (Attribute.ApplyAttributes): Added support for
+       interface attributes.
+
 2002-08-11  Martin Baulig  <martin@gnome.org>
 
        * statement.cs (Block.Emit): Only check the "this" variable if we