+2004-05-19 Raja R Harinath <rharinath@novell.com>
+
+ * cs-parser.jay (attribute): Create a GlobalAttribute for the case
+ of a top-level attribute without an attribute target.
+ * attribute.cs (Attribute.Error_AttributeConstructorMismatch):
+ Make non-static.
+ (Attribute.Conditional_GetConditionName),
+ (Attribute.Obsolete_GetObsoleteMessage): Update.
+ (Attribute.IndexerName_GetIndexerName): New. Attribute-specific
+ part of ScanForIndexerName.
+ (Attribute.CanIgnoreInvalidAttribute): New function.
+ (Attribute.ScanForIndexerName): Move to ...
+ (Attributes.ScanForIndexerName): ... here.
+ (Attributes.Attrs): Rename from now-misnamed AttributeSections.
+ (Attributes.Search): New internal variant that can choose not to
+ complain if types aren't resolved. The original signature now
+ complains.
+ (Attributes.GetClsCompliantAttribute): Use internal variant, with
+ complaints suppressed.
+ (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
+ only if it not useful.
+ (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
+ top-level for attributes that are shared between the assembly
+ and a top-level class.
+ * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
+ * class.cs: Update to reflect changes.
+ (DefineIndexers): Fuse loops.
+ * codegen.cs (GetAssemblyName): Update to reflect changes. Accept
+ a couple more variants of attribute names.
+
+2004-05-18 Marek Safar <marek.safar@seznam.cz>
+
+ Fix bug #52585 (Implemented explicit attribute declaration)
+
+ * attribute.cs:
+ (Attributable.ValidAttributeTargets): New abstract method. It gets
+ list of valid attribute targets for explicit target declaration.
+ (Attribute.Target): It holds target itself.
+ (AttributeSection): Removed.
+ (Attribute.CheckTargets): New method. It checks whether attribute
+ target is valid for the current element.
+
+ * class.cs:
+ (EventProperty): New class. For events that are declared like
+ property (with add and remove accessors).
+ (EventField): New class. For events that are declared like field.
+ class.cs
+
+ * cs-parser.jay: Implemented explicit attribute target declaration.
+
+ * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:
+ Override ValidAttributeTargets.
+
+ * parameter.cs:
+ (ReturnParameter): Class for applying custom attributes on
+ the return type.
+ (ParameterAtribute): New class. Class for applying custom
+ attributes on the parameter type.
+
+2004-05-17 Miguel de Icaza <miguel@ximian.com>
+
+ * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
+ definitions.
+
+ (Method): Allow UNSAFE here.
+
+ * modifiers.cs: Support unsafe reporting.
+
+2004-05-17 Marek Safar <marek.safar@seznam.cz>
+
+ * decl.cs: Fix bug #58478.
+
+2004-05-17 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+ * statement.cs: When checking for unreachable code on an EmptyStatement,
+ set the location. Fixes bug #58488.
+
+2004-05-13 Miguel de Icaza <miguel@ximian.com>
+
+ * driver.cs: Add -pkg handling.
+
+ From Gonzalo: UseShelLExecute=false
+
+2004-05-12 Marek Safar <marek.safar@seznam.cz>
+
+ * attribute.cs:
+ (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
+ for attribute.
+ (Attribute.IsClsCompliaceRequired): Moved to base for better
+ accesibility.
+ (Attribute.UsageAttribute): New property for AttributeUsageAttribute
+ when attribute is AttributeUsageAttribute.
+ (Attribute.GetValidTargets): Simplified.
+ (Attribute.GetAttributeUsage): New method returns AttributeUsage
+ attribute for this type.
+ (Attribute.ApplyAttributes): Method renamed to Emit and make
+ non-static.
+ (GlobalAttributeSection): New class for special handling of global
+ attributes (assembly, module).
+ (AttributeSection.Emit): New method.
+
+ * class.cs: Implemented Attributable abstract methods.
+ (MethodCore.LabelParameters): Moved to Parameter class.
+ (Accessor): Is back simple class.
+ (PropertyMethod): Implemented Attributable abstract class.
+ (DelegateMethod): Implemented Attributable abstract class.
+ (Event): New constructor for disctintion between normal Event
+ and Event with accessors.
+
+ * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
+
+ * codegen.cs, const.cs, decl.cs, delegate.cs:
+ (CommonAssemblyModulClass): Implemented Attributable abstract class
+ and simplified.
+
+ * enum.cs: Implement IAttributeSupport interface.
+ (EnumMember): New class for emum members. Implemented Attributable
+ abstract class
+
+ * parameter.cs:
+ (ParameterBase): Is abstract.
+ (ReturnParameter): New class for easier [return:] attribute handling.
+
+ * typemanager.cs: Removed builder_to_attr.
+
+2004-05-11 Raja R Harinath <rharinath@novell.com>
+
+ Fix bug #57151.
+ * attribute.cs (Attribute.GetPositionalValue): New function.
+ * class.cs (TypeContainer.VerifyMembers): New function.
+ (TypeContainer.Emit): Use it.
+ (ClassOrStruct): New base class for Class and Struct.
+ (ClassOrStruct.ApplyAttributeBuilder): New function. Note if
+ StructLayout(LayoutKind.Explicit) was ascribed to the struct or
+ class.
+ (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
+ then each non-static field should have a FieldOffset attribute.
+ Otherwise, none of the fields should have a FieldOffset attribute.
+ * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout
+ and FieldOffset attributes.
+ * typemanager.cs (TypeManager.struct_layout_attribute_type)
+ (TypeManager.field_offset_attribute_type): New core types.
+ (TypeManager.InitCoreTypes): Initialize them.
+
+2004-05-11 Michal Moskal <malekith@pld-linux.org>
+
+ * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
+ Return correct type.
+ From bug #58270.
+
+2004-05-09 Miguel de Icaza <miguel@ximian.com>
+
+ * expression.cs (Binary.DoNumericPromotions): 0 long constant can
+ be implicitly converted to ulong.
+
+ * expression.cs: The logic for allowing operator &, | and ^ worked
+ was wrong, it worked before because we did not report an error in
+ an else branch. Fixes 57895.
+
+ * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
+ allow volatile fields to be reference types.
+
+2004-05-07 Miguel de Icaza <miguel@ximian.com>
+
+ * driver.cs: Add support for /debug-
+
+2004-05-07 Raja R Harinath <rharinath@novell.com>
+
+ * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType):
+ Add a 'complain' parameter to silence errors.
+ (Attribute.Resolve): Update to changes. Put in sanity check to catch
+ silently overlooked type-resolutions.
+ (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
+ to reflect changes.
+ (Attributes.Search): New function.
+ (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
+ (Attributes.GetAttributeFullName): Remove hack.
+ * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes):
+ Update to reflect changes.
+ * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
+ Use Attributes.Search instead of nested loops.
+
+2004-05-07 Marek Safar <marek.safar@seznam.cz>
+
+ * decl.cs:
+ (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
+ (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
+ (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
+
+ * report.cs: (Report.Warning): Renamed to Warning_T because of
+ parameter collision.
+
+2004-05-05 Raja R Harinath <rharinath@novell.com>
+
+ * expression.cs (MemberAccess.ResolveMemberAccess):
+ Exit with non-zero status after Report.Error.
+ * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
+ Likewise.
+ * typemanager.cs (TypeManager.CoreLookupType): Likewise.
+
+2004-05-04 Lluis Sanchez Gual <lluis@ximian.com>
+
+ * support.cs: Don't hang when the file is empty.
+
+2004-05-04 Lluis Sanchez Gual <lluis@ximian.com>
+
+ * support.cs: In SeekableStreamReader, compute the preamble size of the
+ underlying stream. Position changes should take into account that initial
+ count of bytes.
+
+2004-05-03 Todd Berman <tberman@sevenl.net>
+
+ * driver.cs: remove unused GetSysVersion function.
+
+2004-05-03 Todd Berman <tberman@sevenl.net>
+
+ * driver.cs: Remove the hack from saturday, as well as the hack
+ from jackson (LoadAssemblyFromGac), also adds the CWD to the
+ link_paths to get that bit proper.
+
+2004-05-01 Todd Berman <tberman@sevenl.net>
+
+ * driver.cs: Try a LoadFrom before a Load, this checks the current
+ path. This is currently a bug in mono that is be fixed, however, this
+ provides a workaround for now. This will be removed when the bug
+ is fixed.
+
+2004-05-01 Sebastien Pouliot <sebastien@ximian.com>
+
+ * CryptoConvert.cs: Updated to latest version. Fix issue with
+ incomplete key pairs (#57941).
+
+2004-05-01 Todd Berman <tberman@sevenl.net>
+
+ * driver.cs: Remove '.' from path_chars, now System.* loads properly
+ from the GAC
+
+2004-04-30 Jackson Harper <jackson@ximian.com>
+
+ * codegen.cs: Open keys readonly.
+
+2004-04-30 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+ * typemanager.cs: don't report cyclic struct layout when a struct
+ contains 2 or more fields of the same type. Failed for Pango.AttrShape
+ which has 2 Pango.Rectangle fields.
+
+2004-04-29 Ben Maurer <bmaurer@users.sourceforge.net>
+
+ * expression.cs: Handle IntPtr comparisons with IL code
+ rather than a method call.
+
+2004-04-29 Martin Baulig <martin@ximian.com>
+
+ * ecore.cs (PropertyExpr.FindAccessor): New private method. Walk
+ the list of PropertyInfo's in class hierarchy and find the
+ accessor. Fixes #56013.
+
+2004-04-29 Martin Baulig <martin@ximian.com>
+
+ * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
+
+2004-04-29 Martin Baulig <martin@ximian.com>
+
+ Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
+
+ * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
+
+2004-04-29 Martin Baulig <martin@ximian.com>
+
+ * class.cs (ConstructorInitializer.Resolve): Check whether the
+ parent .ctor is accessible. Fixes #52146.
+
+2004-04-29 Martin Baulig <martin@ximian.com>
+
+ Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
+
+ * statement.cs (Using.EmitLocalVariableDecls): Use
+ TypeManager.idisposable_type, not typeof (IDisposable).
+ (Foreach.EmitCollectionForeach): Added support for valuetypes.
+
+2004-04-29 Martin Baulig <martin@ximian.com>
+
+ * class.cs (Event.Define): Don't emit the field and don't set
+ RTSpecialName and SpecialName for events on interfaces. Fixes
+ #57703.
+
+2004-04-29 Raja R Harinath <rharinath@novell.com>
+
+ Refactor Attribute.ApplyAttributes.
+ * attribute.cs (Attributable): New base class for objects that can
+ have Attributes applied on them.
+ (Attribute): Make AttributeUsage fields public.
+ (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
+ (Attribute.IsInternalCall): New property.
+ (Attribute.UsageAttr): Convert to a public read-only property.
+ (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
+ (Attribute.ResolveType, Attribute.Resolve)
+ (Attribute.ScanForIndexerName): Update to reflect changes.
+ (Attribute.CheckAttributeTarget): Re-format.
+ (Attribute.ApplyAttributes): Refactor, to various
+ Attributable.ApplyAttributeBuilder methods.
+ * decl.cs (MemberCore): Make Attributable.
+ * class.cs (Accessor): Make Attributable.
+ (MethodData.ApplyAttributes): Use proper attribute types, not
+ attribute names.
+ (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
+ (TypeContainer.ApplyAttributeBuilder)
+ (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
+ (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)
+ (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
+ (Operator.ApplyAttributeBuilder): New factored-out methods.
+ * const.cs (Const.ApplyAttributeBuilder): Likewise.
+ * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
+ * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
+ * parameter.cs (ParameterBase): New Attributable base class
+ that can also represent Return types.
+ (Parameter): Update to the changes.
+
+2004-04-29 Jackson Harper <jackson@ximian.com>
+
+ * driver.cs: Prefer the corlib system version when looking for
+ assemblies in the GAC. This is still a hack, but its a better hack
+ now.
+
+2004-04-29 Marek Safar <marek.safar@seznam.cz>
+
+ * decl.cs, enum.cs: Improved error 3005 reporting.
+
+ * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
+ (related_symbols): New private member for list of symbols
+ related to reported error/warning.
+
+ * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
+
+2004-04-29 Martin Baulig <martin@ximian.com>
+
+ * ecore.cs (Expression.Constantify): If we're an enum and
+ TypeManager.TypeToCoreType() doesn't give us another type, use
+ t.UnderlyingSystemType. Fixes #56178.
+
+2004-04-29 Martin Baulig <martin@ximian.com>
+
+ * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
+ interfaces and for each interface, only add members directly
+ declared in that interface. Fixes #53255.
+
+2004-04-28 Martin Baulig <martin@ximian.com>
+
+ * expression.cs (ConditionalLogicalOperator): Use a temporary
+ variable for `left' to avoid that we evaluate it more than once;
+ bug #52588.
+
+2004-04-28 Martin Baulig <martin@ximian.com>
+
+ * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
+ `void[]' (CS1547).
+
+2004-04-28 Martin Baulig <martin@ximian.com>
+
+ * statement.cs (LocalInfo.Resolve): Check whether the type is not
+ void (CS1547).
+
+ * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
+ whether the type is not void (CS1547).
+
+2004-04-28 Martin Baulig <martin@ximian.com>
+
+ * expression.cs (Unary.DoResolveLValue): Override this and report
+ CS0131 for anything but Operator.Indirection.
+
+2004-04-28 Martin Baulig <martin@ximian.com>
+
+ Committing a patch from Ben Maurer; see bug #50820.
+
+ * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
+ check for classes.
+
+ * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
+ classes.
+
+2004-04-28 Martin Baulig <martin@ximian.com>
+
+ Committing a patch from Ben Maurer; see bug #50820.
+
+ * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
+ check for classes.
+
+ * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
+ classes.
+
+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.
+
+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-08 Martin Baulig <martin@ximian.com>
+
+ Merged latest changes into gmcs. Please keep this comment in
+ here, it makes it easier for me to see what changed in MCS since
+ the last time I merged.
+
+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
+ on a type parameter, use the new `Constrained' prefix opcode.
+
+2004-04-01 Martin Baulig <martin@ximian.com>
+
+ * generic.cs (ConstructedType.CheckConstraints): Use
+ Convert.ImplicitStandardConversionExists(); user-defined implicit
+ conversions are not allowed according to the spec.
+
+2004-03-30 Martin Baulig <martin@ximian.com>
+
+ * expression.cs (New): Added support for type parameters.
+
+ * typemanager.cs
+ (TypeManager.activator_type): New public static field.
+ (TypeManager.activator_create_instance): Likewise.
+
+2004-03-30 Martin Baulig <martin@ximian.com>
+
+ * typemanager.cs (TypeManager.HasConstructorConstraint): New
+ public method.
+
+2004-03-30 Martin Baulig <martin@ximian.com>
+
+ * generic.cs (ConstructedType.CheckConstraints): Actually follow
+ the spec here: the argument type must be convertible to the
+ constraints.
+
+2004-03-30 Martin Baulig <martin@ximian.com>
+
+ * generic.cs
+ (TypeParameter.Define, TypeParameter.DefineMethod): Call
+ TypeManager.AddTypeParameter().
+ (ConstructedType.CheckConstraints): Re-enable this and actually
+ check whether we have a constructor constraint.
+
+ * typemanager.cs
+ (TypeManager.builder_to_type_param): New static field.
+ (TypeManager.AddTypeParameter): New static method.
+ (TypeManager.LookupTypeParameter): New public method.
+
+2004-03-30 Martin Baulig <martin@ximian.com>
+
+ * generic.cs (TypeParameter.DefineType): Return a boolean and use
+ the new API to actually define the constructor constraint.
+
+ * typemanager.cs
+ (TypeManager.new_constraint_attr_type): New static field.
+ (TypeManager.InitCoreTypes): Initialize it.
+
+2004-03-30 Martin Baulig <martin@ximian.com>
+
+ * generic.cs (Constraints): Completed error checking, use correct
+ error numbers.
+
+2004-03-29 Martin Baulig <martin@ximian.com>
+
+ * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
+
+ * expression.cs (Invocation.InferTypeArguments): Added overloaded
+ public version which takes a `ParameterData pd' instead of an
+ `ArrayList args'.
+
+2004-03-29 Martin Baulig <martin@ximian.com>
+
+ * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
+ not a MethodInfo.
+
+2004-03-29 Martin Baulig <martin@ximian.com>
+
+ * expression.cs (Argument.ResolveMethodGroup): If we're a
+ ConstructedType, call GetMemberAccess() on it.
+
+2004-03-29 Martin Baulig <martin@ximian.com>
+
+ * class.cs (MethodBase.CheckGenericOverride): New abstract method.
+ (MethodCore.CheckGenericOverride): When overriding a generic
+ method, check whether the constraints match.
+
+ * support.cs (GenericConstraints): New public interface.
+ (ParameterData.GenericConstraints): New public method.
+
+ * parameter.cs (Parameter.Resolve): Check whether we're a generic
+ method parameter and compute our constraints if appropriate.
+ (Parameter.GenericConstraints): New public property.
+
+ * generic.cs (Constraints): Implement GenericConstraints.
+
+2004-03-29 Martin Baulig <martin@ximian.com>
+
+ * decl.cs (MemberCache.FindMemberToOverride): Use
+ `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
+
+2004-03-29 Martin Baulig <martin@ximian.com>
+
+ * generic.cs (GenericMethod.Define): Resolve our type parameters.
+
+2004-03-29 Martin Baulig <martin@ximian.com>
+
+ * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
+ not allowed on non-generic declarations").
+
+2004-03-29 Martin Baulig <martin@ximian.com>
+
+ * expression.cs (Invocation.InferTypeArguments): Added overloaded
+ public version of this method.
+
+ * class.cs (MethodCore.IsDuplicateImplementation): Use
+ Invocation.InferTypeArguments() to check this.
+
+2004-03-29 Martin Baulig <martin@ximian.com>
+
+ * convert.cs: Use TypeManager.IsDelegateType() instead of
+ comparing types correctly.
+
+2004-03-29 Martin Baulig <martin@ximian.com>
+
+ * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
+ types directly to make it work for generic instances.
+
+ * typemanager.cs (TypeManager.IsSubclassOf): New static method.
+
+2004-03-29 Martin Baulig <martin@ximian.com>
+
+ * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
+ support for arrays.
+
+2004-03-24 Martin Baulig <martin@ximian.com>
+
+ * decl.cs (DeclSpace.FindType): Also use
+ TypeManager.CheckGeneric() for types from the using clauses.
+
+2004-03-23 Martin Baulig <martin@ximian.com>
+
+ * expression.cs (Invocation.OverloadResolve): Added `bool
+ may_fail' argument and use it instead of the Location.IsNull() hack.
+
+2004-03-23 Martin Baulig <martin@ximian.com>
+
+ * expression.cs (Invocation.InferType): Use correct type inference
+ rules here.
+
+2004-03-23 Martin Baulig <martin@ximian.com>
+
+ * ecore.cs (MethodGroupExpr.Name): Use
+ TypeManager.CSharpSignature() instead of just the name.
+
+ * expression.cs (Invocation.OverloadResolve): Provide better error
+ reporting.
+ (Invocation.DoResolve): OverloadResolve() never returns null
+ without reporting an error, so removed the error -6 reporting here.
+
+2004-03-23 Martin Baulig <martin@ximian.com>
+
+ * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
+ generic methods.
+
+ * cs-parser.jay (delegate_declaration): Support generic delegates.
+
+ * delegate.cs: Support generic delegates.
+
2004-03-22 Martin Baulig <martin@ximian.com>
* expression.cs (Invocation.InferParamsTypeArguments): New static
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.
underscores.
* cs-parser.jay: Update grammar to include anonymous methods.
-
+
* anonymous.cs: new file.
2003-05-27 Miguel de Icaza <miguel@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
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>
* 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
* cs-parser.jay (constructor_initializer): catch another error,
and display nice message.
-
+
(field_declaration): catch void field declaration
to flag a better error.
(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.
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.
(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.
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
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.
* 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
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.
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
*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>
semantics.
Fixes bug 36505
-
+
2003-02-23 Martin Baulig <martin@ximian.com>
* statement.cs (Block.Emit): Override this and set ec.CurrentBlock
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
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>
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
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.
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.
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.
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.
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
* 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.
* 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
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
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>
* 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
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.
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.
IndexerAccess.DoResolve): ditto.
(Invocation.DoResolve): ditto.
-
+
(Invocation.FullMethodDesc): Improve the report string.
* statement.cs (Block): Eliminate IsVariableDefined as it is
* 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.
* 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
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.
Notice that this broke the cs1540 detection, but that will require
more thinking.
-
+
2002-10-22 Gonzalo Paniagua Javier <gonzalo@ximian.com>
* class.cs:
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>
(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.
* 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.
(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:
* 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.
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
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
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.
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
* 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
* 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
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
(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.
avoid having side effects
(Assign.Emit): Call CacheTemporaries in the IAssignMethod.
-
+
* ecore.cs (Expression.CacheTemporaries): Provide empty default
implementation.
(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.
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
* 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>
* 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.
(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>
* 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.
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
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.
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.
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
* 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
(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).
* 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.
(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.
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
* 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
(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
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
* 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.
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.
* 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.
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.
(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
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.
for interfaces
* report.cs: Allow for --fatal to be used with --probe.
-
+
* typemanager.cs (NoTypes): Move the definition for the empty Type
array here.
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.
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.
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.
(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>
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.
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
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 :-)
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
* 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.
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
only.
(Goto): Finally implement this bad boy.
-
+
* cs-parser.jay: Update to reflect new mechanism to implement
labels.
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.
* 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
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
(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.
* 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.
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.
* 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.
(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.
* 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.
* cs-tokenizer.cs: Add support for defines.
Add support for #if, #elif, #else, #endif
-
+
(eval_var): evaluates a variable.
(eval): stubbed for evaluating functions.
(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
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.
Note that this still does not handle the more complex rules of
casts.
-
+
* delegate.cs (Delegate.Populate): Register the delegage constructor builder here.
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).
(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
* 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>
(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).
* 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
* 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
* 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.
* 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.
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
* 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
(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>
IAssignMethod instead.
(LocalVariableReference): ditto.
-
+
* ecore.cs (FieldExpr): Drop IStackStorage and implement
IAssignMethod instead.
(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.
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.
(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.
(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.
(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.
* 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
* 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.
* 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
(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
* 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
and Properties for handling assignment.
(Assign::Emit): Simplify and reuse code.
-
+
* expression.cs (IndexerAccess, PropertyExpr): Implement
IAssignMethod, clean up old code.
* 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
* 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
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
(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).
(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
(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.
* 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.
* 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>
(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.
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.
(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.
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,
(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.
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.
* 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
* 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
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.
* 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.
(UserImplicitCast::Resolve): Eliminate, objects of type
UserImplicitCast are born in a fully resolved state.
-
+
* typemanager.cs (InitCoreTypes): Init also value_type
(System.ValueType).
(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
(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.
(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.
* 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.
(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
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.
* 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.
(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.
LValue objects.
(LocalVariableReference, ParameterReference, FieldExpr): Implement
LValue interface.
-
+
* assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
interface for generating code, simplifies the code.
* 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
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>
* 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.
* 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
* 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
(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.
(Binary::EmitBranchable): Optimization.
(Binary::Emit): Implement code emission for expressions.
-
+
* typemanager.cs (TypeManager): Added two new core types: sbyte
and byte.
(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.
(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
(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.
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
(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.
(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.
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.
(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.
(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.
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
* ../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
* 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
* 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.
(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>
(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.
(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,
* 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).
(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.
* 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
* 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
(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
* 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