2003-05-28 Miguel de Icaza <miguel@ximian.com>
[mono.git] / mcs / mcs / ChangeLog
index c1785ca7c02857d7ed3e73d634573f6a36ae5ca9..85b3686a988f04c3c8df508d8e22185dbf67a429 100755 (executable)
@@ -1,3 +1,172 @@
+2003-05-28  Miguel de Icaza  <miguel@ximian.com>
+
+       * cs-parser.jay: Update grammar to include anonymous methods.
+       
+       * anonymous.cs: new file.
+
+2003-05-27  Miguel de Icaza  <miguel@ximian.com>
+
+       * class.cs (Field.Define): Add missing test for pointers and
+       safety. 
+
+2003-05-27  Ravi Pratap  <ravi@ximian.com>
+
+       * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
+       we use the stobj opcode.
+
+       (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
+       since it wasn't the correct fix. 
+
+       It still is puzzling that we are required to use stobj for IntPtr
+       which seems to be a ValueType.
+
+2003-05-26  Miguel de Icaza  <miguel@ximian.com>
+
+       * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
+       during regular simple name resolution.   Now, the trick is that
+       instead of returning for processing the simplename, we do a
+       TypeManager.LookupType (ie, a rooted lookup as opposed to a
+       contextual lookup type).   If a match is found, return that, if
+       not, return for further composition.
+
+       This fixes long-standing 30485.
+
+       * expression.cs (ArrayCreation.EmitDynamicInitializers): When
+       using the address to initialize an object, do an Stobj instead of
+       using the regular Stelem.
+
+       (IndexerAccess.Emit, IndexerAccess.EmitAssign):
+       Pass `is_base_indexer' to Invocation.EmitCall instead of false.
+       Because if we are a BaseIndexerAccess that value will be true.
+       Fixes 43643.
+
+       * statement.cs (GotoCase.Resolve): Return after reporting an
+       error, do not attempt to continue. 
+
+       * 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
+       ImplicitEnumConversionExists to remove ambiguity. 
+
+       * ecore.cs (NullCast): New type of cast expression class which
+       basically is very similar to EmptyCast with the difference being
+       it still is a constant since it is used only to cast a null to
+       something else
+       (eg. (string) null)
+
+       * convert.cs (ImplicitReferenceConversion): When casting a null
+       literal, we return a NullCast.
+
+       * literal.cs (NullLiteralTyped): Remove - I don't see why this
+       should be around anymore.
+
+       The renaming (reported was slightly wrong). Corrections:
+
+       ConvertImplicitStandard -> ImplicitConversionStandard
+       ConvertExplicitStandard -> ExplicitConversionStandard
+
+       * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
+       before passing them in !
+
+       * convert.cs (ImplicitConversionStandard): When comparing for
+       equal expr and target types, ensure that expr is not a
+       NullLiteral.
+
+       In general, we must not be checking (expr_type ==
+       target_type) in the top level conversion methods
+       (ImplicitConversion, ExplicitConversion etc). This checking is
+       done in the methods that they delegate to.
+
+2003-05-20  Miguel de Icaza  <miguel@ximian.com>
+
+       * convert.cs: Move Error_CannotConvertType,
+       ImplicitReferenceConversion, ImplicitReferenceConversionExists,
+       ImplicitNumericConversion, ImplicitConversionExists,
+       ImplicitUserConversionExists, StandardConversionExists,
+       FindMostEncompassedType, FindMostSpecificSource,
+       FindMostSpecificTarget, ImplicitUserConversion,
+       ExplicitUserConversion, GetConversionOperators,
+       UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
+       TryImplicitIntConversion, Error_CannotConvertImplicit,
+       ConvertImplicitRequired, ConvertNumericExplicit,
+       ExplicitReferenceConversionExists, ConvertReferenceExplicit,
+       ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
+       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
+
+2003-05-19  Martin Baulig  <martin@ximian.com>
+
+       * statement.cs (TypeInfo.StructInfo): Made this type protected.
+       (TypeInfo): Added support for structs having structs as fields.
+
+       * ecore.cs (FieldExpr): Implement IVariable.
+       (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
+       VariableInfo for the field.
+
+2003-05-18  Martin Baulig  <martin@ximian.com>
+
+       * expression.cs (This.DoResolve): Report a CS0027 if we're
+       emitting a field initializer.
+
+2003-05-18  Martin Baulig  <martin@ximian.com>
+
+       * expression.cs (This.ResolveBase): New public function.
+       (This.DoResolve): Check for CS0188.
+
+       * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
+       This.Resolve().
+
+       * ecore.cs (MethodGroupExpr.DoResolve): Set the
+       `instance_expression' to null if we don't have any non-static
+       methods.
+
+2003-05-18  Martin Baulig  <martin@ximian.com>
+
+       Reworked the way how local variables and parameters are handled by
+       the flow analysis code.
+
+       * statement.cs (TypeInfo, VariableMap): New public classes.
+       (VariableInfo): New public class.  This is now responsible for
+       checking whether a variable has been assigned.  It is used for
+       parameters and local variables.
+       (Block.EmitMeta): Take the InternalParameters as argument; compute
+       the layout of the flow vectors here.
+       (Block.LocalMap, Block.ParameterMap): New public properties.
+       (FlowBranching): The .ctor doesn't get the InternalParameters
+       anymore since Block.EmitMeta() now computes the layout of the flow
+       vector.
+       (MyStructInfo): This class is now known as `StructInfo' and nested
+       in `TypeInfo'; we don't access this directly anymore.
+
+       * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
+       property and removed IsAssigned(), IsFieldAssigned(),
+       SetAssigned() and SetFieldAssigned(); we now call them on the
+       VariableInfo so we don't need to duplicate this code everywhere.
+
+       * expression.cs (ParameterReference): Added `Block block' argument
+       to the .ctor.
+       (LocalVariableReference, ParameterReference, This): The new
+       VariableInfo class is now responsible for all the definite
+       assignment stuff.
+
+       * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
+       IsParameterAssigned, SetParameterAssigned): Removed.
+
 2003-05-18  Martin Baulig  <martin@ximian.com>
 
        * typemanager.cs (InitCoreTypes): Try calling
        * parameter.cs (Parameter.ExternalType): drop the two arguments,
        they were unused.
 
-s2003-05-11  Miguel de Icaza  <miguel@ximian.com>
+2003-05-11  Miguel de Icaza  <miguel@ximian.com>
 
        * class.cs (MethodData.Define): Do not set the `newslot' on
        interface members, if they are also flagged as "override".